Как написать скрипт на python для аутентификации в Azure DevOps REST API и получения токена доступа? - PullRequest
1 голос
/ 14 июня 2019

Как мне пройти аутентификацию в Azure DevOps REST API в скрипте python? Я обнаружил, что есть 2 метода:

  • Использование токена личного доступа (PAT)
  • Использование OAuth 2.0

Я использую второй метод. Следуйте инструкциям в этой документации: https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/oauth?view=azure-devops

Я написал эту функцию для аутентификации в Azure DevOps с использованием OAuth 2.0:

def get_authenticated():

    client_id = < my client ID as a string >
    state = "user1"
    scope = "vso.graph_manage%20vso.identity_manage%20vso.profile_write%20vso.project_manage%20vso.tokenadministration%20vso.tokens"
    callback_URL = < Callback URL to my azure devops account >

    # Azure DevOps Services authorization endpoint
    Auth_URL = "https://app.vssps.visualstudio.com/oauth2/authorize?client_id=" + client_id + "&response_type=Assertion&state=" + state + "&scope=" + scope + "&redirect_uri=" + callback_URL
    headers = {'Accept': 'application/json;api-version=1.0'}

    print(Auth_URL)

    response = requests.get(Auth_URL,headers = headers)
    print(response)
    print(response.status_code)
    print(response.headers['content-type'])

    response.raise_for_status() 

Но при вызове этой функции вывод, который я получаю:

<Response [203]>
203
text/html; charset=utf-8

URL-адрес аутентификации правильный, потому что при попытке доступа к тому же URL-адресу в браузере он успешно перенаправляет на форму для ввода учетных данных пользователя Azure.

Ожидаемое поведение сценария: при запросе auth_url службы Azure DevOps должны запросить у пользователя авторизацию. Я думаю, что это должно быть сделано, запрашивая имя пользователя и пароль в терминале / через браузер.

Я совершенно новичок в написании скриптов на Python и API REST. Может ли кто-нибудь помочь мне, указав на ошибки в моем коде или указав на некоторые примеры?

1 Ответ

0 голосов
/ 18 июня 2019

Ошибка http 203 указывает, что возвращенная метаинформация не является окончательным набором объекта с сервера с копией объекта, а из закрытой сети.В своем коде вы добавили headers = {'Accept': 'application/json;api-version=1.0'}, но на самом деле тип контента должен быть application/x-www-form-urlencoded.

. Вы можете использовать некоторую библиотеку OAuth2 для python для аутентификации в API-интерфейсе REST Azure DevOps, например OAuthLib.Он включает в себя несколько примеров.

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

Учебное пособие по использованию request_oauth2

...