【问题标题】:How to make a custom grant type in IdentityServer4如何在 IdentityServer4 中创建自定义授权类型
【发布时间】:2021-10-27 04:29:29
【问题描述】:

我正在尝试使用 IdentityServer 实现自定义授权类型,但我迷路了。

我有多个应用程序已经使用 PKCE 登录到另一个 IdentityServer,它需要访问受另一个保护的多个 API。我怎样才能使它工作?我应该实现一个 IExtensionGrantValidator 并在保护 API 的那个中注册 IdentyServer 签名密钥吗?

【问题讨论】:

  • 您认为为什么需要自定义授权类型?
  • 因为我需要根据第一个令牌生成第二个令牌并修改声明

标签: oauth-2.0 jwt identityserver4


【解决方案1】:

在 IdentityServer 实例之间共享密钥将允许您在需要来自另一个颁发者的令牌的 API 中使用来自颁发者的令牌。

实际上,您甚至不需要共享签名密钥,您可以使用不同的签名密钥并将一个实例的签名密钥作为验证密钥添加到另一个实例。

然后,当 API 想要在后端验证令牌时,它们会从 OIDC 提供者 (IdentityServer) 获取 openid 配置,并使用服务器广播的密钥验证 JWT 签名。

为了说明,IdS 演示应用定义了一个键 https://demo.identityserver.io/.well-known/openid-configuration/jwks。当您使用AddValidationKey 添加多个验证密钥时,您将在.../jwks 元数据中看到所有这些密钥。然后应用程序将使用所有这些令牌进行验证。

// in instance A
services.AddIdentityServer()
   .AddSigningCredential("CN=signing key for instance A")
   .AddValidationKey("CN=signing key for instance B")

// in instance B
services.AddIdentityServer()
   .AddSigningCredential("CN=signing key for instance B")
   .AddValidationKey("CN=signing key for instance A")

参考文献

【讨论】:

  • 非常感谢!我按照你说的做了。如果我理解正确,我根本不需要 IExtensionGrantValidator 验证器?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多