Как добавить Bearer и Scope при использовании HttpWebRequest с постом XML - PullRequest
1 голос
/ 21 марта 2020

Я пробовал следующее, но по-прежнему не проходит аутентификацию

string requestXml = doc.InnerXml;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
byte[] bytes;
bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
request.ContentType = "application/xml; charset=UTF-8;";
request.ContentLength = bytes.Length;
request.Method = "POST";            
request.Headers.Add("Authorization", $"Bearer {accessToken} scope=myendpoint");

Я также пытался

request.Headers.Add("scope", "myendpoint");

1 Ответ

0 голосов
/ 22 марта 2020

Сначала вы получаете токен через серию HTTP-запросов / ответов, а затем используете этот токен в качестве токена-носителя при последующем вызове API (новый HTTP-запрос / ответ). Способ получения токена зависит от протокола. Если протокол oAuth v2 и (например) вы выполняете тип / поток предоставления учетных данных клиента, scope является необязательным параметром запроса. Запрос может выглядеть так:

String serviceURL = "https://blah.accesscontrol.windows.net/...";
String body = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope={2}", "<client id>","<client secret>","<scope>");

System.Net.WebRequest webRequest = System.Net.WebRequest.Create(serviceURL);
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Method = "POST";

byte[] payload = System.Text.Encoding.ASCII.GetBytes(body);
webRequest.ContentLength = payload.Length;
using (System.IO.Stream outputStream = webRequest.GetRequestStream())
{
    outputStream.Write(payload, 0, payload.Length);
}
System.Net.WebResponse webResponse = webRequest.GetResponse(););
// extract token from response

Добавление токена на предъявителя:

request.Headers.Add("Authorization", "Bearer " + token); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...