我看的是一个web api,它在没有身份框架的情况下执行身份验证/授权。
program.cs文件的身份验证配置如下:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options => ....登录控制器操作设置一个带有用户登录名的JWT令牌,并将其返回给调用者。其他每个控制器操作都具有用于控制访问的“授权”或“AllowAnonymous”属性。
我的任务是添加基于角色的授权到这个网络api。例如,这样我就可以对管理控制器操作使用授权(Roles= "Administrator")。在数据库用户表中,我创建了角色列,作为用户角色的占位符;从而执行基于角色的授权。
我正在查看这个链接:https://learn.microsoft.com/en-us/aspnet/core/security/authorization/roles?view=aspnetcore-6.0 --但这是关于在使用标识时基于角色的授权。但我没有使用身份框架。
我正在考虑的一个解决方案是--在登录期间,将角色写入JWT令牌,然后为每个角色编写一个属性(将应用于相应的控制器操作),以便比较JWT令牌中的角色。
基于角色的授权是否依赖于.net标识?或者我可以简单地将角色或声明的值设置到JWT令牌中(登录期间),并通过通常的[Authorize(Roles = "Administrator")]自动执行基于角色的授权,这是支持的吗?任何简单的例子或参考都会有帮助。
发布于 2022-07-07 17:38:21
生成令牌时,添加“角色”声明
var claims = new Claim[]
{
new Claim(ClaimTypes.Name, "Jeffcky"),
new Claim(ClaimTypes.Role,"Administrator")
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("........"));
var token = new JwtSecurityToken(
issuer: "......",
audience: "......",
claims: claims,
notBefore: DateTime.Now,
expires: DateTime.Now.AddMinutes(5),
signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)
);
var token=new JwtSecurityTokenHandler().WriteToken(token);发布于 2022-07-07 15:16:23
如果我理解错了您的问题,请纠正我,但是您想通过API实现自定义提供程序来进行身份验证吗?
在这里,我实现了一个自定义提供程序,它使用存储在Ontraport web服务中的数据验证用户/pass。
https://github.com/mysteryx93/OntraportApi.NET/tree/master/OntraportApi.IdentityCore
https://stackoverflow.com/questions/72900206
复制相似问题