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