use*_*512 0 asp.net asp.net-mvc asp.net-web-api
我已经构建了一个用于用户登录的WebAPI,如果用户提供了正确的用户名和密码,WebAPI 可以生成访问令牌。我的问题是如何将用户角色信息也传递给 MVC 应用程序。
例如,
我在下面有一个 MVC 应用程序控制器,如何从 Web API 传递角色“管理员、用户编辑器”?我知道我可以使用另一个 WebAPI 调用来检查用户角色,但这不是一个好主意。
[Authorized("Admin,UserEditor")]
ActionResult EditUser(int? Id)
{
........
}
Run Code Online (Sandbox Code Playgroud)
您可以从声明中读取角色信息。
Step-1 创建角色-s
我创造了它的种子,但你的选择可能会有所不同。
public static class MyDbInitializer
{
public static void Seed(this ModelBuilder builder)
{
Guid adminRoleId = Guid.Parse("90a5d1bb-2cf0-4014-9f1a-2d9f644a2e22");
builder.Entity<IdentityRole<Guid>>().HasData(
new IdentityRole<Guid>
{
Id = adminRoleId,
Name = RoleIdentifier.admin,
NormalizedName = RoleIdentifier.admin.ToUpper(CultureInfo.GetCultureInfo("en-GB"))
});
}
}
Run Code Online (Sandbox Code Playgroud)
第 2 步索赔
public static class RoleIdentifier
{
public const string admin = "admin";
public const string user = "user";
}
public static class JwtClaimIdentifier
{
public const string UserId = "user_id";
public const string UserName = "user_name";
public const string Role = "role";
}
Run Code Online (Sandbox Code Playgroud)
在生成令牌的地方,将角色名称添加到声明信息中。
...
... string role = await _userService.GetRole(userId);
... identity.FindFirst(JwtClaimIdentifier.Role)
Run Code Online (Sandbox Code Playgroud)
Step-3 添加授权属性。到控制器。
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme, Roles = RoleIdentifier.admin)]
public class FooController
{
}
Run Code Online (Sandbox Code Playgroud)
当登录用户想要访问此操作时,此角色的拥有将匹配并访问声明。
归档时间: |
|
查看次数: |
490 次 |
最近记录: |