.net - .NET Core 在 AzuerAD 身份验证后添加声明
问题描述
我的应用程序通过 AzureAD 登录,但现在我需要从数据库中获取信息,然后将角色存储为声明。
所以我的问题是:身份验证后如何将角色存储为声明?
这是我尝试过的:
var user = User as ClaimsPrincipal;
var identity = user.Identity as ClaimsIdentity;
identity.AddClaim(new Claim(ClaimTypes.Role, "Admin"));
但是当我去另一个控制器时,索赔不存在了?
谢谢
解决方案
您可以在身份验证期间实现这一点,在 OIDC 中间件中,OnTokenValidated
您可以修改从传入令牌获得的 ClaimsIdentity,以下代码供您参考:
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.Events = new OpenIdConnectEvents
{
OnTokenValidated = ctx =>
{
//query the database to get the role
// add claims
var claims = new List<Claim>
{
new Claim(ClaimTypes.Role, "Admin")
};
var appIdentity = new ClaimsIdentity(claims);
ctx.Principal.AddIdentity(appIdentity);
return Task.CompletedTask;
},
};
});
然后在控制器中,您可以获得如下声明:
var role = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Role)?.Value;
推荐阅读
- php - 如何在对象中一次循环遍历 2 个或多个数组
- android - android中Google Docs预览中的RTL问题
- java - JTextPane 中的字体颜色同质性问题
- tensorflow - TensorFlow.js 无法在 Windows 10 中安装
- javascript - 为什么我无法从共享邮箱发送消息,即使删除了插件
- visual-studio-2015 - Visual Studio 2015 设计器不想显示表单 - 错误
- classification - 如何将数值类转换为 WEKA 中的因子?
- kubernetes - pod 网络错误
- java - 使用标志 CLEAR_TOP 时后台堆栈中的活动
- mongodb - 使用 Mongosheet 的 CRUD 操作