Как получить битбакет Refresh_token?

Я использую приведенный ниже API

https://bitbucket.org/site/oauth2/authorize?client_id={client_id}&response_type=token

чтобы получить access_token, но срок действия access_token истек через 1 час, и мне нужен refresh_token, но я не могу получить refresh_token в приведенном выше ответе API. Ответ вышеуказанного API:

https://www.example.com/#access_token={access_token}&scopes={scopes}&expires_in=3600&token_type=bearer

Вы можете видеть в приведенном выше ответе, что нет или есть другой способ получить refresh_token.

Я хотел вызвать вышеуказанный API как метод GET.

Может пожалуйста кто поможет.

Спасибо!


person Deepak Kumbhar    schedule 08.03.2018    source источник


Ответы (3)


В вашем браузере перейдите к

https://bitbucket.org/site/oauth2/authorize?client_id={client_id}&response_type=code

Авторизуйтесь, используя свою учетную запись bitbucket.

После этого ваш браузер будет перенаправлен на

{your_redirect_link}/?code={code}

Используйте код, чтобы сделать еще один запрос в терминале:

curl -X POST -u "{client_id:secret}" https://bitbucket.org/site/oauth2/access_token -d grant_type=authorization_code -d code={code}

Ответ будет выглядеть так:

{
  "access_token": "some_long_string",
  "scopes": "team webhook account issue wiki pipeline pullrequest project snippet",
  "expires_in": 7200,
  "refresh_token": "the_string_you_need",
  "token_type": "bearer"
}

Теперь вы можете обновить access_token запросом

curl -X POST -u "{client_id}:{secret}" https://bitbucket.org/site/oauth2/access_token -d grant_type=refresh_token -d refresh_token={refresh_token}

person Petr Klimenko    schedule 05.12.2018

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


Я как раз столкнулся с этим вопросом, спасибо, что ввели его в ТАК!

Более того, я только что нашел решение: вам нужно сделать запрос для grant_type=client_credentials:

curl -X POST -u "your_client_id:your_secret" \ 
     https://bitbucket.org/site/oauth2/access_token \
    -d grant_type=client_credentials

Токен обновления будет включен в ответ:

{
    "access_token": "the_access_token",
    "expires_in": 3600,
    "refresh_token": "the_refresh_token",
    "scopes": "....",
    "token_type": "bearer"
}

Обратите внимание, что в отношении самого токена обновления вам нужно сделать этот запрос только один раз в соответствии с этим комментарий члена команды Atlassian:

... токены обновления не имеют срока действия. [...] Срок действия токенов доступа истекает в соответствии со спецификацией, срок действия токенов обновления не истекает.

person carueda    schedule 09.03.2018
comment
Спасибо за ваш ответ. Это решение я уже нашел, но дело в том, что я хотел использовать его с клиентом REST вместо CURL. У вас есть идеи по этому поводу? - person Deepak Kumbhar; 09.03.2018
comment
Извините, как получить битбакет refresh_token? это то, что указанное решение о. Если фактический вопрос заключается в том, как использовать его для получения обновленного токена доступа: как описано в developer.atlassian.com/cloud/bitbucket/oauth-2 это должно быть через POST-запрос к https://bitbucket.org/site/oauth2/access_token с базовой аутентификацией (с использованием вашего client_id и секрета) и параметрами формы: grant_type=refresh_token и refresh_token=<your refresh token>. Обратитесь к документу вашего клиента REST, чтобы узнать, как сделать такой запрос (или указать, какой язык/env вы используете). - person carueda; 09.03.2018

У меня есть какое-то решение. Поскольку я использовал операции на основе браузера без серверной поддержки. В документе Atlassian упоминаются неявные и JWT исключены refresh_tokens. И если вы хотите использовать refresh_token, вам нужно сначала использовать Предоставление кода авторизации.

person Deepak Kumbhar    schedule 12.03.2018