/// <summary> /// Client can convert any S3Request to a SignedHeaderRequest. SignedHeaderRequest can be serialized & sent to App Server where it can be signed with the Secret Key. /// </summary> /// <param name="s3request"></param> /// <returns></returns> public static SignedHeaderRequest BuildSignedHeaderRequest(this S3Request s3request) { var httpRequest = s3request.WebRequest; var authRequest = new SignedHeaderRequest() { // Bucket BucketName = s3request.BucketName, // HTTP Stuff Headers = httpRequest.Headers, Method = httpRequest.Method, ContentType = httpRequest.ContentType, RequestURI = httpRequest.RequestUri.ToString() }; return authRequest; }
/// <summary> /// App Server uses this method to sign a SignedHeaderRequest with the Secret Key. App Server sends SignedHeaderResponse back to Client. /// </summary> /// <param name="service"></param> /// <param name="authRequest"></param> /// <returns></returns> public static SignedHeaderResponse ApproveSignedHeaderRequest(this S3Service service, SignedHeaderRequest authRequest) { // Create matching HTTP Request, so we can authorize for our requestor var httpRequest = (HttpWebRequest)HttpWebRequest.Create(authRequest.RequestURI); httpRequest.Headers.Add(authRequest.Headers); httpRequest.Method = authRequest.Method; httpRequest.ContentType = authRequest.ContentType; // Authorize with Secret Key service.AuthorizeRequest(null, httpRequest, authRequest.BucketName); var authResponse = new SignedHeaderResponse() { Headers = httpRequest.Headers, IsAuthorized = true }; return authResponse; }