2016-02-27 37 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

我纠正了我的问题。 –

相关问题