Проблема с подключением к TFS с именем пользователя и паролем - PullRequest
1 голос
/ 23 марта 2019

Когда я пытаюсь подключиться к tfs, функция Get-Data завершилась с ошибкой 401, хотя функция Get-DataWithCred завершается успешно с тем же аргументом.

И не понимаете разницу с этими двумя?

function Get-Data([string]$username, [string]$password, [string]$url) 
{
  # Step 1. Create a username:password pair
  $credPair = "$($username):$($password)"

  # Step 2. Encode the pair to Base64 string
  $encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($credPair))

  # Step 3. Form the header and add the Authorization attribute to it
  $headers = @{ Authorization = "Basic $encodedCredentials" }

  # Step 4. Make the GET request
  $responseData =  Invoke-WebRequest -Uri $url -Method Get -Headers $headers
  return $responseData
}


function Get-DataWithCred([string]$username, [string]$password, [string]$url) 
{
  $p = ConvertTo-SecureString -String $password -AsPlainText -Force

  $Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $p

  $responseData =  Invoke-WebRequest -Uri $url -Method Get  -Credential $Cred
  return $responseData
}

Цель слишком соединена через tfs со скриптом python, который потерпел неудачу так же, как и функция Get-Data, когда я использую библиотеку запросов.

>>> r = requests.get('https://tfs-url.com', auth=('user', 'pass'))
>>> r.status_code
401

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Вам необходимо использовать Microsoft для передачи ваших учетных данных: протокол ntlm.

Этот протокол не поддерживается по умолчанию запросами, но библиотека reports_ntlm расширяет запросы, добавляя поддержку вNTLM.

Простой пример:

import os
import requests
from requests_ntlm import HttpNtlmAuth


def main():
    user = "user"
    password = "password"

    session = requests.Session()
    session.auth = HttpNtlmAuth(user, password)

    url = "https://tfs-url.com"

    response = session.get(url)

    print(response)


if __name__ == "__main__":
    main()
0 голосов
/ 23 марта 2019

Похоже, что есть проблема с $ encodedCredentials.

Взгляните на Выбор правильного механизма аутентификации

Для моего скрипта, который подключается к TFS, я используюследующий код:

     $strUser = 'domain\userID'
     $password = "YOURPASSWORD"
     $strPass = ConvertTo-SecureString -String $password -AsPlainText -Force
     $cred= New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ($strUser, $strPass)

А затем подключитесь к TFS, как вы это сделали:

$responseData =  Invoke-WebRequest -Uri $url -Method Get  -Credential $cred

Или, если вы хотите подключиться к TFS с пользователем, который запускает сценарий, который выможно использовать

-UseDefaultCredentials

фрагмент кода:

$responseData =  Invoke-WebRequest -Uri $url -Method Get  -UseDefaultCredentials
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...