ASP.NET Core 2.2 JWT与用户授权(细化到Action)

码农日志 2021-01-24 ⋅ 32 阅读

介绍

在ASP.NET Core 2.2中,JWT(JSON Web Token)是一种常用的身份验证和授权机制,可以用于在不同服务之间传递安全信息。本篇博客将介绍如何在ASP.NET Core 2.2中使用JWT完成用户授权,并细化授权到每个Action。

JWT简介

JWT是一种开放标准(RFC 7519),定义了一种紧凑且自包含的方式,用于在各方之间安全传输信息。JWT由三个部分组成:头部(Header)、载荷(Payload)和签名(Signature)。

  • 头部包含了JWT的类型和使用的算法;
  • 载荷包含了要传输的信息,如用户ID、用户名等;
  • 签名用于验证JWT的真实性。

使用JWT完成用户授权

在ASP.NET Core 2.2中,可以通过JWT来完成用户授权。首先,你需要在Startup.cs文件中进行配置。

public void ConfigureServices(IServiceCollection services)
{
   // 添加身份认证
   services.AddAuthentication(opts =>
   {
      opts.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
      opts.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
   }).AddJwtBearer(options =>
   {
      options.TokenValidationParameters = new TokenValidationParameters
      {
         ValidateIssuer = true, // 验证发布者
         ValidateAudience = true, // 验证订阅者
         ValidateLifetime = true, // 验证有效时间
         ValidateIssuerSigningKey = true, // 验证签名密钥

         ValidIssuer = Configuration["Jwt:Issuer"],
         ValidAudience = Configuration["Jwt:Audience"],
         IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
      };
   });

   // 添加授权策略
   services.AddAuthorization();

   services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

其中JwtBearerDefaults.AuthenticationSchemeTokenValidationParameters是用于JWT身份认证的默认配置。你需要根据实际情况来设置有效的配置项,比如发布者、订阅者、签名密钥等。

接下来,在需要进行授权的Action上添加[Authorize]标记即可完成授权。

[Authorize]
public IActionResult PrivateAction()
{
   // 只有经过授权的用户才能访问这个Action
   return View();
}

这样,只有携带有效JWT的请求才能成功访问被[Authorize]标记的Action。

细化授权到每个Action

有时候,我们可能希望细化授权到每个Action,即只有某些特定角色或权限的用户才能访问。

首先,在Startup.cs中的ConfigureServices方法中配置授权策略:

services.AddAuthorization(options =>
{
   options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
   options.AddPolicy("EditorOnly", policy => policy.RequireClaim("UserRole", "Editor"));
});

在上面的代码中,我们添加了两种策略:只有拥有角色为"Admin"的用户才能访问AdminOnly策略,拥有"UserRole"为"Editor"的用户才能访问EditorOnly策略。

然后,在需要进行细化授权的Action上,添加[Authorize][Authorize(Policy = "策略名称")]标记即可:

[Authorize(Policy = "AdminOnly")]
public IActionResult AdminAction()
{
   // 只有拥有"Admin"角色的用户才能访问这个Action
   return View();
}

[Authorize(Policy = "EditorOnly")]
public IActionResult EditorAction()
{
   // 只有拥有"UserRole"为"Editor"的用户才能访问这个Action
   return View();
}

通过上述步骤,你可以在ASP.NET Core 2.2中使用JWT完成用户授权,并细化到每个Action的角色或权限要求。

结语

ASP.NET Core 2.2提供了强大的JWT身份验证和授权机制,使用起来非常方便。通过细化授权到每个Action,你可以更加灵活地控制用户的访问权限。希望这篇博客能对你理解ASP.NET Core 2.2中JWT与用户授权有所帮助。

参考文档:JWT


全部评论: 0

    我有话说: