在Blazor server app项目中,我们可以通过使用JwtBearer和OpenId连接授权来授权API。以下是代码示例:
1.对于Blazor server app,我们需要在Startup.cs中配置Authorization。
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens;
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidateIssuer = true, ValidateAudience = false, ValidIssuer = Configuration["JWT:Issuer"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JWT:Key"])) }; }); }
2.为API授权添加一个角色。
添加[Authorize(Roles = "Admin")]特性到API方法或控制器中,以限制访问。
例如:
[Authorize(Roles = "Admin")]
[HttpGet]
public IEnumerable
3.在Windows身份验证的环境中,获取当前用户的角色,然后在JwtBearer中添加它以进行授权。
使用 HttpContext.User.Claims 或 HttpContext.User.FindFirst,获取用户的角色声明。
例如:
var identity = HttpContext.User.Identity as ClaimsIdentity; var roles = identity.Claims .Where(c => c.Type == ClaimTypes.Role) .Select(c => c.Value).ToList();
然后,您可以在 JwtBearer 中的 options.Scope.Add 使用角色。
例如:
options.Scope.Add("Admin");