【发布时间】:2018-05-28 10:57:37
【问题描述】:
背景说明
谈到 Identity Server 4,当我想到客户端应用程序中的用户管理设计时,我遇到了障碍。
此时,我已经使用 ASP 身份用户帐户作为其用户存储设置了身份服务器。
我已经构建了用于将用户添加到 Identity Server 用户存储的 UI。
我已经测试了设置一个 MVC 应用程序的客户端,并且我可以成功地通过 Identity Server 进行身份验证并在我的客户端应用程序中接收 openid 身份令牌。
Identity Server 正在为我的客户端应用程序提供身份验证。
现在,我需要专注于我的应用程序中的授权。这就是我卡住的地方,我需要在应用程序本地创建用户,存储应用程序内的用户权限。
我需要将 Identity Server 中的用户链接/关联到客户端应用程序中的用户。
执行此操作的一种方法是将子存储在身份令牌中作为客户端应用程序数据库(Asp Identity)中的用户声明。这样,当用户进行身份验证时,我可以根据令牌中的 sub 在本地数据库中找到它们。
sub 必须是身份服务器用户存储中用户的唯一 ID。这样,如果用户的邮箱发生变化,我们仍然可以将两个用户帐号关联起来。
客户端应用程序中的用户帐户不需要密码或电子邮件地址,它只是用于在整个应用程序中进行授权的声明和角色,以及任何其他应用程序特定信息。
问题
在客户端应用程序中创建用户时,必须存在 Identity Server 和客户端应用程序之间的通信吗?
- 我们需要关联这两个帐户吗?
- 我们需要确保正在创建的客户端用户帐户也有一个身份服务器用户帐户才能成功进行身份验证?
这些任务应该在什么时候完成?我正在寻找有关两个应用程序之间通信流程的一些指导?
编辑
客户端应用程序中根本没有用户帐户是否可行?
我的意思是用户的所有用户声明都存储在 Identity Server 的用户存储中。
当客户端通过 IDP 进行身份验证时,它仅请求特定于客户端应用程序的用户声明。
用户存储中的用户声明示例:-
- “clientA_role”:“管理员”
- “clientB_role”:“用户”
客户端应用程序 A 进行身份验证时,它仅请求范围 clientA_role
这感觉很糟糕!
有什么建议吗?
【问题讨论】:
-
Derek,你找到做应用授权逻辑的好方法了吗?
标签: asp.net-mvc openid openid-connect identityserver4