我有两个.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令牌?那有必要吗?
如果是这样,应该怎么做?
答案 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发出。