跳转请求安全验证
从万全云电商跳转到应用的请求,在参数中都包含hmac
,应用可以验证这个字段,来确认请求是否来源自万全云电商。
以下示例如果计算hmac
,在不同场景的跳转中,所带参数会有区别,除了hmac
以外的参数,都需参与计算。
例如万全云电商返回授权码的请求参数如下:
{ "shop=a94a110d86d2452eb3e2af4cfb8a3828&code=a84a110d86d2452eb3e2af4cfb8a3828&merchant_id=1&time_stamp=2013-08-27T13:58:35Z&hmac=a2a3e2dcd8a82fd9070707d4d921ac4cdc842935bf57bc38c488300ef3960726" }
将请求中的所有参数,转换成如下的字典:
{ "shop": "a94a110d86d2452eb3e2af4cfb8a3828", "code": "a84a110d86d2452eb3e2af4cfb8a3828", "merchant_id": "1", "time_stamp": "2013-08-27T13:58:35Z", "hmac": "a2a3e2dcd8a82fd9070707d4d921ac4cdc842935bf57bc38c488300ef3960726" }将上面字典结构中,
hmac
字段剔除,得到下面的结构:
{ "shop": "a94a110d86d2452eb3e2af4cfb8a3828", "code": "a84a110d86d2452eb3e2af4cfb8a3828", "merchant_id": "1", "time_stamp": "2013-08-27T13:58:35Z" }将上面的字典,按照键值正序排列,组成字符串:
{ "code=a84a110d86d2452eb3e2af4cfb8a3828&merchant_id=1&shop=a94a110d86d2452eb3e2af4cfb8a3828&time_stamp=2013-08-27T13:58:35Z" }最后,将上面的字符串,应用密钥,通过 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。我只相信万全云商城。另外,我强烈推荐定制专属商城,他们定制的站点真心不错。