ADN Open CIS
Сообщество программистов Autodesk в СНГ

07/10/2016

Руководство по получению 3-Legged токена для OAuth Autodesk Forge

Из этого руководства вы узнаете, как организовать авторизацию вашего приложения конечным пользователем с целью осуществления действий от имени пользователя.

Обратите внимание, что это руководство не покажет вам, как писать код на стороне сервера. Вместо этого он использует команды cURL, чтобы проиллюстрировать вызовы, которые надо использовать в вашем коде.

Это руководство предполагает, что приложение является веб-приложение, и что оно должно прочитать данные пользователя.

Прежде, чем начать

Перед тем, как начать, пожалуйста, выполните операции согласно руководству Создание приложения, чтобы создать приложение на платформе Forge. Укажите URL обратного вызова вашего приложения и запишите ваши client ID и secret.

Ознакомьтесь с общим потоком:

 

Шаг 1: Направьте пользователя к веб-процессу авторизации

В какой-то момент в пользовательском интерфейсе веб-приложения вы обнаружите, что вам необходимо получить согласие конечного пользователя для доступа к ресурсам Forge от имени пользователя. В зависимости от вашего приложения, вы можете сделать это, когда пользователь впервые начинает использовать приложение, или вы можете подождать до тех пор, пока вашему приложению на самом деле не потребуется доступ к ресурсу. В любом случае, вы перенаправите пользователя к конечной точке GET authorize в своем браузере. Например, вы можете указать ссылку, которая выглядит следующим образом:

Код - HTML: [Выделить]
  1. <a href="https://developer.api.autodesk.com/authentication/v1/authorize?response_type=code&client_id=obQDn8P0GanGFQha4ngKKVWcxwyvFAGE&redirect_uri=http%3A%2F%2Fsampleapp.com%2Foauth%2Fcallback%3Ffoo%3Dbar&scope=data:read">Click here to grant access to your data!</a>

Тот атрибут HREF немного трудно прочитать. Давайте попробуем по частям.

Это является конечной точкой URI, и его следует использовать дословно.

Это то, что сообщает серверу OAuth, что вы используете "Authentication Code" в качестве типа гарантии, и он должен использоваться дословно.

Замените здесь значение client ID вашего приложения.

Это URL-кодированный URL обратного вызова, по которому вы хотите, чтобы был перенаправлен пользователь после предоставления согласия. В этом примере URL-адресом является http://sampleapp.com/oauth/callback?foo=bar. Замените значение здесь соответствующим URL вашего веб-приложения. Обратите внимание, что он должен соответствовать шаблону, указанному для URL обратного вызова в информации вашего приложения в Dev Portal.

Этот фрагмент требует область применения data:read. Вы можете оставить это значение как есть для целей данного примера, но в вашем собственном приложении вы должны запросить область (области) применения, которые вам на самом деле нужны.

Переход по этой ссылке приведет конечного пользователя на страницу Autodesk Sign In:

 

После ввода учетных данных Autodesk ID и входа в систему, пользователь будет перенаправлен на страницу разрешения OAuth:

 

После того, как разрешение предоставлено, пользователь будет перенаправлен на ваш URL обратного вызова (redirect_uri) с дополнительным параметром запроса code, который содержит код авторизации (например, wroM1vFA4E-Aj241-quh_LVjm7UldawnNgYEHQ8I).

Шаг 2: Реализуйте код, который извлекает код авторизации

В этом примере пользователь был перенаправлен по адресу http://sampleapp.com/oauth/callback?code=wroM1vFA4E-Aj241-quh_LVjm7UldawnNgYEHQ8I,

Ваш код, который предоставляет URL /oauth/callback в вашем веб-приложении, должен извлечь значение параметра запроса code и сохранить его во временной переменной.

Шаг 3: Замените код авторизации для Access Token

Сразу же после извлечения параметра запроса code, вы должны поменять код авторизации для токена доступа при помощи конечной точки POST gettoken :

Замените значения client_id, client_secret, code, а также redirect_uri в примере ниже значениями, которые характерны для вашего приложения из приведенных выше шагов.

Код - HTML: [Выделить]
  1. curl -v 'https://developer.api.autodesk.com/authentication/v1/gettoken'
  2.   -X 'POST'
  3.   -H 'Content-Type: application/x-www-form-urlencoded'
  4.   -d '
  5.     client_id=obQDn8P0GanGFQha4ngKKVWcxwyvFAGE&
  6.     client_secret=eUruM8HRyc7BAQ1e&
  7.     grant_type=authorization_code&
  8.     code=wroM1vFA4E-Aj241-quh_LVjm7UldawnNgYEHQ8I&
  9.     redirect_uri=http://sampleapp.com/oauth/callback
  10.   '

Обратите внимание, что переносы строк выше были добавлены к команде cURL для удобства чтения, но должны быть удалены перед выполнением команды в терминале.

Для этого потока вы в любом случае не будете выполнять команду cURL в терминале, но вы можете использовать этот пример, чтобы сформировать правильный вызов в серверном кода.

Успешный ответ в соответствующей части, будет выглядеть следующим образом (хотя опять же, пример отформатирован для удобства чтения):

Код - HTML: [Выделить]
  1. HTTP/1.1 200 OK
  2. Cache-Control: no-cache, no-store, no-store
  3. Content-Type: application/json;charset=UTF-8
  4. Date: Sat, 04 Jun 2016 18:59:25 GMT
  5. Expires: Thu, 01 Jan 1970 00:00:00 GMT
  6. max-age: Thu, 01 Jan 1970 00:00:00 GMT
  7. Pragma: no-cache
  8. Server: Apigee Router
  9. Set-Cookie: PF=ix2tNCKRRb9WwM6dO78Eic;Path=/;Secure;HttpOnly
  10. Set-Cookie: bbbbbbbbbbbbbbb=KINDJALIIFLMNIHHAHLBPHPKNNFLHCIPDCKLJALMEDMDNIALGOKPFOLFNOOAMPMFBDMCGBOHPPEMLJGGECNMBMGBNKFOGINKCPLEAEJBFNDJEPHGCJPAJLKPNMLDEJEN; HttpOnly; secure
  11. X-Frame-Options: SAMEORIGIN
  12. Content-Length: 89
  13. Connection: keep-alive
  14.  
  15. {
  16.   "token_type": "Bearer",
  17.   "expires_in": 1799,
  18.   "refresh_token": "f2NWXxfnJOJMA1cW4k2zjFwmphf8vZjEUx3kmplFfn",
  19.   "access_token": "Ff387cyQXw1elOT3nldiFIKBqDOs"
  20. }

Используйте соответствующие методы в вашем серверном коде, чтобы извлечь соответствующую информацию, возвращаемую конечной точкой. После этого вы сможете использовать маркер доступа для осуществления вызовов к другим конечным точкам API от имени конечного пользователя, которые требуют область применения data:read  и имеют контекст аутентификации "user context required" или "user context optional". После истечения срока действия маркера, вы можете использовать маркер обновления (refresh token) с соответствующим именем конечной точки POST refreshtoken , чтобы запросить новый маркер.

Источник: https://developer.autodesk.com/en/docs/oauth/v2/tutorials/get-3-legged-token/

Автор перевода: Дмитрий Емельянов

Обсуждение: http://adn-cis.org/forum/index.php?topic=

Опубликовано 07.10.2016