[openid connect 2.0并在仅HTTP cookie中设置身份验证JWT

问题描述 投票:0回答:2

由于本地存储和会话存储都可以通过JavaScript访问,因此最好不要将身份验证JWT存储在它们中的任何一个中,以避免XSS攻击。

由于OpenID connect 2.0是在单独的域上执行的,我们如何设置包含经过身份验证的JWT的服务器端仅HTTP cookie?

我的猜测是:

  1. 用户访问您的网站,然后单击登录。
  2. 用户被重定向到第三方OpenID connect 2.0提供程序。
  3. 用户登录,现在已重定向到您选择的路由www.example.com/myredirectlogin。
  4. 当重定向器到达我的路由并在URI中传递JWT令牌时,用户的浏览器会发出一个get请求。
  5. 然后,服务器使用提供者提供的公钥通过非对称算法验证JWT。
  6. 然后,服务器将JWT作为值返回服务器端仅HTTP的cookie,并且客户端没有JWT的任何回忆,因为它只是在URI中,并且没有存储在其他任何地方。

我的问题是:以上是否是正确处理OpenIDConnect 2.0流的正确过程?

security oauth-2.0 jwt openid-connect
2个回答
0
投票

[我假设您说的是“身份验证JWT”,是指“ Id令牌”,因为这是OpenID connect所需的唯一JWT。

OpenID连接支持的所有流在the spec中列出。如果要登录到授权服务器并验证到单独的站点,那么您将经常使用“授权代码”流,该流根本不会将ID令牌发送到浏览器。 OpenID connect还定义了其他流程,但是没有一个提到将ID令牌存储在cookie中-客户端(您要验证的站点)和浏览器之间如何维护会话是与验证用户不同的问题。


0
投票

我在授权码流中找到了答案:https://connect2id.com/learn/openid-connect

步骤列表

OAuth 2.0和OIDC授权代码流

  1. 用户点击了您网站的登录路径
  2. 将用户重定向到具有正确租户ID的身份提供者
  3. 用户已通过身份验证,并使用查询参数(即&access_code = 234234sdfkljsak)中的访问令牌重定向到您的回调路由。
  4. 获取请求是在Web服务器上以回调路径在查询参数中使用访问令牌执行的。
  5. 然后,此回调get路由应进行一次调用,以从提供者即azure b2c检索实际的JWTidentity令牌,并将访问令牌作为请求的一部分添加为查询参数或正文。
  6. 提供者(Azure B2C)随后将以一个身份JWT令牌作为响应,我们将把它作为纯HTTP会话cookie发送回用户的浏览器,这样用户现在就可以在所有浏览器选项卡中进行单点登录,并且该cookie将与每个请求都会自动执行,并受到xss的保护。
© www.soinside.com 2019 - 2024. All rights reserved.