.net-core-3.1 - 从数据库使用 Azure 身份验证并从下拉 .net core 3.1 更新时添加声明
问题描述
.net Core 3.1 我希望能够根据页面上的下拉选择从数据库选择中向登录用户添加声明。在 startup.cs 中调用时,以下扩展方法可以正常工作
options.Events.OnTokenValidated = async context => {
context.Principal.SetSelectedProvider("Provider1");
};
扩展方法:
public static class GraphClaimsPrincipalExtensions
{
public static string GetSelectedProvider(this ClaimsPrincipal claimsPrincipal)
{
return claimsPrincipal.FindFirstValue(GraphClaimTypes.MITOBSelectedProvider);
}
public static void SetSelectedProvider(this ClaimsPrincipal claimsPrincipal, String providerName)
{
var identity = claimsPrincipal.Identity as ClaimsIdentity;
var existingClaim = identity.FindFirst(GraphClaimTypes.MITOBSelectedProvider);
if (existingClaim != null)
identity.RemoveClaim(existingClaim);
identity.AddClaim(
new Claim(GraphClaimTypes.MITOBSelectedProvider, providerName));
//var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
//authenticationManager.AuthenticationResponseGrant = new AuthenticationResponseGrant(new ClaimsPrincipal(identity), new AuthenticationProperties() { IsPersistent = true });
}
}
我不能使用相同的扩展方法作为页面回发的一部分来更改选定的提供程序。如何在页面回发后对声明进行此更改以保持不变,以便我可以访问所有页面上的新值。它将能够在整个活动会话期间使用,因此我想将它添加到索赔集合中。我在另一篇文章中找到了上面注释掉的行,但我没有 owincontext 并且似乎与具有 azure 身份验证的 .net core 3.1 无关。
解决方案
推荐阅读
- groovy - 是否有某种方法可以对不存在的对象使用安全的 null 运算符?
- firebase - Firebase Cloud Functions 在用户创建时将数据推送到数组
- c# - 多文件模板不能在 WebAPI 项目中使用,但在 classlib C# VisualStudio 2017 中
- javascript - JavaScript 将具有特定结构的对象转换为数组
- c - 使用 pthread 时仍可访问字节
- angular - 在 Angular 5 中,如何避免某些组件/页面拥有 NavMenuComponent?
- r - 将 ann 项添加到 ggplot2 图例
- php - php 7.1 PDO + SQL Server 2014:bindParam 问题
- javascript - 余额金额的 JavaScript 验证
- python - 报告实验室表