【问题标题】:What to do after getting oauth2 token?拿到 oauth2 令牌后怎么办?
【发布时间】:2016-04-20 13:31:00
【问题描述】:

我正在尝试实现“使用...登录”身份验证系统。

我已经阅读了几篇关于 oauth2 的帖子和文章。我读过的每个人都在获取访问令牌并可能登录该会话的用户时停止讨论或教程。

我明白这一点,并且可以实施该部分。这是我没有得到的:

  1. 当用户离开站点并且一周没有回来,但他们仍然登录到客户端时,我如何将他们重新登录到我的应用程序?我知道您将访问令牌保存到数据库中,但您如何使用它重新登录?

  2. 如果他们从客户端注销,如何将他们重定向到客户端的登录页面。似乎每次我尝试重新登录时,都会要求我再次允许或拒绝该应用程序。我知道这不是标准的,那么我该如何解决呢?我应该向客户端发送什么信息,以便它知道用户已经授权了应用程序?

除非有人知道一篇文章,否则我不需要代码示例,我真正想要的只是在收到并保存访问令牌后如何处理访问令牌的高级概述。

谢谢!

编辑:

我了解 OAuth2 本身并不是一个授权系统,但每个人和他们的狗都有一个“使用...登录”选项。为了做到这一点,有必要使用 OAuth2(或某种形式的 API 标识符)。这就是我想要做的。

下面的流程听起来是否正确:

  1. 从身份验证服务器获取临时代码
  2. 用它换取访问令牌
  3. 从身份验证服务器获取用户数据并使用它做任何你想做的事情(可能保存到数据库)。
  4. 让用户登录,同时保存刷新令牌。
  5. 在 cookie 中为用户设置一个标识符(访问令牌)
  6. 当用户回来时,通过 cookie 令牌识别他们。
  7. 尝试调用 api 并查看访问令牌是否仍然有效。
  8. 如果访问令牌仍然有效,那就太好了!
  9. 如果访问令牌无效,则通过刷新令牌获取一个新令牌。

这是使用 OAuth2 帮助验证用户的基本要点吗?

【问题讨论】:

    标签: api authentication oauth-2.0


    【解决方案1】:

    首先,OAuth2 不是身份验证协议。颁发的访问令牌不会让您登录,但允许您调用 Web 服务 (API)。

    OpenID Connect 是建立在 OAuth2 之上的身份验证协议。它允许您从识别用户的授权服务器取回id_token。如果您将令牌(或其中的信息)保存在例如 cookie 中,则可以为用户建立经过身份验证的会话。

    您也不要将访问令牌存储在数据库中。访问令牌是短暂的,将它们存储在服务器端没有任何意义。

    您确实将刷新令牌存储在数据库中。当客户端(请求令牌的应用程序)是机密的(可以保密)时,可能会发出刷新令牌。当旧令牌过期时,客户端可以使用此刷新令牌为 API 请求新的访问令牌。当用户一周未访问该应用时,这肯定会发生。

    【讨论】:

    • 您介意看看我的编辑,如果我的想法正确,请告诉我?
    • @john 5 - 记住我的令牌是一个身份验证 cookie 7 - 不明白你的意思,客户端是请求令牌的 Web 应用程序。 8 - 你调用 API。如果返回 401,则使用刷新令牌从授权服务器获取新的访问令牌
    • 5- 我的想法是将访问令牌保留在后端以确保安全。那不是必须的吗?我可以将访问令牌作为身份验证 cookie 吗? 7 - 我误解了客户是什么。我的意思是身份验证服务器。我已经更新了 8。谢谢!
    • @john 你不调用授权服务器来查看令牌是否有效。您的 API 无需与授权服务器对话即可验证令牌。
    • 好的。我想我现在明白了。非常感谢您的帮助!
    【解决方案2】:

    这是我在使用 OAuth 2 令牌时所做的:

    1.) 您应该将访问令牌存储在客户端的本地存储中。因此,一旦您存储了它,您就可以将它用于您发出的每个请求,例如将其添加到授权标头“Bearer”+ accessToken; 不要忘记在客户注销时清除本地存储。

    2.) 基本上,如果您向 API 发送请求并且它返回“HTTP Error 401 Unauthorized”(状态 401),那么您知道您应该立即将用户重定向到登录页面,因为他/她不是授权。

    好吧,如果您使用基于角色的授权,那么用户可能已登录但未获得授权。这种情况应该由您处理。仅在 UI 上显示与用户授权级别对应的操作。

    希望这会有所帮助。

    【讨论】:

    • 为了确保我理解: 1) 设置类似“记住我”的 cookie,以便我可以查找访问令牌。那是对的吗? 2)问题是每次我将用户发送回客户端时,它都会要求他们再次授权我的应用程序。我需要将哪些标头发送给客户端,以便他们知道只需登录用户?
    猜你喜欢
    • 2013-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多