2016-02-26 171 views
0

我想授權用戶與從請求標頭髮送的不記名令牌。 我在資源服務器的啓動文件中添加了這段代碼。Asp.net核心授權用戶政策

services.AddAuthorization(auth => 
{ 
    auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()       
    .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) 
    .RequireAuthenticatedUser().Build()); 
}); 

這是我在控制器中的方法。

[Authorize("Bearer")] 
[HttpGet] 
[Route("list")] 
public IEnumerable<Products> List() 
{ 
    string Authorization = Request.Headers["Authorization"]; 
} 

應用顯示我401錯誤,即使我有令牌

我在頭請求發送該令牌

授權擅自:承載「XYZ」

+0

你有沒有嘗試過不使用政策?如果它的工作原理沒有,你可能會錯過JWT&Policy配置 –

+0

不,它不起作用。 我忘了提及我有兩個項目1是資源服務器,第二個是auth服務器,授權屬性在Auth服務器中工作,但在資源服務器中不工作,上面的代碼在資源服務器中。 – James

回答

0

要與承載令牌工作您必須在您的配置方法中添加以下代碼

public void Configure(IApplicationBuilder app) { 
    app.UseJwtBearerAuthentication(options => { 
     options.AutomaticAuthenticate = true; 
     options.AutomaticChallenge = true; 
     options.Audience = "OAuth:Audience"; 
     options.Authority = "OAuth:Authority"; 
     options.ConfigurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(
      metadataAddress: options.Authority + ".well-known/openid-configuration", 
      configRetriever: new OpenIdConnectConfigurationRetriever(), 
      docRetriever: new HttpDocumentRetriever() { RequireHttps = false }); 
    }); 
} 

您還需要一箇中間件來處理授權過程。 看看AspNet.Security.OpenIdConnect.ServerOpenIddict

+0

我經歷了所說的文章。 使用兩個項目時需要中間件嗎? 其中一個是資源項目,其他是Auth項目 – James

+0

您必須僅在您的Auth項目中使用中間件 –