Web API 验证来自自定义身份验证提供程序的 JWT 不记名令牌
Posted
技术标签:
【中文标题】Web API 验证来自自定义身份验证提供程序的 JWT 不记名令牌【英文标题】:Web API Validate JWT Bearer Token from Custom Auth Provider 【发布时间】:2019-09-26 12:38:06 【问题描述】:我已经找了几个小时的示例或教程,并认为我应该在这一点上发布一些东西。
我正在尝试验证来自我的 .Net 4.7.2 Web Api 2 项目中的自定义身份验证提供程序的不记名令牌。我有一个 SPA 应用程序,它从这个身份验证提供程序获取承载令牌,并将承载令牌发送到我的 WebApi 端点。我需要转身并验证每个请求中的令牌。我认为有一种方法可以指向 Microsoft.Owin.Security.Jwt 命名空间中的类,以根据众所周知的身份验证提供程序 discovery information url 验证令牌。
以前有没有人这样做过或向我指出一个好的库/文档/教程?
我知道我可以编写自己的身份验证请求过滤器,然后从身份验证服务器中提取公共证书并解析令牌并验证签名,但我自己编写与使用相比似乎是一个可怕的想法适当的库。
【问题讨论】:
【参考方案1】:好吧,原来我找到了一个很好的例子here
以下代码设置我们的 webapi 以使用我们的自定义身份验证提供程序验证令牌,同时通过 OIDC 发现 url 发现公钥。
var issuer = "https://my-auth-provider-here/";
IConfigurationManager<OpenIdConnectConfiguration> configurationManager =
new ConfigurationManager<OpenIdConnectConfiguration>($"issuer.well-known/openid-configuration", new OpenIdConnectConfigurationRetriever());
OpenIdConnectConfiguration openIdConfig = configurationManager.GetConfigurationAsync(CancellationToken.None).Result;
appBuilder.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions()
AuthenticationMode = AuthenticationMode.Active,
TokenValidationParameters = new TokenValidationParameters()
AuthenticationType = "Bearer",
ValidIssuer = issuer,
ValidateAudience = false,
IssuerSigningKeys = openIdConfig.SigningKeys
);
【讨论】:
以上是关于Web API 验证来自自定义身份验证提供程序的 JWT 不记名令牌的主要内容,如果未能解决你的问题,请参考以下文章
移动客户端的asp.net Web Api自定义身份验证要求
Spring Security 和 Keycloak 因自定义身份验证提供程序而失败
使用 Java Config 的 Spring Security 自定义身份验证过滤器