openid-connect - 解耦资源和身份验证服务器中的跨用户交互

标签 openid-connect api-design

我正在尝试向我的 REST API 添加一些需要跨用户交互的业务逻辑。我们已经分离了我们的资源服务器认证服务器

如果在资源服务器 的同一“组”中,通过例如搜索其他用户的姓名、电子邮件++ 进行跨用户交互的正确方法是什么。到目前为止,这是有问题的,因为没有用户信息(或应该?)存储在资源服务器中。仅由 OpenID Connect 提供商提供的标识符。

现在通过 userinfo 端点获取经过身份验证的(我自己的)用户信息当然没有问题了。但是,关于其他用户(不是我)没有什么可告诉我的。此外,我认为在身份验证服务器上创建一个“通过 id 获取 userinfo”端点是不明智的。

处理此类问题的最佳方法是什么?是否为此制定了一套最佳实践规则?我真的需要将每个用户的信息保存两次吗?一次在身份验证服务器,一次在资源服务器?如果是这样,那么同步这两个用户模型的正确方法是什么,因为除了唯一标识符之外它们是完全分离的。

最佳答案

有两种情况。

  1. 资源服务器授权服务器都连接到一个包含所有用户信息的数据源。

  2. 资源服务器授权服务器连接到两个不同的数据源,连接到授权服务器的数据源包含用户信息。

使用哪种情况取决于您的应用要求。但是对于这两种情况,跨用户交互的场景将有所不同。

正如您所提到的,它清楚地表明您的应用在某种程度上有查看其他用户信息的需求(就像我们在 facebook 上看到的那样)。

如果您选择案例 1:您可以向已登录用户公开所有用户信息(当然,您将向已登录用户公开用户配置文件,而不是帐户信息)并且登录用户只需要他/她自己的凭据即可登录和查看其他用户(就像在图书馆管理系统中查看书籍一样)

另一方面

如果您选择案例 2:您可以使用另一个(比如 user rest API)rest API 连接到包含您的用户的数据源它会将用户暴露给您的资源服务器。此 API 将受到您的授权服务器的保护。

然后您的资源服务器也将通过client_credential 流程成为您的授权服务器的客户端。 user rest API 只会将用户暴露给您的资源服务器,资源服务器之外的任何人都无法从user rest API 获取用户。

您的资源服务器将为您的用户休息 API 获取访问 token ,并使用该访问 token 获取所需的用户信息。您的用户 rest API 会将所有用户端点公开给您的资源服务器(例如“/AllUsers”、“/SearchUser”等)。

我的建议:

如果您没有任何特定要求将Resource ServerAuthorization Server 的数据库分开,我建议您使用案例1。这就是方法我想采用一种非常简单直接的方法。

但是,如果您有一些特定的要求将Resource ServerAuthorization Server 的数据库分开,那么在情况 2 中有适合您的解决方案。

关于openid-connect - 解耦资源和身份验证服务器中的跨用户交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49340807/

相关文章:

authentication - JSON Web token (JWT) 的安全性和可靠性问题

rust - API 设计中的内部可变性滥用?

asp.net - 网络 API 2 : NotFound() with content?

c# - 更改 IdentityServer4.Admin 的 STS 项目的站点语言(Skoruba 的项目)时出现问题

asp.net-core - IdentityServer4,WindowsCryptographicException : The system cannot find the file specified

c# - OpenIdConnect 重定向到 http 而不是 https

针对不同级别的资源详细信息的 REST API URI 模式

c# - 通过 OpenID Connect 从 Azure AD 获取用户的电子邮件地址

IdentityServer4 与外部提供商的关联失败错误

rest - 标签应该是它自己的资源还是嵌套的属性?