Я реализовал приложение, способное получать токен доступа OAuth через процесс авторизации, используя код типа авторизации большой тип. Я успешно использовал его со службами API Google, но у меня возникла проблема, когда я использую его со службами API AutoDesk Forge. У меня есть подозрение, что 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"}
Однако в главе 2.3.1 спецификация OAuth говорится (https://tools.ietf.org/html/rfc6749#section-2.3.1):
The authorization server MUST support the HTTP Basic
authentication scheme for authenticating clients that were issued a
client password.
. Пример такого запроса, который сервер ДОЛЖЕН поддерживать вглава 4.2.3 (https://tools.ietf.org/html/rfc6749#section-4.1.3):
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
И 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 ожидает, что client_id и client_secretбыть в теле запроса POST.) Это дополнительный способ, которым сервер МОЖЕТ поддерживать, как написано снова в главе 2.3.1 (https://tools.ietf.org/html/rfc6749#section-2.3.1):
Alternatively, the authorization server MAY support including the
client credentials in the request-body
Итак, я прав, что служба AutoDesk Forge API поддерживает только дополнительныекстати и видимо не поддерживает обязательный путь?