Как манипулировать репозиторием Bitbucket с токеном?
Я следил за этой документацией, чтобы получить значение токена и токен из битбакет:
https://confluence.atlassian.com/display/BITBUCKET/OAuth+on+Bitbucket
После этого я хочу нажать/вытащить на заданный репо, используя этот токен.
В Github я могу использовать токен следующим образом:
https://help.github.com/articles/git-automation-with-oauth-tokens#step-2-clone-a-repository
Мой вопрос в том, как я могу использовать этот вид авторизации http в битбакете (mercurial/ git)?
Ответы
Ответ 1
Эта Страница BitBucket упоминается:
Недавно мы представили OAuth 2, а также добавили возможность использовать их в качестве HTTP Basic Auth credentials.
Клонирование репозитория с помощью токена доступа
Поскольку надстройки не смогут загружать свои собственные ключи SSH для клонирования, маркеры доступа могут использоваться в качестве базовых учетных данных HTTP Auth для безопасного клонирования по HTTPS.
git clone https://x-token-auth:{access_token}@bitbucket.org/user/repo.git
Требуется буквальная строка x-token-auth
в качестве замены имени пользователя.
Наш процесс похож на GitHub, но немного отличается: разница в GitHub ставит фактический токен в поле имени пользователя.
Подробнее в разделе OAuth на облаке Bitbucket ", как предложено в комментариях nick graziano.
Ответ 2
Я использовал пароль приложения, который я создал из панели Bitbucket Cpanel, в Настройки → Управление доступом (боковая панель) → Пароли приложения. После этого я клонировал репозиторий, используя свое имя пользователя и новый пароль приложения следующим образом:
https://[your_user_name]:[app_password]@bitbucket.org/[your_user_name]/[repo_name].git
Ответ 3
Прежде всего: только токены OAuth 2 могут использоваться для клонирования репозиториев
Пока неясно с этой страницы, я видел, как люди пытались использовать токены доступа OAuth 1. К сожалению, Git и Mercurial не поддерживают OAuth 1, и поэтому невозможно клонировать репозиции таким образом.
Это связано с тем, что OAuth 1 требует уникальной подписки на запросы. Сам токен является лишь одной из входных переменных для процесса криптографического подписания, который Git и hg не поддерживают.
Теперь мы действительно недавно добавили поддержку OAuth 2, которая, несмотря на свое имя, является совсем другим протоколом и не включает криптографическое подписание. В результате токены OAuth 2 могут быть использованы для клонирования по https.
Здесь дамп для меня, создающий новый токен доступа/токена OAuth 2 и использующий его для клонирования одного из моих личных репозиториев:
$ curl https://bitbucket.org/site/oauth2/access_token \
-d grant_type=client_credentials \
-u dqN7QFLwJEcHsHadYw:pzvZG25WEDqbm9aeUVRHtQRHgTRgDr9t
{
"access_token": "He1rBW1eYAzmT3ePJcvYDtkIcF1Pb1izZHo8oqpKMEL5ivsku71qkjfumVgR2bWsCiRM7XeEmbVffxU92w==",
"scopes": "repository email",
"expires_in": 3600,
"refresh_token": "pfcnxSpXNPAeTcYhcQ",
"token_type": "bearer"
}
$ git clone "https://x-token-auth:JU5dAtlMD30BisLpDkIap[email protected]bitbucket.org/evzijst/crypt"
Cloning into 'crypt'...
remote: Counting objects: 26, done.
remote: Compressing objects: 100% (25/25), done.
remote: Total 26 (delta 8), reused 0 (delta 0)
Unpacking objects: 100% (26/26), done.
Checking connectivity... done.
Теперь имейте в виду, что токены OAuth 2 истекают через час. После этого они перестанут работать. В зависимости от того, как вы получили токен доступа, у вас может быть токен обновления. Вы можете использовать этот токен обновления, чтобы выпустить новый токен доступа непосредственно перед попыткой клонирования, чтобы избежать истечения срока действия.
Ответ 4
Чтобы управлять репозиторием Bitbucket с помощью токена:
-
Сначала вы создаете "Oauth" в разделе управления доступом в настройках учетной записи Bitbucket. Это дает вам "Ключ" и "Секрет". Вы сделали этот бит.
-
Теперь, используя этот ключ и секрет, вы спрашиваете Bitbucket для токена. В моем случае я сделал http-запрос https://bitbucket.org/site/oauth2/access_token
. Я мог бы сделать это с помощью Curl или некоторой библиотеки Ajax следующим образом:
curl -X POST -u "yourKeyHere:yourSecretHere" https://bitbucket.org/site/oauth2/access_token -d grant_type=client_credentials
в качестве альтернативы мой HTTP-запрос был таким (с использованием суперагента в node), с моим Content-Type
, установленным в application/x-www-form-urlencoded
, вы можете использовать почтальон:
request.post("https://yourKeyHere:[email protected]/site/oauth2/ access_token").send('grant_type=client_credentials');`
результат выглядит следующим образом:
{
"access_token": "blah blah blah HXAhrfr8YeIqGTpkyFio=",
"scopes": "pipeline snippet issue pullrequest project team account",
"expires_in": 3600,
"refresh_token": "hsadgsadvkQ",
"token_type": "bearer"
}
-
Теперь, когда у вас есть "access_token", клонируйте с ним частное репо. Но URL-адрес вашего репо должен быть таким (держите скобку вокруг токена):
https://x-token-auth:{tokenHere}@bitbucket.org/yourRepoOwnerHere/RepoNameHere.git