public async Task <TokenDto> Login(AuthorizationCredentials authorizationCredentials)
        {
            var existingToken = _fileConfigManager.GetFromFile <TokenDto>(ConfigFiles.Token);

            if (existingToken == null)
            {
                var newToken = await _client.Authorize(authorizationCredentials);

                _fileConfigManager.WriteData(newToken.ToPersistenceToken(), ConfigFiles.Token);
                return(newToken);
            }

            if (!existingToken.Expired)
            {
                return(existingToken);
            }

            var refreshedToken = await _client.AuthorizeAsync(new RefreshTokenRequest
            {
                AuthorizationCredentials = authorizationCredentials,
                RefreshToken             = existingToken.Token.RefreshToken
            });

            _fileConfigManager.WriteData(refreshedToken.ToPersistenceToken(), ConfigFiles.Token);

            return(refreshedToken);
        }
Пример #2
0
 private AuthenticationHeaderValue GetBasicAuth(AuthorizationCredentials authorizationCredentials)
 {
     return(new AuthenticationHeaderValue("Basic",
                                          Convert.ToBase64String(
                                              Encoding.ASCII.GetBytes(
                                                  $"{authorizationCredentials.Key}:{authorizationCredentials.Secret}"))));
 }
Пример #3
0
 private HttpClient CreateHttpClient(AuthorizationCredentials authorizationCredentials)
 {
     return(new HttpClient
     {
         DefaultRequestHeaders =
         {
             Authorization = GetBasicAuth(authorizationCredentials)
         }
     });
 }
Пример #4
0
        public async Task <TokenDto> Authorize(AuthorizationCredentials authorizationCredentials, CancellationToken cancellationToken = default)
        {
            var client = CreateHttpClient(authorizationCredentials);

            var timeBeforeRequest = DateTime.UtcNow;

            var response = await client.PostAsync(AuthUrl, new FormUrlEncodedContent(new[]
            {
                new KeyValuePair <string, string>("grant_type", "client_credentials"),
            }), cancellationToken);

            return(await ToToken(response, timeBeforeRequest));
        }