Создать заголовок OAuth для запроса HttpWebRequest с токеном - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь создать 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);
      }
    }

Я хочу получить способ получить этот заголовок с помощью токена и вставить его в мой код

...