Oauth 2.0 “;获得一个授权码为Grant的三腿令牌”;不是OAuth 2.0 RFC投诉并生成错误400

Oauth 2.0 “;获得一个授权码为Grant的三腿令牌”;不是OAuth 2.0 RFC投诉并生成错误400,oauth-2.0,autodesk-forge,Oauth 2.0,Autodesk Forge,我已经实现了一个应用程序,它能够通过使用授权代码grandtype的授权过程获取OAuth访问令牌。我在Google API服务中成功地使用了它,但在AutoDesk Forge API服务中使用它时遇到了一个问题。我怀疑OAuth AutoDesk不符合OAuth 2.0规范 我的应用程序发出此形状的HTTP POST请求: POST /authentication/v1/gettoken HTTP/1.1 Host: developer.api.autodesk.com Authorizat

我已经实现了一个应用程序,它能够通过使用授权代码grandtype的授权过程获取OAuth访问令牌。我在Google API服务中成功地使用了它,但在AutoDesk Forge API服务中使用它时遇到了一个问题。我怀疑OAuth AutoDesk不符合OAuth 2.0规范

我的应用程序发出此形状的HTTP POST请求:

POST /authentication/v1/gettoken HTTP/1.1
Host: developer.api.autodesk.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
在这里,我发送client_id和client_secret作为基本HTTP授权的用户名和密码。但我有一个错误:

{"developerMessage":"The required parameter(s) client_id,client_secret not present in the request","userMessage":"","errorCode":"AUTH-008","more info":"http://developer.api.autodesk.com/documentation/v1/errors/AUTH-008"}
但是,OAuth规范在第2.3.1章()中指出:

您可以在第4.2.3章()中看到服务器必须支持的此类请求的示例:

并且AutoDesk希望根据其文档的不同:

  curl -v 'https://developer.api.autodesk.com/authentication/v1/gettoken'
  -X 'POST'
  -H 'Content-Type: application/x-www-form-urlencoded'
  -d '
    client_id=obQDn8P0GanGFQha4ngKKVWcxwyvFAGE&
    client_secret=eUruM8HRyc7BAQ1e&
    grant_type=authorization_code&
    code=wroM1vFA4E-Aj241-quh_LVjm7UldawnNgYEHQ8I&
    redirect_uri=http://sampleapp.com/oauth/callback
  '
(如您所见,AutoDesk希望客户端id和客户端机密位于POST请求正文中。)这是服务器可能支持的其他方式,如第2.3.1章()中所述:

所以,我说AutoDesk Forge API服务只支持可选方式,而显然不支持强制方式,对吗

所以,我说AutoDesk Forge API服务只支持可选方式,而显然不支持强制方式,对吗


肯定-可以找到唯一受支持的身份验证格式。

谢谢,布莱恩!当然,这是不幸的。因此很难为标准编码。将需要一些用户界面选项或两个请求,而不是一个,如果一种方法失败,请尝试另一种方法。标准不建议将两者合并到一个请求中(在主体和头中都有身份验证)。这是通常的做法,还是有一些理由这样做,这可能会帮助我更好地理解它,使我的决策更明智?如果不与我们的架构师进行双重检查,我有根据的猜测是,将客户机密以基本授权的形式放在标题中可能会被认为不太安全(给人的普遍印象是,每个auth类型都是不安全的…)-虽然从技术上讲,它与将其放在主体中并没有完全不同。。。
 POST /token HTTP/1.1
 Host: server.example.com
 Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
 Content-Type: application/x-www-form-urlencoded

 grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
 &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
  curl -v 'https://developer.api.autodesk.com/authentication/v1/gettoken'
  -X 'POST'
  -H 'Content-Type: application/x-www-form-urlencoded'
  -d '
    client_id=obQDn8P0GanGFQha4ngKKVWcxwyvFAGE&
    client_secret=eUruM8HRyc7BAQ1e&
    grant_type=authorization_code&
    code=wroM1vFA4E-Aj241-quh_LVjm7UldawnNgYEHQ8I&
    redirect_uri=http://sampleapp.com/oauth/callback
  '
Alternatively, the authorization server MAY support including the
client credentials in the request-body