sdk/Util/OssRequestSignerV1.cs (51 lines of code) (raw):

/* * Copyright (C) Alibaba Cloud Computing * All rights reserved. * */ using System; using Aliyun.OSS.Common.Authentication; using Aliyun.OSS.Common.Communication; using Aliyun.OSS.Util; namespace Aliyun.OSS.Util { internal class OssRequestSignerV1 : OssRequestSigner { public OssRequestSignerV1() { } public override void Sign(ServiceRequest request, ICredentials credentials) { var accessKeyId = credentials.AccessKeyId; var accessKeySecret = credentials.AccessKeySecret; var httpMethod = request.Method.ToString().ToUpperInvariant(); // Because the resource path to is different from the one in the request uri, // can't use ServiceRequest.ResourcePath here. if (!string.IsNullOrEmpty(accessKeySecret)) { if (credentials.UseToken) request.Headers[HttpHeaders.SecurityToken] = credentials.SecurityToken; var resourcePath = getResourcePath(); var canonicalString = SignUtils.BuildCanonicalString(httpMethod, resourcePath, request); var signature = ServiceSignature.Create().ComputeSignature(accessKeySecret, canonicalString); // request could be retried and the Authorization header may exist already. // Fix for #OSS-1579/11349300 request.Headers[HttpHeaders.Authorization] = "OSS " + accessKeyId + ":" + signature; } } public override void PreSign(ServiceRequest request, SigningContext signingContext) { if (signingContext == null || signingContext.Expiration == null || IsAnonymousCredentials(signingContext.Credentials)) return; // Credentials information var credentials = signingContext.Credentials; if (credentials.UseToken) { request.Parameters.Add(RequestParameters.SECURITY_TOKEN, credentials.SecurityToken); } var canonicalResource = "/" + (Bucket ?? "") + ((Key != null ? "/" + Key : "")); var httpMethod = request.Method.ToString().ToUpperInvariant(); var expires = DateUtils.FormatUnixTime(signingContext.Expiration); request.Headers.Add(HttpHeaders.Date, expires); var canonicalString = SignUtils.BuildCanonicalString(httpMethod, canonicalResource, request/*, expires*/); var signature = ServiceSignature.Create().ComputeSignature(credentials.AccessKeySecret, canonicalString); //Console.WriteLine("canonicalString:{0}\n", canonicalString); //Console.WriteLine("signature:{0}\n", signature); request.Parameters[RequestParameters.EXPIRES] = expires; request.Parameters[RequestParameters.OSS_ACCESS_KEY_ID] = credentials.AccessKeyId; request.Parameters[RequestParameters.SIGNATURE] = signature; } } }