首页 > 解决方案 > 有多个资源时使用 Auth2 进行身份验证

问题描述

我需要实现用户的单点登录,它可以从几个不同的服务中获取服务。

当只有一个服务时,用户可以从客户端登录,将请求发送到后端,将 URL 返回到 JWT 令牌颁发服务器,他可以从中获取令牌,然后将其发送回 BE他现在已通过身份验证。

现在的变化是,他需要得到更多的服务。每个服务都有自己的前端和后端,但每个人都使用相同的发行者。这意味着有 FE 和 BE 的服务,并且还有另一个用于身份验证的通用 BE。

在场景中进行身份验证的正确流程是什么?通用 BE 能否为每个所需服务的客户端颁发令牌?或者 BE 应该使用服务的 BE url 响应客户端,并让客户端自己从每个服务发送身份验证令牌响应?或者是其他东西?

标签: oauthoauth-2.0jwt

解决方案


我假设您的意思是 OpenID Connect,因为 OAuth2.0 不用于身份验证并且不需要使用 JWT。此外,在您的场景中,没有多个资源,而是多个客户端/依赖方。

使用 OpendID Connect Implicit 流,颁发者最终将向用户的浏览器发送一个 id 令牌 (JWT)。此 JWT 可用于对服务进行身份验证。每个 JWT 都将包含一个aud(受众)声明,以标识它应该用于的服务。

使用授权码流程,颁发者最终将向用户的浏览器发送一个授权码。用户将代码发送到服务,服务会将代码及其客户端 ID 发送给颁发者,以换取 ID 令牌 (JWT) 和访问令牌。

在这两种情况下,服务都会使用(颁发者)声明识别最终用户iss,并通过检查签名、到期和受众来验证 JWT。


推荐阅读