2017-06-16 136 views
4

我有生成簽名JWT令牌的IdentityServer4。 在我的Web API,我添加身份驗證的中間件來驗證這些標記:IdentityServer4令牌簽名驗證

  app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions 
     { 
      Authority = env.IsProduction() ? "https://www.example.com/api/" : "http://localhost/api/", 
      AllowedScopes = { "WebAPI", "firm", 
       IdentityServerConstants.StandardScopes.OpenId, 
       IdentityServerConstants.StandardScopes.Profile }, 
      RequireHttpsMetadata = env.IsProduction(), 
     }); 

它完美。但是,我懷疑它沒有驗證jwt令牌的簽名,因爲沒有配置公鑰來驗證令牌。如何配置令牌簽名驗證?

PS:我嘗試使用UseJwtBearerAuthentication,而不是這樣:

 var cert = new X509Certificate2("X509.pfx", "mypassword"); 
     var TokenValidationParameters = new TokenValidationParameters 
     { 
      ValidateIssuerSigningKey = true, 
      ValidateIssuer = true, 
      ValidIssuer = env.IsProduction() ? "https://www.example.com/api/" : "http://localhost/api/", 
      IssuerSigningKey = new X509SecurityKey(cert), 
     }; 
     app.UseJwtBearerAuthentication(new JwtBearerOptions 
     { 
      Authority = env.IsProduction() ? "https://www.wigwam3d.com/api/" : "http://localhost/api/", 
      Audience = "WebAPI", 
      RequireHttpsMetadata = env.IsProduction(), 
      TokenValidationParameters = TokenValidationParameters 
     }); 

它也可以(我希望驗證令牌簽名也!),但給了我另一個錯誤:

UserManager.GetUserAsync(HttpContext.HttpContext.User) 

返回NULL ,同時使用UseIdentityServerAuthentication返回給我正確的用戶

回答

0

我認爲沒有必要爲你驗證API添加證書。 .UseIdentityServerAuthentication()中間件調用您的IdentiyServer從https://www.example.com/api/.well-known/openid-configuration啓動時檢索公鑰。至少這是我的理解它是如何工作的。

+0

你能證明嗎?我無法找到任何調用內置端點在這個回購https://github.com/IdentityServer/IdentityServer4.AccessTokenValidation – Rem

+0

你是正確的https://stackoverflow.com/questions/38394545/usejwtbearerauthentication-signing-key謝謝! – Rem

2

最後我用JwtBearerAuthentication完成它,

GetUserAsync功能衰竭可以固定呼叫:

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); 

因爲這個問題:https://github.com/aspnet/Security/issues/1043

任何想法配置相同的使用IdentityServer權威性的歡迎!

相關問題