2016-06-27 40 views
2

我使用与openiddict asp.net核心,授权我使用jwtmiddlewareJWT远程服务器上的令牌不验证,无法匹配“孩子” Errror

app.UseJwtBearerAuthentication(new JwtBearerOptions 
      { 
       AutomaticAuthenticate = true, 
       AutomaticChallenge = true, 
       RequireHttpsMetadata = false, 
       Authority= "http://localhost" 
      }); 

但由于某种原因它抛出这个错误,任何帮助将不胜感激。

信息: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware [7] 承载物不被认证。失败消息:IDX10501:签名验证失败。无法匹配 '孩子': '7FG4SQ4TIATESTLI-ZDHTLRYPWIEDU_RA1FVG91D',令牌: “{ “ALG”: “RS256”, “典型”: “智威汤逊”, “孩子”: “7FG4SQ4TIATESTLI-ZDHTLRYPWIEDU_RA1FVG9 1D”} {”。 uniquename“:”asd“,”email“:”asd“,”AspNet.Identity.SecurityStamp“:”eb93ee4 4-6dbf-41b8-b1d6-157e4aa23ea7“,”jti“:”4f0f5395-e565-4489-8baf- 6361d5c4cb94“,”usa ge“:”access_token“,”confidential“:true,”scope“:[”offline_access“,”profile“,”emai l“,”roles“],”sub“:”9125d8c5- 5739-4f46-8747-e3423a464969“,”azp“:”firebaseApp“,”nb f“:1466997962,”exp“:1466999762,”iat“:1466997962,”iss“:”http://localhost:5000/“}' 。警告:Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [1] 过滤器'Microsoft.AspNetCore.Mvc.A uthorization.AuthorizeFilter'的请求授权失败。警告: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker [1] 过滤器'Microsoft.AspNetCore.Mvc.A uthorization.AuthorizeFilter'的请求授权失败。

回答

1
  1. 管理局应该包含您的OIDC服务器的基址。你应该用端口(5000你的情况,以相应的“国际空间站”要求的标记信息)指定管理局网址:

    Authority="http://localhost:5000" 
    
  2. 您可以通过设置ValidateIssuerSigningKey = false禁用管理局审定。 JwtBearerOptions包含财产TokenValidationParameters,关于验证该聚合设置:

    app.UseJwtBearerAuthentication(new JwtBearerOptions 
        { 
         ... 
         TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = false} 
        } 
    
+0

感谢您的答案设置ValidateIssuerSigningKey = false并且不能在不同的服务器上拥有权限? – noobProgrammer

+0

已更新回答 – Set

+0

感谢我的情况,我只是想通了我使用aws托管所以我有https://域。在负载平衡器上与http://域进行通信。 com所以issuer是http://但是调用https://所以它说CORS没有被启用,我们可以添加cors到这个还是有任何解决方法?负载均衡是基本面向互联网的网关,它将其重定向到没有SSL的实际服务器 – noobProgrammer

0

如果您使用的是第三方STS(不identityserver或Auth0例如),那么你可以使用BackChannelHandler,使其更容易调试从中间件HTTP结果:

app.UseJwtBearerAuthentication(new JwtBearerOptions() { 
    ... 
    BackchannelHttpHandler = new BackChannelHandler() 
    ... 
} 

然后

using System.Net.Http; 
using System.Threading; 
using System.Threading.Tasks; 

namespace Application.API.Utilities 
{ 
    public class BackChannelHandler : HttpMessageHandler 
    { 
     protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
     { 
      HttpClient client = new HttpClient(new HttpClientHandler(), disposeHandler: false); 
      client.DefaultRequestHeaders.Add("Accept", "application/json"); 
      var res = await client.GetAsync(request.RequestUri); 
      return res; 
     } 
    } 
} 

在我的情况下,jwks和openid-configuration端点的默认返回类型是text/html而不是application/json。在从自定义处理程序发出请求时,通过添加Accept标头,一切正常。

相关问题