TrAuthenticator.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using RestSharp;
  2. using RestSharp.Authenticators;
  3. namespace Tr.Sdk;
  4. public class TrAuthenticator : AuthenticatorBase
  5. {
  6. private readonly string _tokenKey = "X-Auth-Token";
  7. private readonly string _baseUrl;
  8. private readonly string _apiKey;
  9. private readonly string _apiSecret;
  10. public TrAuthenticator(string baseUrl, string apiKey, string apiSecret) : base("")
  11. {
  12. _baseUrl = baseUrl;
  13. _apiKey = apiKey;
  14. _apiSecret = apiSecret;
  15. }
  16. protected override async ValueTask<Parameter> GetAuthenticationParameter(string accessToken)
  17. {
  18. if (string.IsNullOrEmpty(Token))
  19. {
  20. Token = await GetTokenAsync(default);
  21. }
  22. return new HeaderParameter(_tokenKey, Token);
  23. }
  24. public async Task<string> GetTokenAsync(CancellationToken cancellationToken)
  25. {
  26. var options = new RestClientOptions(_baseUrl);
  27. using var client = new RestClient(options);
  28. var request = new RestRequest("api/login")
  29. .AddObject(new { username = _apiKey, password = _apiSecret });
  30. try
  31. {
  32. var response = await client.GetAsync(request, cancellationToken);
  33. if (!response.IsSuccessful)
  34. throw new HttpRequestException(
  35. $"呼叫中心服务授权请求失败,HttpCode: {response.StatusCode}, Error: {response.ErrorMessage}");
  36. var token = response.Headers?.FirstOrDefault(d => d.Name == _tokenKey);
  37. if (token is null)
  38. throw new HttpRequestException("呼叫中心服务授权失败");
  39. if (token?.Value is null)
  40. throw new HttpRequestException("呼叫中心token无效");
  41. return token.Value.ToString();
  42. }
  43. catch (Exception e)
  44. {
  45. throw new HttpRequestException($"呼叫中心授权请求失败,Error: {e.Message}");
  46. }
  47. }
  48. }