identityserver4 - 在 IdentityServer 中将授权存储与身份验证存储分开

标签 identityserver4

希望实现 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/

相关文章:

c# - 我们可以将访问 token 设置为不过期吗?

asp.net-core - 登录 Identity Server 4 - .Net Core 2.2

asp.net-core - 如何使用 Postman 调用 Identity Server 4 进行登录

asp.net-mvc - 无法找到 IdentityServer4 的 DiscoveryClient

c# - 使用IdentityServer4时如何在客户端检查access_denied?

identityserver4 - 身份服务器权限如何工作?

oauth-2.0 - IdentityServer4中nonce和state参数是如何存储和传输的?

c# - 身份服务器 4 - 配置了允许的来源但不允许来源

asp.net - OWIN 作为 IdentityServer4 的受众

c# - Xamarin:从浏览器重定向到 native 应用程序不起作用