gpt4 book ai didi

identityserver4 - 自定义 ASP.NET 标识

转载 作者:行者123 更新时间:2023-12-03 23:22:48 28 4
gpt4 key购买 nike

我正在使用 Identity Server 4 并且我已经自定义了我的 ASP.NET Identity 用户,如下所示:

public class ApplicationUser : IdentityUser
{
[MaxLength(100)]
public virtual string FirstName { get; set; }

[MaxLength(100)]
public virtual string LastName { get; set; }
}

我看不到在哪里配置 Identity Server 4 以在声明集合中包含这 2 个属性。我已经浏览了一些 Identity Server 4 示例,但看不到任何示例。

理想情况下,我想将这 2 个用户属性映射到 given_namefamily_name claim 。

我目前正在连接通知并查询 userinfo端点(混合流?)。所以我不确定这是 Identity Server 的配置还是 userinfo 的自定义终点?

最佳答案

为了包含您的自定义声明,您需要实现自己的 GetProfileDataAsync()使用 IProfileService 的方法.每次请求用户声明时都会调用此方法。

这是我对 IProfileService 的实现。

public class CustomProfileService : IProfileService
{
private readonly UserManager<User> _userManager;

public CustomProfileService(UserManager<User> userManager)
{
_userManager = userManager;
}

public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var subjectId = context.Subject.GetSubjectId();
var user = await _userManager.FindByIdAsync(subjectId);

if (user == null) return;

var claims = new List<Claim>
{
new Claim("username", user.UserName),
new Claim("email", user.Email),
new Claim("firstname", user.FirstName),
new Claim("lastname", user.LastName)
};

var roles = await _userManager.GetRolesAsync(user);
foreach (var role in roles)
{
claims.Add(new Claim("role", role));
}

var userClaims = await _userManager.GetClaimsAsync(user);
foreach (var userClaim in userClaims)
{
claims.Add(new Claim(userClaim.Type, userClaim.Value));
}

context.IssuedClaims = claims;
}

public async Task IsActiveAsync(IsActiveContext context)
{
var user = await _userManager.FindByIdAsync(context.Subject.GetSubjectId());
context.IsActive = user.IsActive;
}
}

然后,您必须将以下行添加到 Startup.ConfigureServices() services.AddScoped<IProfileService, CustomProfileService>();

关于identityserver4 - 自定义 ASP.NET 标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44392817/

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