示例#1
0
 public ActionResult CheckWxOpenSignature(string code, string rawData, string signature)
 {
     try
     {
         var jsonResult   = SnsApi.JsCode2Json(WxOpenAppId, WxOpenAppSecret, code);
         var checkSuccess = EncryptHelper.CheckSignature(code, rawData, signature);
         return(Json(new { success = checkSuccess, msg = checkSuccess ? "签名校验成功" : "签名校验失败" }));
     }
     catch (Exception ex)
     {
         return(Json(new { success = false, msg = ex.Message }));
     }
 }
示例#2
0
        public async Task <IActionResult> OnLogin(WxLoginRequest req)
        {
            var    appId     = _wxSettings.AppID;
            var    appSecret = _wxSettings.AppSecret;
            string urlFormat = "/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type={3}";
            var    url       = string.Format(urlFormat, appId, appSecret, req.code, "authorization_code");
            var    request   = new HttpRequestMessage(HttpMethod.Get, url);

            var client   = _clientFactory.CreateClient("wx");
            var response = await client.SendAsync(request);

            if (!response.IsSuccessStatusCode)
            {
                DoLog($"{url}未响应", ActionLogTypesEnum.Exception);
                return(BadRequest("系统繁忙"));
            }

            var json = response.Content.ReadAsStringAsync().Result;
            var res  = JsonConvert.DeserializeObject <JsCode2JsonResult>(json);

            if (res.errcode != 0)
            {
                return(BadRequest(res.errcodeName));
            }

            var sessionKey = res.session_key;

            if (!EncryptHelper.CheckSignature(sessionKey, req.rawData, req.signature))
            {
                return(BadRequest("签名校验失败"));
            }

            var openId = res.openid;
            var user   = CreateVM <LoginVM>().DoLogin(openId);

            if (user != null)
            {
                var token = CreateJwtToken(user);
                return(Ok(token));
            }

            var decodedUser = EncryptHelper.DecodeUserInfoBySessionKey(sessionKey, req.encryptedData, req.iv);

            if (decodedUser != null && decodedUser.CheckWatermark(appId))
            {
                var wxUser = CreateVM <LoginVM>().DoAdd(decodedUser);
                var token  = CreateJwtToken(wxUser);
                return(Ok(token));
            }
            return(BadRequest("水印验证不通过"));
        }
示例#3
0
        public void CheckSignatureTest()
        {
            //储存Session
            var sessionId  = "7f3f7489cb904d20bd4b5e9443f1bcab";
            var rawData    = "{\"nickName\":\"苏震巍\",\"gender\":1,\"language\":\"zh_CN\",\"city\":\"Suzhou\",\"province\":\"Jiangsu\",\"country\":\"CN\",\"avatarUrl\":\"http://wx.qlogo.cn/mmopen/vi_32/PiajxSqBRaEKXyjX4N6I5Vx1aeiaBeJ2iaTLy15n0HgvjNbWEpKA3ZbdgXkOhWK7OH8iar3iaLxsZia5Ha4DnRPlMerw/0\"}";
            var sessionKey = "lEIWEBVlmAj/Ng0t54iahA==";
            var unionId    = "";

            SessionContainer.UpdateSession(sessionId, "openId", sessionKey, unionId);

            var sessionBag = SessionContainer.GetSession(sessionId);

            Assert.IsNotNull(sessionBag);
            Assert.AreEqual(sessionKey, sessionBag.SessionKey);

            var compareSignature = "1149a88c75125de3146040c90d7bcc4b2a564a34";
            var result           = EncryptHelper.CheckSignature(sessionId, rawData, compareSignature);

            Assert.IsTrue(result);
        }
示例#4
0
        public object Do_CheckSignature(object param)
        {
            CheckSignatureParam checkSignatureParam = JsonConvert.DeserializeObject <CheckSignatureParam>(param.ToString());

            if (checkSignatureParam == null)
            {
                throw new ApiException(CodeMessage.InvalidParam, "InvalidParam");
            }

            var checkSuccess = EncryptHelper.CheckSignature(checkSignatureParam.token, checkSignatureParam.rawData, checkSignatureParam.signature);

            if (checkSuccess)
            {
                return(new { check = checkSuccess });
            }
            else
            {
                throw new ApiException(CodeMessage.SenparcCode, "校验失败");
            }
        }
        public async Task <IActionResult> CheckWxOpenSignature([FromBody] JObject param)
        {
            if (!await _authorizationService.AuthorizeAsync(User, MiniProgramPermission.WeCharMiniProgramAccess))
            {
                return(Unauthorized(new { success = false, msg = "未授权访问" }));
            }
            try
            {
                var sessionBag = await SessionContainer.GetSessionAsync(param["sessionId"].Value <string>());

                if (sessionBag == null)
                {
                    return(Json(new { success = false, msg = "请先登录!" }));
                }
                var checkSuccess = EncryptHelper.CheckSignature(sessionBag.Key, param["rawData"].Value <string>(), param["signature"].Value <string>());
                return(Json(new { success = checkSuccess, msg = checkSuccess ? "签名校验成功" : "签名校验失败" }));
            }
            catch (Exception ex)
            {
                return(Json(new { success = false, msg = ex.Message }));
            }
        }