我正在尝试实施“使用...登录”身份验证系统。
我已经阅读了几篇关于oauth2的帖子和文章。我读过的每个人都停止了讨论或教程,以获取访问令牌,并可能登录该会话的用户。
我理解并且可以实现该部分。这是我没有得到的:
当用户离开网站并且一周没有回来,但他们仍然登录到客户端时,如何将它们记录回我的应用程序?我知道您将访问令牌保存到数据库,但是如何使用它来重新登录?
如果他们已退出客户端,您如何将其重定向到客户端的登录页面。似乎每次我尝试重新登录时都会被要求再次允许或拒绝该应用程序。我知道这不标准,所以我该如何解决?我如何发送客户端以便它知道用户已经授权该应用程序?
除非有人知道某篇文章,否则我不需要代码示例,我真正想要的只是对我在收到并保存之后如何处理访问令牌的高级概述。
谢谢!
修改
据我所知,OAuth2本身并不是一个授权系统,但是每个人和他们的狗都有一个“Login with ...”选项。为了做到这一点,有必要使用OAuth2(或某种形式的API标识符)。这就是我想要做的事情。
以下听起来像正确的流程:
这是使用OAuth2来帮助验证用户身份的基本要点吗?
答案 0 :(得分:4)
首先,OAuth2不是身份验证协议。发布的访问令牌不会让您登录,但允许您调用Web服务(API)。
OpenID Connect是在OAuth2之上构建的身份验证协议。它允许您从授权服务器返回标识用户的id_token
。如果您在例如cookie中保护令牌(或其中的信息),则可以为用户建立经过身份验证的会话。
您也不会在数据库中存储访问令牌。访问令牌是短暂的,将它们存储在服务器端是没有用的。
您确实将刷新令牌存储在数据库中。当客户端(请求令牌的应用程序)是机密的(可以保密)时,可以发出刷新令牌。当旧令牌过期时,客户端可以使用此刷新令牌为API请求新的访问令牌。当用户一周没有访问该应用程序时,这肯定会发生。
答案 1 :(得分:3)
这是我在使用OAuth 2令牌时所做的事情:
1。)您应该将访问令牌存储在客户端的本地存储中。因此,一旦您存储它,您可以将它用于您所做的每个请求,例如将其添加到授权标题" Bearer" + accessToken; 不要忘记在客户退出时清除客户端的本地存储空间。
2。)基本上,如果您向API发送请求并返回" HTTP错误401未授权" (状态401)然后您知道您应该立即将用户重定向到登录页面,因为他/她未获得授权。
好吧,如果您使用的是基于角色的授权,那么用户可能已登录但未获得授权。此方案应由您处理。仅在UI上显示与用户授权级别对应的操作。
希望这有帮助。