转换从 OpenID 服务器收到的令牌

Transformation of token received from OpenID server

我目前有一个分布式系统,其中包含充当 SSO 服务器的 OpenID Connect 服务器 (IdentityServer3)。使用 SSO 服务器的客户端 AngularJS SPA:s 具有 WebAPI v2 后端。

我的基本登录流程正常,但我需要一些帮助来配置 WebAPI/OWIN 管道以允许转换接收到的令牌声明,即。删除不必要的声明并添加本地声明。我假设我需要创建一个本地 JWT,而不是使用从 SSO 服务器收到的 JWT。

问题是,这样做的最佳方法是什么?是否有 OWIN 中间件可以帮助解决这个问题,或者我是否需要 "manually" 根据从 SSO 服务器收到的声明生成一个新的本地签名的 JWT?

当前实施细节:

  1. AngularJS SPA 使用 SSO 服务器进行身份验证 授权代码流并接收授权代码。
  2. SPA 将授权代码发布到 WebAPI。
  3. WebAPI 接收授权代码并使用 OAuth2Client class(Thinktecture.IdentityModel.Clients 的一部分)从 SSO 服务器请求 AccessToken/JWT。此 AccessToken 返回给 SPA,用于对 WebAPI 进行的任何进一步请求。

所以我的问题主要与第 3 步有关。如何最好地更改我当前的流程以生成还包含本地声明的令牌?

此外,您建议的解决方案应使用哪种身份验证中间件(JwtBearerAuthentication、OpenIdConnectAuthentication 或 OAuthBearerAuthentication)?

对我可能混淆的术语用法表示歉意,我是 OAuth 的初学者,尤其是 OWIN 管道。 :)

  1. 您的 WebApi 应该使用 BearerTokenAuthentication。
  2. 要在单个调用中获取访问令牌 (access_token) 和声明 (id_token),您需要将响应类型设置为 ResponseType="token id_token"
  3. 您可以在 IdentityServer3 Samples 查看各种准备好的 运行 样本。具体检查隐式流示例。