我无法从MembershipReboot和Thinktecture IdentityServer中提取UserAccount属性。我在这里使用Sample repo运行并运行:https://github.com/identityserver/IdentityServer3.MembershipReboot
当我在隐式授权流程中请求“openid profile”范围时,我从id_token和userinfo端点的响应中遗漏了许多用户帐户字段,例如“given_name,middle_name”等。我理解这是因为它们需要在GetClaimsFromAccount函数中分配。
我可以看到requestedClaims进入MembershipRebootUserService类的GetProfileDataAsync()函数,如果我将鼠标悬停在GetClaimsFromAccount中的TAccount实例上,我可以看到CustomUser动态代理中出现的Firstname,Lastname等属性,但我可以'为了我的生活,弄清楚如何访问它们并将它们复制到索赔集合中?
更多信息:
我怀疑问题出在这一行:
claims.AddRange(userAccountService.MapClaims(account));
看起来这应该是将用户帐户属性转换为声明,但我没有得到任何回复。
答案 0 :(得分:2)
我理解它的工作方式是向Scope对象添加一个选项以返回用户的所有声明。 IncludeAllClaimsForUser 是关键属性。
e.g。
new Scope
{
Enabled = true,
Name = "roles",
Type = ScopeType.Identity,
IncludeAllClaimsForUser = true,
Claims = new List<ScopeClaim>
{
new ScopeClaim("role")
}
}
我的请求也包含role
属性。这为我从MR中撤回了对用户的所有索赔。我的例子是Implicit
flow btw。