0

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

当我在隐式授予流程中请求“openid 配置文件”范围时,我缺少 id_token 中的许多用户帐户字段,例如“given_name、middle_name”等以及来自 userinfo 端点的响应。我理解这是因为它们需要在 GetClaimsFromAccount 函数中进行分配。

我可以看到 requestedClaims 进入了 MembershipRebootUserService 类中的 GetProfileDataAsync() 函数,如果我将鼠标悬停在 GetClaimsFromAccount 中的 TAccount 实例上,我可以看到出现在 CustomUser 动态代理中的 Firstname、Lastname 等属性,但我不能我的生活如何访问它们并将它们复制到索赔集合中?

更多信息:

我怀疑问题出在这一行:

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

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

4

1 回答 1

2

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

例如

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

我的要求也包括role财产。这为我从 MR 撤回了用户的所有索赔。我的例子是Implicit流量顺便说一句。

于 2015-06-17T11:48:55.307 回答