Ios 从Google/Facebook帐户重新验证用户

Ios 从Google/Facebook帐户重新验证用户,ios,facebook,authentication,oauth,Ios,Facebook,Authentication,Oauth,所以我需要创建一个RESTAPI来为IOS应用程序提供功能。我们允许用户只需一个普通帐户或通过Facebook/Google登录注册 我最近一直在阅读OAuth,我想我了解在我的情况下(当用户使用Facebook/Google登录时)如何使用OAuth在我的应用程序上注册帐户的过程: 我向各种社交网站(如FB/Google)注册我的IOS应用程序。最后,我将客户端ID/客户端密钥安全地存储在后端 现在,用户单击应用程序上的社交登录按钮,然后将用户重定向到社交网站进行登录,并授予我的应用程序使用其

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

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

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

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

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

  • 上述流程是一种良好的做法吗?
  • 是的,这确实是一个很好的做法,你为什么要问?。您没有在移动端中存储客户机Id/Secret,您只是重定向到Oauth身份验证的社交提供商站点,服务器之间的通信也被认为是安全的

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

    关于第二个问题,

    您不必担心,也就是说,一旦用户注销,您只需撤销您颁发的accessToken

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


    希望这能回答你的问题

    因此,如果我在注销我的应用程序时撤销了他们的访问令牌,那么当他们登录以检索新的访问令牌时,我需要再次重复整个oauth过程?如果是这种情况(这很好),是否会提示用户重新授权我的应用程序以使用他们的社交帐户?好的,oauth过程通常是,应用程序重定向到社交提供商,提供商检查用户是否已登录如果未提示登录,然后检查您请求的范围是否已由用户授权,如果未提示授权(但我发现有时他们会提示已经授权的内容,可能是出于安全原因)然后返回授权码或返回错误,因此您所要做的就是处理这两个返回值,中间过程将由社交提供商处理。因此,当用户再次尝试登录时(即使他们已经授权了我的应用程序),我还会收到另一个授权码吗?是的,授权代码是为您而非用户提供的,因此每次重定向时,您都会获得新的授权代码,这是oauth规范。有关更多详细信息,请查看Google oauth流程,这是一个很好的文档-您的应用程序是否仅通过Google和Facebook认证就获得了苹果的批准?