【问题标题】:My IUserClaimsPrincipalFactory implementation is causing StackOverflowException on IdentityServer4我的 IUserClaimsPrincipalFactory 实现导致 IdentityServer4 上的 StackOverflowException
【发布时间】:2017-01-07 17:24:43
【问题描述】:

我在 Asp.NET Core 上使用 IdentityServer4 和 Asp.NET Core Identity 构建了一个身份服务器。我想将我的 ApplicationUser 的属性映射到客户端访问 UserInfoEndpoint 时发送的声明。

我尝试按如下方式实现 IUserClaimsPrincipalFactory:

public class CustomUserClaimsPrincipalFactory : IUserClaimsPrincipalFactory<ApplicationUser>
{

    public async Task<ClaimsPrincipal> CreateAsync(ApplicationUser user)
    {
        var principal = await CreateAsync(user);
        ((ClaimsIdentity)principal.Identity).AddClaims(new[] {
        new Claim(ClaimTypes.GivenName, user.FirstName),
        new Claim(ClaimTypes.Surname, user.LastName),
    
         });
        return principal;
    }
}

并像这样注册它:

services.AddIdentity<ApplicationUser, IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders()
                .AddClaimsPrincipalFactory<CustomUserClaimsPrincipalFactory>();

但是当客户端尝试访问 UserInfoEndpoint 时,我收到了 StackOverflowException。

你能帮我解决这个问题吗?

注意:我测试了它,当我不注册 ClaimsPrincipal 工厂时,我没有收到任何错误。

【问题讨论】:

  • var principal = await CreateAsync(user); 您正在递归调用该方法,直到堆栈已满。您可能想在这里调用一些不同的东西,一些用户管理器或存储库?

标签: c# asp.net-core asp.net-identity identityserver4


【解决方案1】:

这行不是递归的,函数在无限循环中递归调用自己

var principal = await CreateAsync(user);

CreateUser 是你所在的函数,你再次递归调用它会创建一个无限循环,因此堆栈溢出

【讨论】:

  • 该死的。我会格式化我的电脑,放弃编码,成为一名时尚博主。
【解决方案2】:

首先,换行

public class CustomUserClaimsPrincipalFactory : IUserClaimsPrincipalFactory<ApplicationUser>

public class CustomUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<ApplicationUser,IdentityRole>

那么,换行

var principal = await CreateAsync(user);

 var principal = await base.CreateAsync(user);

                 

【讨论】:

  • 简单实现接口时没有base。此方法必须由开发人员完全定义。
  • 你是对的@MikeGuthrie。行 public class CustomUserClaimsPrincipalFactory : IUserClaimsPrincipalFactory 需要是 public class CustomUserClaimsPrincipalFactory : UserClaimsPrincipalFactory
猜你喜欢
  • 2016-12-16
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 2023-02-08
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多