Oauth2 实现的健全性检查

Sanity checking an Oauth2 Implementation

我为我的网站(称为 CLMS)设计了一个受 RESTful 启发的 API,我想使用 oauth2(而不是 oauth1)来保护它。通过网络拖网后,我想出了这个......有人可以为我检查这个,并回答我的问题吗?

上下文。

我有一个 multi-tenanted 系统(名为 CLMS),它既是授权服务器又是资源服务器。 CLMS API 将由特定的、可信赖的合作伙伴使用(让我们将示例称为 3PS)。

流量:

应用程序凭据

在任何合作伙伴 (3PS) 可以使用 CLMS API 之前,他们必须从 CLMS out-of-band 获得唯一且机密的凭据。这些凭据包括 client_id 和 client_secret。这些详细信息将用于使用 OAuth 2.0 协议对 API 调用进行身份验证。

client_id 应映射到 CLMS 系统内的单个用户。如果需要 3PS 访问特定信息,则 client_id 应映射到 CLMS 中已经具有合适权限的用户。

访问令牌请求

合作伙伴 (3PS) 收到这些凭据后,他们可以使用它们从我们的 CLMS 令牌端点请求 oauth2 不记名令牌: .../v1/oauth2/token

需要 CLMS 令牌端点来使用如上所述获得的应用程序凭据来验证您的访问令牌请求(使用 HTTP 基本身份验证)。 “client_id”和“client_secret”成为您在 HTTP 基本身份验证中的 user-id 和密码。

作为“授权服务器”的 CLMS 会验证您的应用程序凭据和 returns 访问令牌。 CLMS 提供的特定类型的访问令牌是“Bearer Token”。

API请求认证

当 3PS 进行 API 调用时,通过使用以下语法(如 OAuth 2.0 协议中所定义)在“授权”header 中添加访问令牌来发出请求:

授权:{tokenType} {accessToken} 示例:授权:承载 EEwJ6tF9x5...4599F

问题

  1. 这作为 oauth2 实现有意义吗?
  2. 是否可以使用 HTTP 基本身份验证来请求访问令牌?
  3. 我假设我可以将不记名令牌映射到我的系统中已经存在的个人 CLMS 用户权限,这是否正确。
  4. 这叫'Client Credentials'补助金吗?

非常感谢任何帮助。

首先,如果您的客户(合作伙伴)数量有限,最好手动生成他们的客户 ID 和密码并将其提供给他们。

1-这作为 oauth2 实现有意义吗?

是的,但它仅涵盖 'client-credentials' 拨款方案。

2-是否可以使用 HTTP 基本身份验证来请求访问令牌?

这毫无意义。假设您已经注册了客户端,这只是一个额外的身份验证级别,并不是真正需要的。任何对您的网络服务的未经授权的请求都将因缺少有效的访问令牌而被拒绝。

3-我是否可以假设我可以将不记名令牌映射到我的系统中已经存在的个人 CLMS 用户权限。

是的,你可以。我建议为此使用 Oauth2 提供的 'scope' 功能,您可以在其中将 'scopes' 关联到访问令牌,从而为他们提供对某些数据的访问权限。

4-这叫 'Client Credentials' 拨款吗?

是的。

除此之外:

  • 运行 这仅通过 HTTPS。您不希望您的客户端 id/secret 或访问令牌在纯文本 HTTP
  • 上的不安全 public 网络上受到损害
  • 您可能希望针对某些 'scopes' 实施 'login'
  • 的用户授权流程