【发布时间】:2019-11-29 16:49:15
【问题描述】:
要求
- 我们有3个模块
ui,api,IdentityServer(IS) (client,resource,ISIdentityServer) - 所有模块都应该相互分离(
IS和api的单独数据库) -
api是无状态的(所有需要的身份验证信息都来自令牌) -
api将拥有\projects、\users等资源。 - 未来可能会添加另一个入口点,例如
another-ui,它将与IS和api进行通信,并将拥有自己的声明
问题
主要问题是api\projects\12345、\users\、\projects\123456\users等资源也可能需要作为IS中的声明。例如,api 模块读取授权用户的访问令牌并看到等于["222", "12345"] 的声明projects,因此该用户允许使用资源\projects\12345 或\projects\123456\users。
用户同时是IS 中的身份和api 中的资源。项目同时是IS 中的声明和api 中的资源。
我想记下这些通过 id(guid)在两个模块中表示的实体。但是 id 并不能解决所有问题。
其中一些是:
- 创建一个带有 id 的新项目应该授予该用户将来使用它的权利,因此我们需要以某种方式保存该用户的声明。模块是分开的,所以我们应该调用
ISapi 来为该用户创建该声明,然后继续创建项目。两者(IS和api)之间的通信应该如何组织?是否需要将api注册为IS中的另一个客户端? - 如何更新
IS中的用户,例如更改电子邮件、电话(可能登录的值)将更新api。我想显示身份验证电子邮件(从令牌获取)与信息电子邮件不匹配的警告。
请您解释一下现代系统如何应对每个资源的访问?
感谢您的宝贵时间。
【问题讨论】:
标签: c# asp.net-core architecture identityserver4 openid-connect