Я пытаюсь создать DLL на. Net 4.0 Framework для подключения к общей службе данных (CDS), и API требует AccessToken в заголовке запросов, сейчас я только кодирую учетные данные и отправляю их к API следующим образом:
internal static string EncodeCredentials(Credentials credentials)
{
var strCredentials = string.Format("{0}:{1}", credentials.UserName, credentials.Password);
var encodedCredentials = Convert.ToBase64String(Encoding.UTF8.GetBytes(strCredentials));
return encodedCredentials;
}
А затем я вставляю учетные данные в виде заголовка
var basicRequest = (HttpWebRequest)WebRequest.Create(URL);
basicRequest.Headers.Add("Authorization", "Basic" + " " + EncodeCredentials(Credentials));
Но это не работает, в примере кода Microsoft используется другой метод:
class OAuthMessageHandler : DelegatingHandler
{
private UserCredential _credential;
private AuthenticationContext _authContext =
new AuthenticationContext("https://login.microsoftonline.com/common", false);
private string _clientId;
private string _serviceUrl;
public OAuthMessageHandler(string serviceUrl, string clientId, string userName, string password,
HttpMessageHandler innerHandler)
: base(innerHandler)
{
_credential = new UserCredential(userName, password);
_clientId = clientId;
_serviceUrl = serviceUrl;
}
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
try
{
request.Headers.Authorization =
new AuthenticationHeaderValue("Bearer", _authContext.AcquireToken(_serviceUrl, _clientId, _credential).AccessToken);
}
catch (Exception ex)
{
throw ex;
}
return base.SendAsync(request, cancellationToken);
}
}
Я хочу получить способ получить этот заголовок с помощью токена и вставить его в мой код