C# UseJWTBeareAuthentication未使用令牌进行授权.NET
我有一个.NET 4.52 WebAPI v5.2.6和OWIN(OAuth&JWT)4.0.1,我需要基于有效的JWT进行授权。JWT是从外部身份验证服务器生成的。为了实现这个目标,我正在使用我的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
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完成此操作