C# UseJWTBeareAuthentication未使用令牌进行授权.NET

C# UseJWTBeareAuthentication未使用令牌进行授权.NET,c#,asp.net-web-api,jwt,authorization,owin,C#,Asp.net Web Api,Jwt,Authorization,Owin,我有一个.NET 4.52 WebAPI v5.2.6和OWIN(OAuth&JWT)4.0.1,我需要基于有效的JWT进行授权。JWT是从外部身份验证服务器生成的。为了实现这个目标,我正在使用我的Startup.cs中的当前配置。我肯定使用了正确的听力测试 string issuer = ConfigurationManager.AppSettings["Issuer"]; string audienceId = ConfigurationManager.App

我有一个.NET 4.52 WebAPI v5.2.6和OWIN(OAuth&JWT)4.0.1,我需要基于有效的JWT进行授权。JWT是从外部身份验证服务器生成的。为了实现这个目标,我正在使用我的
Startup.cs
中的当前配置。我肯定使用了正确的听力测试

        string issuer = ConfigurationManager.AppSettings["Issuer"];
        string audienceId = ConfigurationManager.AppSettings["AudienceId"];
        string audienceSecret = TextEncodings.Base64.Encode(
            Encoding.UTF8.GetBytes(
                ConfigurationManager.AppSettings["AudienceSecret"]
        ));


        uwApp.UseJwtBearerAuthentication(
           new JwtBearerAuthenticationOptions()
           {
               TokenValidationParameters = new TokenValidationParameters()
               {
                   RequireSignedTokens = false,
                   RequireExpirationTime = false,
                   ValidateAudience = false,
                   ValidateLifetime = false,
                   ValidateIssuer = false
               },
               IssuerSecurityKeyProviders = new IIssuerSecurityKeyProvider[]
               {
                    new SymmetricKeyIssuerSecurityKeyProvider(issuer, audienceSecret)
               }
           }
       );
我将其添加到我的WebApiConfig:
config.Filters.Add(新的HostAuthenticationFilter(OAuthDefaults.AuthenticationType))但是我无法添加
config.SuppressDefaultHostAuthentication()由于该方法在我的版本中不存在,因此我尝试添加和不添加
config.SuppressHostPrincipal()没有成功

这是我的信念,我有同样的最终问题

声明不会传递给Thread.CurrentPrincipal [Authorize]属性正在从中读取

就像这条线一样

此外,当使用cookie身份验证来维护会话时,这也可以正常工作,但它只是没有从中间件中拦截或验证,我不知道如何准确地调试它。我甚至在本地切换到https,看看这是否允许API读取承载,但这也不起作用:*(

总而言之,我有一个外部生成的JWT和一个验证其完整性的密钥。我需要的是以承载格式从请求发送的令牌,通过API传递它,以便中间件允许我结合WebAPI授权属性使用已验证的角色和其他声明

我已经验证了签名证书是相同的,方法是将令牌通过主体而不是以头承载{token}格式传递,然后使用
ValidateToken(token)
进行检查,它是有效的,但是我不能使用相同的验证设置将其与API的授权属性一起使用

以下是事务中完整的请求/响应日志

POST /api/Auth/LoggedIn HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIyMTIsImVtYWlsIjoiYWRtaW5AaW5maW5pdHktc29mdHdhcmUuY29tIiwidXNlcm5hbWUiOiJLZW4gQ29sc29uIiwiaXNFbXBsb3llZSI6dHJ1ZSwiYWdlbmN5SWQiOjQyMDI4MSwiYWdlbmN5TmFtZSI6IkFDSUMtYWdlbmN5LTI2MyIsInJvbGUiOjMsImV4cCI6IjEyLzEyLzIwMjUifQ.FdW2XRzPFQUSfPieICmjuQ6lyqZSXx1iolCM9OxFppg
User-Agent: PostmanRuntime/7.20.1
Accept: */*
Cache-Control: no-cache
Postman-Token: ea68c533-4d76-4c79-b7d5-cc7dfae28bcb
Host: localhost:44300
Accept-Encoding: gzip, deflate
Content-Length: 0
Connection: keep-alive
HTTP/1.1 401 Unauthorized
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
WWW-Authenticate: Bearer
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcbmljaG9sYXNhXF9fc291cmNlX2NvZGVcdXdtYW51YWxcQUNJQy5VVy5hcGlcYXBpXEF1dGhcTG9nZ2VkSW4=?=
X-Powered-By: ASP.NET
Date: Sat, 30 Nov 2019 20:34:58 GMT
Content-Length: 68
{
"message": "Authorization has been denied for this request."
}
WebAPI配置中的

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        config.EnableCors();
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",

        routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        ); 
 }
}

非常感谢您在这方面提供的任何帮助!

如果您删除:uwApp.useAuthAuthorizationServer,是否有效(新…?@basilkosvan即使在向授权端点发出经过身份验证的请求时传递了有效令牌,我也会得到一个401。感谢您的帮助。请附加您的WebApiConfig文件。没问题@basilkosvan完成此操作