使用C#向AWS IAM发出(POST)签名请求
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用C#向AWS IAM发出(POST)签名请求,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3193字,纯文字阅读大概需要5分钟。
内容图文
![使用C#向AWS IAM发出(POST)签名请求](/upload/InfoBanner/zyjiaocheng/793/089c8e9b32c248b8a26d5d26f3af66eb.jpg)
我正在尝试遵循AWS文档Signing AWS requests中给出的示例,并在C#中进行ListUsers调用.我已经到达产生签名的最后阶段(即准备提交在signature-4 request examples给出的签名请求).但我下面粘贴的代码在提交时会抛出“错误请求”异常.
static void submitSignedRequest(string my_access_key, string my_secret_key, string signature, string curr_utc_date_string, string curr_utc_datetime_string)
{
string url = "https://iam.amazonaws.com/?Action=ListUsers&Version=2010-05-08&X-Amz-Algorithm=AWS4-HMAC-SHA256&" +
"X-Amz-Credential=" + my_access_key + "/" + curr_utc_date_string + "/us-east-1/iam/aws4_request&X-Amz-Date=" + curr_utc_datetime_string +
"&X-Amz-SignedHeaders=content-type;host;x-amz-date&X-Amz-Signature=" + signature;
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.Host = "iam.amazonaws.com";
request.ContentType = "application/x-www-form-urlencoded; charset=utf-8";
WebHeaderCollection headers = (request as HttpWebRequest).Headers;
headers.Add("Authorization", "AWS4-HMAC-SHA256 Credential=" + my_access_key +"/" + curr_utc_date_string + "/us-east-1/iam/aws4_request, " +
"SignedHeaders=content-type;host;x-amz-date, Signature=" + signature);
headers.Add("x-amz-date", curr_utc_datetime_string);
HttpWebResponse response;
try
{
response = request.GetResponse() as HttpWebResponse;
}
catch (Exception ex)
{
Console.WriteLine("Error Message: " + ex.Message);
}
}
我得到的输出是:
Error Message: The remote server returned an error: (400) Bad Request.
有人可以帮助我在这里做错了吗?
编辑:
我终于自己解决了这个问题.我不得不把它变成下面的. (答案是针对RDS的,但我相信可以看出差异是什么).
string url = "https://rds.us-west-1.amazonaws.com";
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
// ASCIIEncoding encoding = new ASCIIEncoding();
string postData = "Action=DescribeDBInstances&Version=2013-09-09";
byte[] data = Encoding.UTF8.GetBytes(postData);
request.Method = "POST";
request.Host = "rds.us-west-1.amazonaws.com";
request.ContentType = "application/x-www-form-urlencoded; charset=utf-8";
// request.ContentLength = data.Length;
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
WebHeaderCollection headers = (request as HttpWebRequest).Headers;
request.Headers.Add("Authorization", "AWS4-HMAC-SHA256 Credential=" + my_access_key + "/" + curr_utc_date_string + "/us-west-1/rds/aws4_request, " +
"SignedHeaders=content-type;host;x-amz-date, Signature=" + signature);
request.Headers.Add("x-amz-date", curr_utc_datetime_string);
解决方法:
Can some one help me what wrong I am doing here?
也许,但我强烈建议一起跳过这一努力,只需将优秀的AWS SDK for .NET用于所有AWS API交互,因为它确实有助于通过为包括Amazon S3,Amazon在内的许多AWS服务提供.NET API来降低编码的复杂性EC2,DynamoDB等.
>我在AWS工作多年,在各种环境中使用各种语言,在没有他们提供的multitude of SDKs之一的帮助下,我甚至从未打算使用他们的API,其中大多数都提供高级工具除了首先使用各自语言使用API??之外,还可以轻松完成.
但如果您真的需要或想要自己动手,我建议您只需查看这些SDK的源代码,这些都是available at GitHub,包括AWS SDK for .NET的源代码 – 关于手头的问题,您可能希望例如,开始研究AWS4Signer.cs.
>请注意,AWS刚刚发布了经过大幅改进的版本2,详见GA Release of AWS SDK for .NET Version 2.
内容总结
以上是互联网集市为您收集整理的使用C#向AWS IAM发出(POST)签名请求全部内容,希望文章能够帮你解决使用C#向AWS IAM发出(POST)签名请求所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。