将授权存储与IdentityServer中的身份验证存储分开

时间:2017-11-30 20:31:51

标签: identityserver4

希望实现IdentityServer为我们的系统提供SSO。

组织内部和外部的所有用户都将存储在Active Directory中。然后,我们将使用IdentityServer对AD进行身份验证。

我们要做的是为用户创建声明桶。因此,用户可以为其声明设置不同的值。

E.G

开发存储桶可能具有值为“Bob”的声明“My.Claim.Name”,而生产存储桶可能具有值为“John”的声明“My.Claim.name”

据我所知,Active目录不能以这种方式使用silo属性,所以我需要将这个自定义功能构建到IdentityServer将访问的数据库中。

所以这让我想到了这个问题。

是否可以针对一种存储机制对用户进行身份验证,但是可以从其他商店检索该用户的声明?基本上将用户和他们的主张分开。

如果是这样,有人可以指出我可能需要实施哪些接口来实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

IdentityServer实现openid连接规范,这意味着只有身份。授权不应与身份混合,请参阅作者https://leastprivilege.com/2016/12/16/identity-vs-permissions/

撰写的博客文章

每个应用程序都应检查授权(例如,API1中的用户可以访问这些资源,API2中的同一用户可以访问其他资源)。这基本上意味着一旦经过身份验证,每个应用程序都需要从单独的源(即您的授权存储)获取用户授权。

但是,要回答您的问题,您应该实施IProfileService界面http://docs.identityserver.io/en/release/reference/profileservice.html?highlight=iprofileservice。创建用户标识时会调用此接口,以便您根据请求的范围填写声明。您可以在此处从单独的授权数据库中获取声明。

请注意,这被认为不是最佳做法,IdentityServer团队表示他们将很快提出适当的授权解决方案。