我为我的网站(称为CLMS)设计了一个RESTful启发式API,我想使用oauth2(而不是oauth1)来保护它 . 经过网络搜索后,我想出了这个......有人可以为我检查一下这个问题,并回答我的问题吗?
Context.
我有一个多租户系统(名为CLMS),它既是授权服务器又是资源服务器 . CLMS API将由特定的可信赖合作伙伴使用(让我们称之为示例一个 3PS ) .
Flow:
Application Credentials
在任何合作伙伴(3PS)可以使用CLMS API之前,他们必须从带外CLMS获取唯一且机密的凭据 . 这些凭据包括client_id和client_secret . 这些详细信息将用于使用OAuth 2.0协议验证API调用 .
client_id应映射到CLMS系统中的单个用户 . 如果需要3PS来访问特定信息,则应将client_id映射到已具有适当权限的CLMS中的用户 .
Access token request
一旦合作伙伴(3PS)收到这些凭证,他们就可以使用它们从我们的CLMS令牌 endpoints 请求oauth2承载令牌:... / v1 / oauth2 / token
需要CLMS令牌 endpoints 来验证您的访问令牌请求(使用HTTP Basic Auth)以及如上所述获得的应用程序凭据 . 'client_id'和'client_secret'在HTTP Basic Auth中成为您的用户ID和密码 .
作为“授权服务器”的CLMS验证您的应用程序凭据并返回访问令牌 . CLMS提供的特定类型的访问令牌是“承载令牌” .
API request authentication
当3PS进行API调用时,通过使用以下语法(在OAuth 2.0协议中定义)在“授权”标头中添加访问令牌来进行请求:
授权: 示例:授权:Bearer EEwJ6tF9x5 ... 4599F
Questions
-
这是否有意义作为oauth2实现?
-
使用HTTP基本身份验证来请求访问令牌是否可以?
-
我是否正确地假设我可以根据我系统中已存在的各个CLMS用户权限来映射持有者令牌 .
-
这被称为'Client Credentials' grant吗?
任何帮助是极大的赞赏 .
1 回答
首先,如果您拥有一组有限的客户(合作伙伴),那么手动生成客户端ID和密码并将其提供给他们将是一个好主意 .
1 - 这是否有意义作为oauth2实现?
是的确如此,但它只涵盖了“客户资格”授权方案 .
2 - 使用HTTP基本身份验证来请求访问令牌是否可以?
这毫无意义 . 假设您已经注册了客户端,这只是一个额外的身份验证级别,并不是真正需要的 . 由于缺少有效的访问令牌,对您的Web服务的任何未经授权的请求都将被拒绝 .
3-Am我正确地假设我可以根据我系统中已存在的各个CLMS用户权限来映射持有者令牌 .
是的你可以 . 我建议使用Oauth2提供的“范围”功能,您可以将“范围”与访问令牌相关联,从而为他们提供对特定数据的访问权限 .
4 - 这被称为“客户证书”资助吗?
是的 .
除此之外:
仅通过HTTPS运行此命令 . 您不希望您的客户端ID /机密或访问令牌通过纯文本HTTP在不安全的公共网络上受到危害
可能有某些'scopes'您可能希望为'login'实现用户授权流程