如何在 IdentityServer4 中创建自定义授权类型
How to make a custom grant type in IdentityServer4
我正在尝试使用 IdentityServer 实现自定义授权类型,但我迷路了。
我有多个应用程序已经使用 PKCE 登录到另一个 IdentityServer,它需要访问受另一个保护的多个 API。我怎样才能让它发挥作用?我应该实施 IExtensionGrantValidator 并在保护 API 的密钥中注册 IdentyServer 签名密钥吗?
在 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")
参考资料
我正在尝试使用 IdentityServer 实现自定义授权类型,但我迷路了。
我有多个应用程序已经使用 PKCE 登录到另一个 IdentityServer,它需要访问受另一个保护的多个 API。我怎样才能让它发挥作用?我应该实施 IExtensionGrantValidator 并在保护 API 的密钥中注册 IdentyServer 签名密钥吗?
在 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")