我在Visual Studio 2017中创建了一个默认的ASP.NET Core网站 . 我选择使用Azure Active Directory进行身份验证 . 我运行该站点,可以使用Active Directory中的帐户成功登录 .
我可以检索Active Directory提供的声明信息,例如通过调用以下行我得到'名字' .
User.Claims.FirstOrDefault(c => c.Type == "name")?.Value;
我想为登录用户添加自定义声明 - CompanyId = 123456 . 我可以添加自定义声明,但只能在设置声明的页面上提供 .
Claim claim = new Claim("CompanyId", "123456", ClaimValueTypes.String);
((ClaimsIdentity)User.Identity).AddClaim(claim);
我的理解是,我需要更新Active Directory发布的令牌或在发出令牌之前设置声明 . 我不确定该怎么做 .
我怀疑这需要在SignIn()的AccountController中完成
// GET: /Account/SignIn
[HttpGet]
public IActionResult SignIn()
{
return Challenge(
new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectDefaults.AuthenticationScheme);
}
我已经阅读了很多关于这种情况的文章和示例(包括https://github.com/ahelland/AADGuide-CodeSamples/tree/master/ClaimsWebApp)但是还没有设法解决如何跨请求持久化声明 .
我已成功设法使用ASP.NET标识作为身份验证提供程序保留自定义声明,但这似乎是因为自定义声明已保存到数据库中 .
2 回答
OnTokenValidated
为您提供修改从传入令牌获取的ClaimsIdentity
的机会,以下代码供您参考:设置
OpenIdConnectEvents
:然后在控制器中使用:
对于那些想要更多细节的人,提供的代码放在Startup.cs中
在Configure方法中添加/编辑:
私有Task TokenValidated方法位于Startup.cs的主体中
以下示例是一个很好的参考 . https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect-aspnetcore-v2/blob/master/WebApp-OpenIDConnect-DotNet/Startup.cs