2017-10-13 147 views
0

我正在對我的Asp .Net WebApi實施訪問令牌驗證,但儘管我試圖禁用任何類型的檢查,但我總是得到401 Unauthorized。 我只是添加下面的代碼和Authorize屬性控制器:WebApi調用始終未授權

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     TokenValidationParameters validationParameters = 
      new TokenValidationParameters 
      { 
       ValidateIssuer = false, 
       ValidateIssuerSigningKey = false, 
       RequireSignedTokens = false, 
       RequireExpirationTime = false, 
       ValidateAudience = false, 
       ValidateLifetime = false, 
       ValidateActor = false 
      }; 

     app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions() 
     { 
      TokenValidationParameters = validationParameters 
     }); 
    } 
} 

此外,這是在Global.asax

{ 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 
} 

我相信,令牌我使用的作品,因爲如果我使用ADFS驗證而不是此手動驗證,則流程正常工作。

UPDATE 啓用調試信息我注意到我收到以下錯誤。

Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationMiddleware錯誤:0:驗證失敗 System.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException:IDX10500:簽名驗證失敗。無法解析SecurityKeyIdentifier:「SecurityKeyIdentifier ( IsReadOnly =假, 計數= 1, 第[0] = X509ThumbprintKeyIdentifierClause(散列= 0x84371F65121DD3A5362C77EF61C5CC4EE5AD3807) )

回答

1

首先我添加診斷上Owin

<system.diagnostics> 
<switches> 
    <add name="Microsoft.Owin" value="Verbose" /> 
</switches> 

然後我在TokenValidationParameters中加入了IssuerSigningToken,因爲中間件試圖驗證令牌。 感謝這個回答https://stackoverflow.com/a/35835672/2297037,我發現這個解決方案。