IdentityServer4令牌签名验证

Rem*_*Rem 5 c# jwt asp.net-core identityserver4

我有IdentityServer4生成签名的JWT令牌。在我的Web API中,我添加了身份验证中间件来验证这些令牌:

         app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
        {
            Authority = env.IsProduction() ? "https://www.example.com/api/" : "http://localhost/api/",
            AllowedScopes = { "WebAPI", "firm",
                IdentityServerConstants.StandardScopes.OpenId,
                IdentityServerConstants.StandardScopes.Profile },
            RequireHttpsMetadata = env.IsProduction(),
        });
Run Code Online (Sandbox Code Playgroud)

它运作完美。但是,我怀疑它没有验证jwt令牌的签名,因为没有配置用于验证令牌的公共密钥。如何配置令牌签名验证?

PS:我尝试通过这种方式使用UseJwtBearerAuthentication:

        var cert = new X509Certificate2("X509.pfx", "mypassword");
        var TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            ValidateIssuer = true,
            ValidIssuer = env.IsProduction() ? "https://www.example.com/api/" : "http://localhost/api/",
            IssuerSigningKey = new X509SecurityKey(cert),
        };
        app.UseJwtBearerAuthentication(new JwtBearerOptions
        {
            Authority = env.IsProduction() ? "https://www.wigwam3d.com/api/" : "http://localhost/api/",
            Audience = "WebAPI",
            RequireHttpsMetadata = env.IsProduction(),
            TokenValidationParameters = TokenValidationParameters
        });
Run Code Online (Sandbox Code Playgroud)

它也可以工作(我希望也可以验证令牌签名!),但是给了我另一个错误:

UserManager.GetUserAsync(HttpContext.HttpContext.User)
Run Code Online (Sandbox Code Playgroud)

返回null,在使用UseIdentityServerAuthentication时返回正确的用户

小智 5

我认为没有必要向您的 API 添加证书进行验证。.UseIdentityServerAuthentication()中间件调用您的 IdentiyServer 在启动时从https://www.example.com/api/.well-known/openid-configuration. 至少这是我的理解它是如何工作的。

  • 你是对的 /sf/ask/2687618181/ 谢谢! (2认同)