private static HttpRequestMessage CreateLtiOutcomesRequest(imsx_POXEnvelopeType imsxEnvelope, string url, string consumerKey, string consumerSecret) { var webRequest = new HttpRequestMessage(HttpMethod.Post, url); var parameters = new NameValueCollection(); parameters.AddParameter(OAuthConstants.ConsumerKeyParameter, consumerKey); parameters.AddParameter(OAuthConstants.NonceParameter, Guid.NewGuid().ToString()); parameters.AddParameter(OAuthConstants.SignatureMethodParameter, OAuthConstants.SignatureMethodHmacSha1); parameters.AddParameter(OAuthConstants.VersionParameter, OAuthConstants.Version10); // Calculate the timestamp var ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); var timestamp = Convert.ToInt64(ts.TotalSeconds); parameters.AddParameter(OAuthConstants.TimestampParameter, timestamp); // Calculate the body hash var ms = new MemoryStream(); using (var sha1 = PlatformSpecific.GetSha1Provider()) { ImsxRequestSerializer.Serialize(ms, imsxEnvelope); ms.Position = 0; webRequest.Content = new StreamContent(ms); webRequest.Content.Headers.ContentType = HttpContentType.Xml; var hash = sha1.ComputeHash(ms.ToArray()); var hash64 = Convert.ToBase64String(hash); parameters.AddParameter(OAuthConstants.BodyHashParameter, hash64); } // Calculate the signature var signature = OAuthUtility.GenerateSignature(webRequest.Method.Method.ToUpper(), webRequest.RequestUri, parameters, consumerSecret); parameters.AddParameter(OAuthConstants.SignatureParameter, signature); // Build the Authorization header var authorization = new StringBuilder(OAuthConstants.AuthScheme).Append(" "); foreach (var key in parameters.AllKeys) { authorization.AppendFormat("{0}=\"{1}\",", key, WebUtility.UrlEncode(parameters[key])); } webRequest.Headers.Add(OAuthConstants.AuthorizationHeader, authorization.ToString(0, authorization.Length - 1)); return(webRequest); }
private static void SignRequest(HttpRequestMessage request, byte[] body, string consumerKey, string consumerSecret) { if (body == null) { body = new byte[0]; } if (body.Length > 0 && request.Content.Headers.ContentLength != body.Length) { throw new ArgumentException("body length does not match request.ContentLength", "body"); } var parameters = new NameValueCollection(); parameters.AddParameter(OAuthConstants.ConsumerKeyParameter, consumerKey); parameters.AddParameter(OAuthConstants.NonceParameter, Guid.NewGuid().ToString()); parameters.AddParameter(OAuthConstants.SignatureMethodParameter, OAuthConstants.SignatureMethodHmacSha1); parameters.AddParameter(OAuthConstants.VersionParameter, OAuthConstants.Version10); // Calculate the timestamp var ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); var timestamp = Convert.ToInt64(ts.TotalSeconds); parameters.AddParameter(OAuthConstants.TimestampParameter, timestamp); // Calculate the body hash using (var sha1 = PlatformSpecific.GetSha1Provider()) { var hash = sha1.ComputeHash(body); var hash64 = Convert.ToBase64String(hash); parameters.AddParameter(OAuthConstants.BodyHashParameter, hash64); } // Calculate the signature var signature = OAuthUtility.GenerateSignature(request.Method.Method.ToUpper(), request.RequestUri, parameters, consumerSecret); parameters.AddParameter(OAuthConstants.SignatureParameter, signature); // Build the Authorization header var authorization = new StringBuilder(OAuthConstants.AuthScheme).Append(" "); foreach (var key in parameters.AllKeys) { authorization.AppendFormat("{0}=\"{1}\",", key, WebUtility.UrlEncode(parameters[key])); } request.Headers.Add(OAuthConstants.AuthorizationHeader, authorization.ToString(0, authorization.Length - 1)); }