Обычно вы используете API REST, используя oAuth, когда хотите, чтобы ваше приложение связывалось с API Azure DevOps от имени вызывающего пользователя без необходимости каждый раз запрашивать имена пользователей и пароли. Для этого пользователь должен будет авторизовать приложение для связи с API Azure DevOps от его имени.
Следующая страница предоставляет хороший обзор этого процесса .
Пользователь авторизует ваше приложение
На высоком уровне вы вызываете конечную точку авторизации и предоставляете обратный вызов. Обратный вызов должен быть защищенным URL-адресом (https) в вашем приложении:
https://app.vssps.visualstudio.com/oauth2/authorize
?client_id={app ID}
&response_type=Assertion
&state={state}
&scope={scope}
&redirect_uri={callback URL}
Предполагая, что пользователь принимает авторизацию, Azure DevOps перенаправляет в ваше местоположение обратного вызова с кодом авторизации в URL.
https://fabrikam.azurewebsites.net/myapp/oauth-callback
?code={authorization code}
&state={state}
Получить токен доступа
Теперь, когда ваше приложение авторизовано, вам нужно получить токен доступа:
POST https://app.vssps.visualstudio.com/oauth2/token
Форма application/x-www-form-urlencoded
имеет следующий текст с секретом приложения при создании приложения, кодом авторизации, который вы только что получили, когда пользователь авторизовал ваше приложение, и защищенным обратным вызовом.
public string GenerateRequestPostData(string appSecret, string authCode, string callbackUrl)
{
return String.Format("client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion={1}&redirect_uri={2}",
HttpUtility.UrlEncode(appSecret),
HttpUtility.UrlEncode(authCode),
callbackUrl
);
}
Ответ будет содержать токен доступа в ответе JSON.
{
"access_token": { access token for the user },
"token_type": { type of token },
"expires_in": { time in seconds that the token remains valid },
"refresh_token": { refresh token to use to acquire a new access token }
}
Обратите внимание, что токен не является постоянным и может нуждаться в обновлении.
Использовать заголовок авторизации
Наконец, теперь, когда у вас есть токен доступа пользователя, вы можете включить его в заголовок авторизации в своих запросах к серверу.
GET https://dev.azure.com/myaccount/myproject/_apis/build-release/builds?api-version=3.0
Authorization: Bearer {access_token}
Например:
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "{access_token}");
Если вы не используете выделенное приложение и просто хотите запросить API с учетными данными, которые вы контролируете, - используйте токен личного доступа, так как это намного проще:
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic {base-64-encoded-string of username:PAT}");