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自定义身份验证要求

在 Symfony2 中使用自定义身份验证提供程序

Spring Security 和 Keycloak 因自定义身份验证提供程序而失败

使用 Java Config 的 Spring Security 自定义身份验证过滤器

使用事务包装 Spring Security 自定义身份验证提供程序

自定义Web应用程序中的AWS Cognito社交提供程序