MembershipReboot 使用 IdentityServer v3

MembershipReboot with IdentityServer v3

我在结合 Thinktecture IdentityServer 从 MembershipReboot 中提取 UserAccount 属性时遇到问题。我有 up 和 运行 使用示例存储库:https://github.com/identityserver/IdentityServer3.MembershipReboot

当我在隐式授权流程中请求 "openid profile" 范围时,我遗漏了很多用户帐户字段,例如 "given_name, middle_name" 等来自 id_token 和来自用户信息端点。我理解这是因为它们需要在 GetClaimsFromAccount 函数中分配。

我可以看到请求的声明进入 MembershipRebootUserService 中的 GetProfileDataAsync() 函数 class 如果我将鼠标悬停在 GetClaimsFromAccount 中的 TAccount 实例上,我可以看到 CustomUser 中出现的名字、姓氏等属性动态代理,但我终生无法弄清楚如何访问它们并将它们复制到声明集合中?

更多信息:

我怀疑问题出在这一行:

 claims.AddRange(userAccountService.MapClaims(account));

看起来这应该是将用户帐户属性转换为声明,但我没有得到任何回复。

我理解它的工作方式是您将一个选项添加到您的 Scope 对象以 return 用户的所有声明。 IncludeAllClaimsForUser 是关键 属性。

例如

new Scope
{
  Enabled = true,
  Name = "roles",
  Type = ScopeType.Identity,
  IncludeAllClaimsForUser = true,
  Claims = new List<ScopeClaim>
  {
    new ScopeClaim("role")
  }
}

我的请求也包括 role 属性。这为我撤回了 MR 对用户的所有声明。我的例子是 Implicit 顺便说一句。