/// <summary> /// 从服务端获取身份令牌 /// </summary> /// <returns></returns> public string GetToken(string clienid, string username, string password, string appSecret) { try { IdentityCheckEntity identity = new IdentityCheckEntity() { clienid = clienid, nonce = new Random().NextDouble().ToString(), timestamp = Convert.ToInt64((DateTime.UtcNow - _unixEpoch).TotalSeconds).ToString(), username = username, password = password, }; identity.signature = SignatureString(appSecret, identity.timestamp, identity.nonce); HttpItem item = new HttpItem() { URL = "http://localhost:8375/api/token/Get", //URL 必需项 Method = "post", //URL 可选项 默认为Get IsToLower = false, //得到的HTML代码是否转成小写 可选项默认转小写 ContentType = "application/json", Accept = "application/json", Postdata = JsonHelper.Serialize(identity) }; var result = new HttpHelper().GetHtml(item); if (result.StatusCode != HttpStatusCode.OK) { Console.WriteLine(string.Format("获取Token失败:请求参数->clienid:{0};nonce:{1};timestamp:{2};username:{3};password:{4};appSecret:{5};signature:{6},错误内容:{7}", identity.clienid, identity.nonce, identity.timestamp, identity.username, identity.password, identity.signature, result.Html)); } return(result.Html); } catch (Exception ex) { Console.WriteLine(string.Format("请求异常->获取Token失败"), ex); throw ex; } }
/// <summary> /// 获取通讯令牌 /// </summary> /// <param name="Eitity"></param> /// <returns></returns> public TokenInfoEntity GetToken(IdentityCheckEntity Eitity) { var Eitityinfo = new TokenInfoEntity(); Eitityinfo.errmsg = "数据完整性检查不通过"; Eitityinfo.success = false; if (Eitity != null) { var Thirdparty = this.thirdPartys.First(o => o.clientId == Eitity.clienid); if (Thirdparty == null) { return(Eitityinfo); //第三方请求对象不存在,返回请求 } //根据入参获取身份签名,并进行身份签名对比 string tmpStr = SignatureString(Thirdparty.clientSecret, Eitity.timestamp, Eitity.nonce); if (tmpStr != Eitity.signature.ToLower()) { return(Eitityinfo); //签名验证不通过,返回请求 } DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(_unixEpoch); long lTime = long.Parse(Eitity.timestamp + "0000000"); TimeSpan toNow = new TimeSpan(lTime); dtStart = dtStart.Add(toNow); double minutes = DateTime.Now.Subtract(dtStart).TotalMinutes; if (minutes > this.timspanExpiredMinutes) { Eitityinfo.errmsg = "签名时间戳失效"; Eitityinfo.success = false; return(Eitityinfo); } if (Eitity.username.ToLower() != Thirdparty.userName.ToLower() || Eitity.password != Thirdparty.passWord) { Eitityinfo.success = false; Eitityinfo.errmsg = "用户名或密码错误"; return(Eitityinfo); } TimeSpan t = (DateTime.UtcNow - _unixEpoch); int timestamp = (int)t.TotalDays; var tokenload = new Dictionary <string, object> { { "iss", Eitity.clienid }, //issuer 请求对象 { "iat", timestamp }, //时间戳,当前单位天 { "username", Thirdparty.userName }, //请求账户名 }; Eitityinfo.accesstoken = JsonWebToken.Encode(tokenload, this.sharedKey, JwtHashAlgorithm.HS256); Eitityinfo.expiresin = this.tokenExpiredDay * 24 * 3600; Eitityinfo.errmsg = ""; Eitityinfo.success = true; } return(Eitityinfo); }
public TokenInfoEntity Get(IdentityCheckEntity entity) { var service = new UzaiSecurityVerificationLogicService(); return(service.GetToken(entity)); }