【问题标题】:Reauthenticate user from Google/Facebook accounts从 Google/Facebook 帐户重新验证用户身份
【发布时间】:2016-09-27 16:52:51
【问题描述】:

所以我需要创建一个 REST API 来为 IOS 应用程序提供功能。我们允许用户仅使用普通帐户或 Facebook/Google 登录进行注册。

我最近一直在阅读 OAuth,我想我了解在我的情况下(当用户使用 Facebook/Google 登录)在我的应用程序上注册帐户时如何使用 OAuth 的过程:

  1. 我向各种社交服务提供商(例如 FB/Google)注册了我的 IOS 应用程序。我最终得到了安全存储在后端的客户端 ID/客户端密钥。
  2. 现在用户单击应用上的社交登录按钮,然后将用户重定向到社交网站进行登录并授予我的应用使用其社交帐户的权限。
  3. 社交 oauth 提供商将使用授权码将用户重定向回我的服务器。
  4. 一旦我的服务器获得授权码,我将使用该授权码、客户端 ID 和密码(或所需的任何其他特定凭据)从社交 oauth 提供程序检索访问令牌。
  5. 现在我有了用户的访问令牌,可以在一段时间内使用他们的社交资源(耶)。
  6. 获得他们的社交访问令牌后,我还会发出一个生成的访问令牌,供应用在向我的 REST api 发出请求时使用(该应用从现在起只会与我的 REST api 通信)。

我的问题:

  • 上述过程是一种好的做法吗?
  • 假设用户从应用程序(而不是他们的社交帐户!)中注销。我仍然拥有他们的社交访问令牌,但我销毁了另一个令牌我发给他们以使用我的 REST api。现在用户回来使用社交登录(例如 Fb/Google)登录我的应用程序。我将如何重新验证这些用户?我知道我不需要用户再次提供权限,但我怎么知道他们是 Fb/Google 的合法用户并且在我的服务器端也有帐户?成功登录后,Fb/Google 会向应用程序提供什么,以便我可以发回我的服务器说:“是的,这个用户是 Fb/Google 的合法社交用户。”。在上述注册过程中,社交 oauth 提供者将提供一个授权码。在这种情况下我会得到什么(后续登录)?

基本上,我需要找到一种方法,将我的 REST API 的访问令牌重新颁发给成功重新登录的应用程序的 FB/Google 用户。

【问题讨论】:

  • 您的应用程序是否已通过 Google 和 Facebook 身份验证获得 Apple 批准?

标签: ios facebook authentication oauth


【解决方案1】:

回答你的问题,

  1. 上述过程是一种好的做法吗?

是的,这确实是一个很好的做法,你为什么要问?你不是在移动端存储客户端Id/Secret,你只是重定向到Oauth认证的社交提供者站点,服务器和服务器之间发生通信,这也被认为是安全的。

关于第三方提供者的访问令牌,除非您以后想访问社交提供者上的任何资源,否则您不必存储他们的任何访问令牌,即一旦您通过身份验证,您可以安全地丢弃他们的访问令牌并且生成自己的

关于第二个问题,

您不必担心,即一旦用户注销,您只需撤销您颁发的 accessToken。

关于 Oauth 流程,您只需重定向到社交提供者的 oauth 流程(不用担心用户是否登录),社交提供者会处理它,您将获得授权码最后,您只需像第一次一样处理它。

希望这能回答您的问题!

【讨论】:

  • 所以如果我在退出我的应用程序时撤销他们的访问令牌,我需要在他们登录时再次重复整个 oauth 过程以检索新的访问令牌?如果是这种情况(这很好),是否会提示用户重新授权我的应用以使用他们的社交帐户?
  • 好的,一般的oauth流程是,app重定向到social provider,如果没有提示登录,则provider检查用户是否登录,然后检查你请求的范围是否已经被用户授权,如果没有提示授权(但我看到有时候提示已经授权的东西,可能是出于安全原因)然后要么返回授权码,要么返回错误,所以你只需要处理这两个返回值,中间过程将由社会提供者
  • 那么当用户再次尝试登录时,我是否还会收到另一个授权码(即使他们已经授权了我的应用)?
  • 是的,授权码是给你的,不是给用户的,所以每次你重定向时,你都会得到新的授权码,也就是oauth规范。有关更多详细信息,请查看 Google Oauth 流程,这是一个很好的文档 - developers.google.com/identity/protocols/OAuth2#basicsteps
猜你喜欢
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 2021-06-06
  • 2019-01-31
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多