OAuth2 授予类型客户端凭据 - 是否允许使用 GET 方法
OAuth2 Grant type Client Credentials - is GET method allowed
我正在访问一项服务,该服务通过接受 client_id 和 client_secret 作为查询字符串参数的 GET 方法提供访问令牌。该服务声称是 OAuth2 投诉。我查看了客户端凭证授予的 OAuth2 规范。规范是这样说的:
The client makes a request to the token endpoint by adding the
following parameters using the "application/x-www-form-urlencoded"
format per Appendix B with a character encoding of UTF-8 in the HTTP
request entity-body:
grant_type
REQUIRED. Value MUST be set to "client_credentials".
scope
OPTIONAL. The scope of the access request as described by
Section 3.3.
The client MUST authenticate with the authorization server as
described in Section 3.2.1.
即使没有明确排除 GET 方法,规范也只允许 POST 用于访问令牌授予。 OAuth2 规范不允许使用 GET 方法获取客户端凭据授予的访问令牌是否正确?
感觉像是一个不正确的实现 - OAuth 规范永远不会推荐这个,因为:
- 凭据通常会记录在网络服务器日志中,这是不好的
- GET 请求可以缓存在 HTTP 管道的不同位置,导致返回旧令牌
POST请求当然不会出现以上问题
传递客户端 ID and/or 客户端密码作为查询字符串是 OAuth 2.0 框架的错误实现。无论 API 使用 GET
还是 POST
方法。我最近看到另一个 API (Datanas) 使用 POST
方法但需要在查询字符串中传递客户端 ID 和客户端密码。 The issue was reported here.
RFC 6749 定义了使用 OAuth2 时如何检索访问令牌。以简化的方式:
- 应在授权范围内传递客户端 ID + 客户端密码 header(使用基本身份验证)
- 并且代码应该在 body.
中传递
- 客户端在制作访问令牌时必须使用 HTTP
POST
方法
请求。
您最好与 API 的支持人员取得联系,并请他们让您与他们的工程团队取得联系。
我正在访问一项服务,该服务通过接受 client_id 和 client_secret 作为查询字符串参数的 GET 方法提供访问令牌。该服务声称是 OAuth2 投诉。我查看了客户端凭证授予的 OAuth2 规范。规范是这样说的:
The client makes a request to the token endpoint by adding the
following parameters using the "application/x-www-form-urlencoded"
format per Appendix B with a character encoding of UTF-8 in the HTTP
request entity-body:grant_type REQUIRED. Value MUST be set to "client_credentials".
scope OPTIONAL. The scope of the access request as described by Section 3.3.
The client MUST authenticate with the authorization server as
described in Section 3.2.1.
即使没有明确排除 GET 方法,规范也只允许 POST 用于访问令牌授予。 OAuth2 规范不允许使用 GET 方法获取客户端凭据授予的访问令牌是否正确?
感觉像是一个不正确的实现 - OAuth 规范永远不会推荐这个,因为:
- 凭据通常会记录在网络服务器日志中,这是不好的
- GET 请求可以缓存在 HTTP 管道的不同位置,导致返回旧令牌
POST请求当然不会出现以上问题
传递客户端 ID and/or 客户端密码作为查询字符串是 OAuth 2.0 框架的错误实现。无论 API 使用 GET
还是 POST
方法。我最近看到另一个 API (Datanas) 使用 POST
方法但需要在查询字符串中传递客户端 ID 和客户端密码。 The issue was reported here.
RFC 6749 定义了使用 OAuth2 时如何检索访问令牌。以简化的方式:
- 应在授权范围内传递客户端 ID + 客户端密码 header(使用基本身份验证)
- 并且代码应该在 body. 中传递
- 客户端在制作访问令牌时必须使用 HTTP
POST
方法 请求。
您最好与 API 的支持人员取得联系,并请他们让您与他们的工程团队取得联系。