rin*_*.io 5 openid rest oauth oauth-2.0 jwt
我们有一个基于cookie的auth的常规Web应用程序,现在我们想要分割前端和后端(api)以便拥有第三方公共API.所以我们的后端将在一个域上并在另一个域上前端.
对于授权,我们希望使用JWT切换OAuth 2.在这种情况下,我们的前端应用程序将不得不使用access_token而不是cookie会话,它带来了一个很大的问题:
如何保持登录状态 - 臭名昭着的"记住我"复选框(来自基于表单的网站身份验证的第二部分)
从OAuth2的角度来看,我们的前端应用程序将在资源所有者密码凭据授予和隐式授权之间使用某些东西.它更接近密码凭证授予,因为我们仍将使用通常的登录表单,并且不会将用户重定向到另一个域以便登录.同时它更接近隐式授权,因为它将全部仅限浏览器基于JavaScript的时间access_token将保存在浏览器中.
RFC 说如果你使用隐式授权,授权服务器不能发出刷新令牌,而我的问题是,如果你没有真正使用3-d party OAuth而你自己的api,它在这个用例中是否仍然有效?本能地,我觉得refresh_token在浏览器中有一个安全漏洞,并想与你们确认,但这refresh_token似乎是持久登录工作方式与我们使用cookie一样的唯一方法.
如果我可以使用refresh_token仅浏览器应用程序,OpenID规范仍然无法回答我的问题
refresh_token只提供access_type=offlinerefresh_token与混合流程refresh_token混合流动的一些前景,但并不精确UPD2感谢@reallifelolcat
看起来OpenID Connect没有明确支持资源所有者密码凭据授权,这意味着您必须将用户重定向到OpenID Connect服务器才能执行登录.您是否知道是否有其他方法可以通过OAuth 2.0对用户凭据进行身份验证?
我相信分裂api和前端这些日子变得越来越普遍,如果你分享如何解决这个持久登录问题,如果你完全放弃并强迫用户每X周重新登录,我会很感激.
谢谢!
小智 5
访问令牌和刷新令牌与使用 OpenID Connect登录无关。这些仅用于授权访问用户配置文件信息,以及在登录后对您的公共 API 进行身份验证的服务调用。ID Token和Access Token的区别请参考规范。
如果您打算使用 OpenID Connect 进行登录,那么从您目前所写的内容来看,您似乎需要托管自己的 OpenID 提供程序 (OP),因为您想避免转到另一个域进行登录:
我们仍将使用通常的登录表单,并且不会将用户重定向到另一个域以进行登录。
如果您想成为自己的身份提供者,那么您将拥有更多权力。这意味着您必须部署自己的 OpenID Connect 服务器的工作实例,并带有授权和令牌端点。
现在这是您持久登录的部分。您的浏览器 web 应用程序将成为您现在拥有的 OP 服务器的依赖方。当用户尝试使用 OpenID Connect 登录您的浏览器应用程序时,他们需要向您的 OP 服务器进行身份验证。通过 OIDC 流程,您的浏览器应用程序将获得一个 ID 令牌,其中包含标识用户的颁发者/主题对。
由您决定用户如何保持登录到您的 OP 服务器,但只要用户至少授权浏览器应用一次:http : //openid.net/specs/openid-connect-core-1_0.html#同意 然后您可以保存该浏览器应用程序对所有未来登录请求的同意,从而保持持久登录。
您将不得不考虑如何处理会话管理,但听起来您已经有一些 cookie 事情,因此您可以使用它(请参阅此答案:OpenID 登录机制 - 保持登录状态)。否则,您最终会遇到浏览器 web 应用程序必须始终获取新的 id 令牌的情况。
同样正如 Florent 所提到的,在执行基于浏览器的 web 应用程序的公共客户端时,您应该考虑安全因素。示例:https : //tools.ietf.org/html/rfc6749#section-10.16
| 归档时间: |
|
| 查看次数: |
2658 次 |
| 最近记录: |