2016-02-27 70 views
1

我從客戶端發送令牌到服務器令牌認證在Asp.net核心使用策略庫/ 5

「授權:承載eyJhbGciOiJodHR ......」

我想對用戶進行授權誰有代幣 這裏是我的代碼。

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



    services.AddMvc(config => 
    { 
    var policy = new AuthorizationPolicyBuilder() 
     .RequireAuthenticatedUser() 
     .Build(); 
     config.Filters.Add(new AuthorizeFilter(policy)); 
    }); 




app.UseJwtBearerAuthentication(options => 
{ 
    options.AutomaticAuthenticate = false; 
}); 

即使我把AutomaticAuthenticate我得到500錯誤,如果爲假,則401錯誤

[Authorize(Policy ="Have")] 
    [HttpGet] 
    [Route("list")] 
    public IEnumerable<Products> List() 
    { 
     ....... 
    } 

回答

0

對於這種行爲,你不需要任何特殊的策略或配置,因爲它的默認行爲只允許訪問授權用戶。沒有令牌或過期令牌的用戶未經授權,將無法訪問具有[Authorize]屬性的控制器/操作。

所有你需要的是

services.AddAuthentication(); 
你的行動/控制器

AuthorizeAttribute秒。

政策這裏只是爲了驗證授權用戶的條件,例如,如果用戶是在18歲或以上(見this answer的例子),在那裏他的生日是用戶的要求之一的時代。

如果用戶是而不是授權,政策將從不驗證。這意味着Authorize將始終失敗並拒絕訪問。

+0

那麼我不想讓不擁有令牌的用戶。 如果我刪除了授權屬性,我將允許用戶訪問。但我不希望沒有提交令牌的用戶 –

+0

沒有令牌(或過期的)的用戶根據定義未經授權。這是'Authorize'的標準行爲,爲什麼你需要一個自定義策略呢?也許澄清你的問題 – Tseng

+0

我糾正了我的問題。 –

相關問題