IdentityServer、客户端和用户配置文件管理
IdentityServer, clients and user profile management
如果您有 多个客户端 和一个处理用户 auth/n 的 central IdentityServer 4 实例,您会如何着手管理来自各个客户的用户配置文件?
当前场景:
- 用户点击管理个人资料
- 用户被重定向到 IdentityServer 上的自定义管理声明页面,其中 a) 加载表单中的所有声明,b) 允许用户 mod 此类声明,c) 用新值更新它们
- 用户被重定向到引用者 URL(然后检索
这些新声明通过包含配置文件的令牌刷新
scope) - 虽然重定向并不总是可能的,或者是皱眉的
从设计的角度来看(用户的体验被打破了,因为
它们被带到具有不同设计的不同位置。
期望的场景:
- 用户点击管理个人资料
- 用户被重定向到客户端本身的配置文件页面(例如 SPA 或桌面),其中填充了配置文件范围内的信息
- 用户更新配置文件数据,然后客户端对 IdentityServer 进行 API 调用以集中更新用户的声明
- 刷新本地声明以反映发送到身份服务器的声明
主要问题:从架构上讲,这是一种合理的方法吗?用户配置文件(例如 first/last 姓名、性别、DoB 等)应该由 IdentityServer 管理(通过 API 或自己的页面)还是应该集中存储并 used/managed 通过IdentityServer(作为声明加载)和单个客户端应用程序?您将如何处理所需的场景?
我得到的最接近的信息是在方法 3 中讨论的 here。
...但是这是一个 3 年多的文档,我不确定今天 oidc-client/IdentityServer 4 位开发人员推荐的是什么。
任何见解将不胜感激。
克里斯
我认为需要第二种情况的主要原因可能是
taken to a different location with different design
是吗?
如果不是,我认为在多个客户端应用程序上重复相同或相似的声明更新页面没有任何好处,如果有多个客户端应用程序的话。
如果是,并且您无法自定义身份提供者(身份服务器)上的页面,您仍然可以拥有一个声明更新页面,但只是托管在身份服务器之外。此页面(正式名称:托管它的应用程序)将是身份提供者的客户端以及重定向到此处的客户端应用程序。
这种方法的一个好处是您可以完全控制此页面的外观,事件根据客户端使其有条件。
Should user profiles (e.g. first/last name, gender, DoB, etc...) be managed by IdentityServer (via an API or own pages) or should these be stored centrally and used/managed by both IdentityServe
这个问题没有单一的答案,因为这完全取决于您的实际业务背景。
比你描述的还要糟糕,你可以有一个混合系统,其中一些声明由多个子系统共享,但其他子系统有自己的配置文件,不与任何其他子系统共享,所有这些都围绕一个身份提供者集成。
如果您有 多个客户端 和一个处理用户 auth/n 的 central IdentityServer 4 实例,您会如何着手管理来自各个客户的用户配置文件?
当前场景:
- 用户点击管理个人资料
- 用户被重定向到 IdentityServer 上的自定义管理声明页面,其中 a) 加载表单中的所有声明,b) 允许用户 mod 此类声明,c) 用新值更新它们
- 用户被重定向到引用者 URL(然后检索 这些新声明通过包含配置文件的令牌刷新 scope) - 虽然重定向并不总是可能的,或者是皱眉的 从设计的角度来看(用户的体验被打破了,因为 它们被带到具有不同设计的不同位置。
期望的场景:
- 用户点击管理个人资料
- 用户被重定向到客户端本身的配置文件页面(例如 SPA 或桌面),其中填充了配置文件范围内的信息
- 用户更新配置文件数据,然后客户端对 IdentityServer 进行 API 调用以集中更新用户的声明
- 刷新本地声明以反映发送到身份服务器的声明
主要问题:从架构上讲,这是一种合理的方法吗?用户配置文件(例如 first/last 姓名、性别、DoB 等)应该由 IdentityServer 管理(通过 API 或自己的页面)还是应该集中存储并 used/managed 通过IdentityServer(作为声明加载)和单个客户端应用程序?您将如何处理所需的场景?
我得到的最接近的信息是在方法 3 中讨论的 here。
...但是这是一个 3 年多的文档,我不确定今天 oidc-client/IdentityServer 4 位开发人员推荐的是什么。
任何见解将不胜感激。
克里斯
我认为需要第二种情况的主要原因可能是
taken to a different location with different design
是吗?
如果不是,我认为在多个客户端应用程序上重复相同或相似的声明更新页面没有任何好处,如果有多个客户端应用程序的话。
如果是,并且您无法自定义身份提供者(身份服务器)上的页面,您仍然可以拥有一个声明更新页面,但只是托管在身份服务器之外。此页面(正式名称:托管它的应用程序)将是身份提供者的客户端以及重定向到此处的客户端应用程序。
这种方法的一个好处是您可以完全控制此页面的外观,事件根据客户端使其有条件。
Should user profiles (e.g. first/last name, gender, DoB, etc...) be managed by IdentityServer (via an API or own pages) or should these be stored centrally and used/managed by both IdentityServe
这个问题没有单一的答案,因为这完全取决于您的实际业务背景。
比你描述的还要糟糕,你可以有一个混合系统,其中一些声明由多个子系统共享,但其他子系统有自己的配置文件,不与任何其他子系统共享,所有这些都围绕一个身份提供者集成。