我有一个使用 Thinktecure.IdentityServer.v3 设置的示例身份验证服务器,其中还插入了 Thinktecture.IdentityManager。我还使用 asp.net Identity 和 Entity Framework,因此我也连接了 Thinktecture 的相关插件。下面的相关 NuGet 包
<package id="Thinktecture.IdentityManager" version="1.0.0-beta3" targetFramework="net451" />
<package id="Thinktecture.IdentityManager.AspNetIdentity" version="1.0.0-beta3" targetFramework="net451" />
<package id="Thinktecture.IdentityModel.Core" version="1.3.0" targetFramework="net451" />
<package id="Thinktecture.IdentityServer.v3" version="1.0.0-rc" targetFramework="net451" />
<package id="Thinktecture.IdentityServer.v3.AspNetIdentity" version="1.0.0-rc" targetFramework="net451" />
<package id="Thinktecture.IdentityServer.v3.EntityFramework" version="1.0.0-rc" targetFramework="net451" />
我已根据 IdentityServer 示例存储库中包含的示例项目注册了 IdentityManager 和 IdentityServer。
我已使用 IdentityManager 成功创建了一个用户,并创建了一个名为“Admin”的角色声明。我已将用户添加到此角色/声明中。
使用客户端示例中的“JavaScript 隐式客户端”,我使用正确的凭据通过我的身份验证服务器登录。我受到了应有的挑战,然后使用身份 token 成功返回到客户端应用程序。
JavaScript 隐式客户端允许您查看身份 token 的内容。 token 中不存在“角色”声明列表...我理解这些声明是特定于 asp.net 身份的。
我的问题实际上是...如何将这些角色声明包含在身份 token 中?
我是否需要创建一个名为“roles”的自定义作用域,应用 ClaimsRule 来返回“role”类型的声明,然后尝试在自定义 ClaimsProvider 中实现该 ClaimsRule?如果是这样,我还没有看到我们如何在任何文档中正确实现 ClaimsRule。
事实上,asp.net Identity 似乎旨在在 RTM 之后提供开箱即用的支持...也许有更简单的方法?
如果需要任何其他信息或配置示例,我可以提供:)
最佳答案
事实证明......有一种更简单的方法(并且目前是开箱即用的)
StandardScopes.Roles
作为预定义范围提供。
将其添加到您的 Scopes
集合以及 Client
的 ScopeRestrictions
中。
现在,客户端在请求 id token 时需要将“角色”添加到范围参数中。
这可能是非常不言自明的,但我错过了它,因为它不在示例存储库(我看到的)或任何文档中。希望这可以帮助其他新手尝试这款出色的产品
关于asp.net-identity - Thinktecture.IdentityServer.v3 中的 asp.net 身份角色声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28018189/