我想在Asp.Net MVC 3上实现类似于HMAC-SHA签名算法的REST API服务,类似于AWS。是否有生成用户公钥和密钥的最佳实践?请注意,保留HTML标记,不要提供解释。
MySvc-Clientid: ServiceId
MySvc-Signature: Signature
MySvc-Timestamp: TimeStamp
使用.NET/C#生成客户端密钥,您可以创建一个方法,生成Rijndael密钥的字符串表示形式,可以传递给客户端。以下是一个示例。
public string CreateServiceClientKey()
{
SymmetricAlgorithm symAlg = SymmetricAlgorithm.Create("Rijndael");
symAlg.KeySize = 128;
byte[] key = symAlg.Key;
StringBuilder sb = new StringBuilder(key.Length * 2);
foreach (byte b in key)
{
sb.AppendFormat("{0:x2}", b);
}
return sb.ToString();
}
public interface IStringToSignBuilder
{
string Build(ServiceSignatureDetails details);
}
/// <summary>
/// Class is a data entity that defines the specific details
/// required for a Service Signature
/// </summary>
public class ServiceSignatureDetails
{
public string HttpMethod { get; set; }
public string ServiceClientId { get; set; }
public string ServiceClientKey { get; set; }
public string UriAbsolutePath { get; set; }
public string DomainName { get; set; }
public string CompanyName { get; set; }
public string DateTimeStamp { get; set; }
public string Data { get; set; }
}
您可以构建特定的IStringToSignBuilder
实现以满足您的需求,并相应地将正确的实现注入到您的代码中。