gpt4 book ai didi

c# - ASP.NET Core 使用 Azure Active Directory 进行身份验证并跨请求保留自定义声明

转载 作者:太空狗 更新时间:2023-10-30 00:37:46 25 4
gpt4 key购买 nike

我有一个在 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 颁发的 token 或在颁发 token 之前设置声明。我不确定该怎么做。

我怀疑这需要在 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 ),但是还没有设法解决如何跨请求保留 Claim。

我已经成功地使用 ASP.NET Identity 作为身份验证提供程序来保留自定义声明,但这似乎是因为自定义声明已保存到数据库中。

最佳答案

OnTokenValidated 为您提供修改从传入 token 中获取的ClaimsIdentity 的机会,以下代码供您引用:

private Task TokenValidated(TokenValidatedContext context)
{
Claim claim = new Claim("CompanyId", "123456", ClaimValueTypes.String);
(context.Ticket.Principal.Identity as ClaimsIdentity).AddClaim(claim);

return Task.FromResult(0);
}

设置OpenIdConnectEvents:

Events = new OpenIdConnectEvents
{
OnRemoteFailure = OnAuthenticationFailed,
OnAuthorizationCodeReceived = OnAuthorizationCodeReceived,

OnTokenValidated = TokenValidated
}

然后在 Controller 中使用:

var companyId=  User.Claims.FirstOrDefault(c => c.Type == "CompanyId")?.Value;

关于c# - ASP.NET Core 使用 Azure Active Directory 进行身份验证并跨请求保留自定义声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44895327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com