希望实现 IdentityServer 来为我们的系统提供 SSO。
所有用户(组织内部和外部)都将存储在 Active Directory 中。然后我们将使用 IdentityServer 针对 AD 进行身份验证。
我们想要做的是为用户创建声明桶。因此,用户的声明可以有不同的值。
EG
开发存储桶可能具有值为“Bob”的声明“My.Claim.Name”,生产存储桶可能具有值为“John”的声明“My.Claim.name”
据我所知,Active Directory 无法以这种方式存储属性,因此我需要将此自定义功能构建到 IdentityServer 将访问的数据库中。
这让我想到了这个问题。
是否可以根据一种存储机制对用户进行身份验证,但从另一存储中检索该用户的声明?本质上将用户及其声明分开。
如果是这样,有人可以指出我可能需要实现哪些接口(interface)才能实现这一点吗?
最佳答案
IdentityServer 实现了 openid 连接规范,这意味着只有身份。授权不应与身份混合,请参阅作者的这篇博文 https://leastprivilege.com/2016/12/16/identity-vs-permissions/
每个应用程序应检查授权(例如,API1 中的用户可以访问这些资源,API2 中的同一用户可以访问其他资源)。这基本上意味着一旦经过身份验证,每个应用程序都需要从单独的来源(即您的授权存储)获取用户授权。
但是,要回答您的问题,您应该实现 IProfileService
接口(interface) http://docs.identityserver.io/en/release/reference/profileservice.html?highlight=iprofileservice 。创建用户身份时会调用此接口(interface),让您根据请求的范围填写声明。在这里,您可以从单独的授权数据库中获取声明。
请注意,这被认为不是最佳实践,IdentityServer 团队表示他们将很快提出适当的授权解决方案。
关于identityserver4 - 在 IdentityServer 中将授权存储与身份验证存储分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47582096/