Oauth 2.0 如何处理多个客户端和角色?

Oauth 2.0 如何处理多个客户端和角色?,oauth-2.0,acl,Oauth 2.0,Acl,我正在使用OAuth2.0服务器来支持多个客户端和角色 假设我有一个API服务器,它需要来自OAuth服务器的访问令牌 我想出的这些工作流程。对于这个简单的工作流,我有三个服务--OAuth、客户端和API服务器 每个客户端上的用户都有电子邮件和密码(这些凭据存储在OAuth服务器上) 用户在其客户端上使用电子邮件和密码登录,然后客户端将凭据发送到OAuth服务器进行身份验证 OAuth服务器检查凭据并发出访问令牌 当用户向API服务器请求请求时,API服务器会与OAuth服务器对话,以查看用户

我正在使用OAuth2.0服务器来支持多个客户端和角色

假设我有一个API服务器,它需要来自OAuth服务器的访问令牌

我想出的这些工作流程。对于这个简单的工作流,我有三个服务--OAuth客户端API服务器

  • 每个客户端上的用户都有电子邮件和密码(这些凭据存储在OAuth服务器上)
  • 用户在其客户端上使用电子邮件和密码登录,然后客户端将凭据发送到OAuth服务器进行身份验证
  • OAuth服务器检查凭据并发出访问令牌
  • 当用户向API服务器请求请求时,API服务器会与OAuth服务器对话,以查看用户是否有权访问该资源。如果是这样,请执行请求,然后返回一些内容
  • 在我看来,这有点不寻常。我想这样做的原因是因为我们实际上在OAuth服务器上存储用户凭据。我还为每个客户机设置了多个角色(组)


    这是一种可行的解决方法,还是一个OAuth+多个客户端和多个角色有更好的方法?

    您所描述的与OAuth 2.0中的资源所有者密码凭据授予等效,请参阅:。您应该能够使用支持此授权的股票OAuth 2.0授权服务器来执行此操作。因此,它不是不寻常的或专有的,但需要对客户端有很大的信任,因为它“看到”了密码


    您可以通过将多个角色和组表示为与访问令牌关联的不同“作用域”,从而对其进行建模。

    谢谢Hans Z。我看到的问题是,客户端应用程序必须知道或管理其端的作用域。例如,管理员用户“test@test.com“尝试登录,我应该请求什么范围?”?为了知道请求什么,客户端应用程序应该知道用户组(或角色),但我真的不想这样做。我想我可以使用用户凭据授予来颁发访问令牌,然后在用户实际请求某些内容时检查作用域。客户端不需要知道作用域,尤其是在资源所有者密码凭据授予中。在任何情况下,您都不需要显式地请求作用域,您还可以将您想要的任何作用域与授权服务器上的访问令牌相关联。然后,客户端甚至可能根本不知道作用域:它只是获取一个访问令牌,并根据底层权限/角色(通常是资源所有者权限/角色的派生集)使用它来决定成功或失败。谢谢Hans Z。我认为这是迄今为止处理它的最佳方法。