/// <summary> /// 获取添加密钥签名后的查询字符串。 /// </summary> /// <param name="uri"></param> /// <param name="accessKeyStorage">AccessKeyId / AccessKeySecret 存储器。</param> /// <param name="algorithmName">签名 HMAC 哈希算法名称。</param> /// <returns></returns> public static string GetKeyedSignedQueryString(Uri uri, IAccessKeyStorage accessKeyStorage, string algorithmName) { if (accessKeyStorage == null) { throw new ArgumentNullException(nameof(accessKeyStorage)); } IDictionary <string, string> sortedQueryStrings = GetSortedQueries(uri); if (!sortedQueryStrings.ContainsKey(QUERY_NAME_ACCESSKEYID)) { throw new InvalidOperationException("AccessKeyId field is not found."); } string accessKeyId = sortedQueryStrings[QUERY_NAME_ACCESSKEYID]; string accessKeySecret = accessKeyStorage.GetAccessKeySecret(accessKeyId); return(GetKeyedSignedQueryString(uri, accessKeyId, accessKeySecret, algorithmName)); }
public static IHttpClientBuilder UseKeyedQuerySignatureInterceptor(this IHttpClientBuilder httpClientBuilder, IAccessKeyStorage accessKeyStorage, string algorithmName = "HMACSHA1") { return(httpClientBuilder.AddRequestInterceptor(request => { request.RequestUri = UriHelper.GetRelativeUri(request.RequestUri, string.Empty, (builder) => { builder.Query = QuerySignatureHelper.GetKeyedSignedQueryString(builder.Uri, accessKeyStorage, algorithmName); }); })); }