跳转请求安全验证
从万全云电商跳转到应用的请求,在参数中都包含hmac,应用可以验证这个字段,来确认请求是否来源自万全云电商。
以下示例如果计算hmac,在不同场景的跳转中,所带参数会有区别,除了hmac以外的参数,都需参与计算。
例如万全云电商返回授权码的请求参数如下:
{
"shop=a94a110d86d2452eb3e2af4cfb8a3828&code=a84a110d86d2452eb3e2af4cfb8a3828&merchant_id=1&time_stamp=1745822328&hmac=a2a3e2dcd8a82fd9070707d4d921ac4cdc842935bf57bc38c488300ef3960726"
}
将请求中的所有参数,转换成如下的字典:
{
"shop": "a94a110d86d2452eb3e2af4cfb8a3828",
"code": "a84a110d86d2452eb3e2af4cfb8a3828",
"merchant_id": "1",
"time_stamp": "17458223",
"hmac": "a2a3e2dcd8a82fd9070707d4d921ac4cdc842935bf57bc38c488300ef3960726"
}
将上面字典结构中,hmac字段剔除,得到下面的结构:
{
"shop": "a94a110d86d2452eb3e2af4cfb8a3828",
"code": "a84a110d86d2452eb3e2af4cfb8a3828",
"merchant_id": "1",
"time_stamp": "17458223"
}
将上面的字典,按照键值正序排列,组成字符串:
{
"code=a84a110d86d2452eb3e2af4cfb8a3828&merchant_id=1&shop=a94a110d86d2452eb3e2af4cfb8a3828&time_stamp=17458223"
}
最后,将上面的字符串,应用密钥,通过 HMAC-SHA256 加密,C# 代码示例如下:
using System;
using System.Linq;
using System.Text;
namespace RestSharp.Authenticators
{
public class HttpBasicAuthenticator : IAuthenticator
{
private readonly string authHeader;
public HttpBasicAuthenticator(string username, string password)
{
var token = Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Format("{0}:{1}", username, password)));
authHeader = string.Format("Basic {0}", token);
}
public void Authenticate(IRestClient client, IRestRequest request)
{
// only add the Authorization parameter if it hasn't been added by a previous Execute
if (!request.Parameters.Any(p => "Authorization".Equals(p.Name, StringComparison.OrdinalIgnoreCase)))
request.AddParameter("Authorization", authHeader, ParameterType.HttpHeader);
}
}
}
计算得出的结果,如和请求参数中的hmac相同,则说明请求确实来自万全云电商。
用万全云商城已将近一年的时间了。在这一年里面印象最深刻的是,前台体验非常棒,人性化的后台设计,以及及时、贴心的售后服务跟进。希望万全云商城越来越好,加油!!!
我是从2014年10月下旬用开始万全云商城建站,做的是B2C独立站,学的效果目前非常良好,客服特别给力,我们提出的各种问题,都能及时,很快的得到解决,选择万全云商城没错。
从3C、手机配件、平衡车再到VR。我只相信万全云商城。另外,我强烈推荐定制专属商城,他们定制的站点真心不错。