gpt4 book ai didi

blazor-client-side - 如何向 Blazor WebAssembly 3.2.0 Preview 3 应用程序添加其他声明

转载 作者:行者123 更新时间:2023-12-03 14:47:47 26 4
gpt4 key购买 nike

我创建了一个 Asp.Net Core 托管的 Blazor webassembly 3.2.0 Preview 3 应用程序,其中包含应用程序内帐户的身份验证选项。然后我向 ApplicationUser 类添加了一些额外的属性,并将这些更改迁移到数据库。然后我实现了一个自定义声明工厂,如下所示:

public class MyCustomUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<ApplicationUser>
{
public MyCustomUserClaimsPrincipalFactory(
UserManager<ApplicationUser> userManager,
IOptions<IdentityOptions> optionsAccessor)
: base(userManager, optionsAccessor)
{
}

protected override async Task<ClaimsIdentity> GenerateClaimsAsync(ApplicationUser user)
{
var identity = await base.GenerateClaimsAsync(user);
identity.AddClaim(new Claim(ClaimTypes.GivenName, user.FirstName ?? string.Empty));
.....

return identity;
}
}

并在服务器应用程序中注册声明工厂,如下所示:
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddClaimsPrincipalFactory<MyCustomUserClaimsPrincipalFactory>();

但是,当我在客户端 Web 应用程序组件中列出声明时,我没有看到我在自定义声明工厂中添加的任何其他声明。我用来列出 claim 的代码是:
<AuthorizeView>
<Authorized>
<ul>
@foreach (var claim in context.User.Claims)
{
<li><span>@claim.Type</span><span>@claim.Value</span></li>
}
</ul>
</Authorized>
</AuthorizeView>

我确认正在调用声明工厂代码。如何在客户端 Web 应用程序中获取其他声明?

编辑:我什至尝试过使用 ClaimsTransformer(如建议的 here ),但我仍然没有看到其他声明

最佳答案

我按照 dfkeenan 在此线程上的说明进行操作:
https://github.com/dotnet/aspnetcore/issues/20887
我添加了一个 ProfileService,我在上面添加了我需要的声明(公司名称、公司 ID)

public class ProfileService : IProfileService
{
public ProfileService()
{
}

public Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var nameClaim = context.Subject.FindAll(JwtClaimTypes.Name);
context.IssuedClaims.AddRange(nameClaim);

var roleClaims = context.Subject.FindAll(JwtClaimTypes.Role);
context.IssuedClaims.AddRange(roleClaims);
context.IssuedClaims.AddRange(context.Subject.FindAll("CompanyName"));
context.IssuedClaims.AddRange(context.Subject.FindAll("CompanyId"));

return Task.CompletedTask;
}

public Task IsActiveAsync(IsActiveContext context)
{
return Task.CompletedTask;
}
}
然后注册 services.AddTransient<IProfileService, ProfileService>(); 在配置服务上

关于blazor-client-side - 如何向 Blazor WebAssembly 3.2.0 Preview 3 应用程序添加其他声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61178681/

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