如何使用IdentityServer4验证x509签名凭据

时间:2019-05-07 20:53:16

标签: asp.net-core oauth oauth-2.0 identityserver4

我有两个.Net Core API-一个使用IdentityServer4发行JWT身份令牌的授权服务器,以及一个受保护并需要该令牌的资源API。

身份验证服务器正在使用自签名的x509证书(目前)。

在auth服务器中,ConfigureServices中有类似的内容:

var certificate = new X509Certificate2(//path.to.my.certificate//);
services.AddIdentityServer().AddSigningCredential(certificate)

但是我对资源API如何验证签名凭据的理解尚不清楚。

我在ConfigureServices中拥有的资源API都是:

services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
                    .AddIdentityServerAuthentication(
                    options =>
                    {
                        options.Authority = "//MyAuthAPI";
                    });

资源API是否应使用相同的证书来验证JWT令牌?那有必要吗?

如果是这样,应该怎么做?

1 个答案:

答案 0 :(得分:1)

基本上,ASP.Net Core中间件从https://{yourDomain}/.well-known/openid-configuration uri从options.Authority下载身份提供者配置。如果您实际上导航到一个子URL https://{yourDomain}/.well-known/openid-configuration/jwks,您还将看到身份提供者发布了用于签名令牌的公共密钥。

获取公共密钥后,中间件便可以使用常规不对称加密验证方法,使用api请求中包含的标头(Authorize : Bearer {token})来验证令牌是否确实由预期的授权机构uri发出。