Web API验证来自自定义身份验证提供程序的JWT承载令牌

时间:2019-05-08 17:51:44

标签: c# .net asp.net-web-api oauth jwt

我一直在寻找示例或教程几个小时,以为我应该在此时发布一些内容。

我正在尝试从.Net 4.7.2 Web Api 2项目中的自定义Auth提供程序验证承载令牌。我有一个SPA应用程序,该应用程序从此身份验证提供程序获取承载令牌,并将该承载令牌发送到我的WebApi端点。我需要转身并验证每个请求中的令牌。我认为将有一种方法可以指向Microsoft.Owin.Security.Jwt命名空间中的类,以基于众所周知的discovery information url的auth提供程序来验证令牌。

有人曾经做过这件事,还是向我介绍了一个好的图书馆/文档/教程?

我知道我可以编写自己的身份验证请求过滤器,然后从身份验证服务器中取出公共证书并解析令牌并验证签名,但这对我来说写我自己vs.适当的库。

1 个答案:

答案 0 :(得分:0)

好吧,我发现了一个很好的例子here

以下代码设置了我们的webapi,以通过我们的自定义身份验证提供程序验证令牌,同时通过OIDC发现网址发现公钥。

   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
        }
    });