【问题标题】:Token Authentication Using Policy Base in Asp.net core / 5在 Asp.net core / 5 中使用 Policy Base 进行令牌认证
【发布时间】:2016-06-10 13:57:31
【问题描述】:

我将令牌从客户端发送到服务器

“授权:承载 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,如果为 false,我也会收到 500 错误,然后是 401 错误

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

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-core jwt


    【解决方案1】:

    对于这种行为,您不需要任何特殊的策略或配置,因为它是默认行为,只允许授权用户访问。没有令牌或过期令牌的用户未经授权,将无法访问具有[Authorize] 属性的控制器/操作。

    你只需要

    services.AddAuthentication();
    

    AuthorizeAttributes 在您的操作/控制器上。

    策略仅用于验证授权用户的条件,例如,如果用户年满 18 岁(例如,请参阅 this answer),他的生日是 1用户的索赔。

    如果用户获得授权,则该政策将永远得到验证。这意味着Authorize 将始终失败并拒绝访问。

    【讨论】:

    • 好吧,我不想允许不拥有令牌的用户。如果我删除了 Authorize 属性,我将允许用户访问。但我不想要不提交令牌的用户
    • 没有令牌(或过期令牌)的用户根据定义是未经授权的。这是Authorize 的标准行为,你为什么需要一个自定义策略呢?也许澄清你的问题
    • @AveshNaik:查看我更新的问题。你问的是标准行为,但你的用法似乎是错误的。尝试使用不带任何策略的 AddAuthentication 调用。我还添加了一个指向 SO 答案的链接,该链接显示了如何正确使用策略来验证用户的年龄
    • 我尝试了默认行为,但即使我有访问令牌,它仍然给我 401 错误
    • @AveshNaik:您必须从控制台发布日志输出。我怀疑您的令牌可能无效或过期,发行者或受众无效。如果您添加了文件记录器,则每一项都应在控制台窗口或日志文件中引发异常
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2022-09-11
    • 2018-06-14
    • 2017-01-31
    • 1970-01-01
    相关资源
    最近更新 更多