Beispiel #1
0
        private string GetAuthorizationUri()
        {
            var uriHost = $"{Request.Scheme}://{Request.Host}/{Request.PathBase}".TrimEnd('/');
            var dic     = new SortedDictionary <string, string>
            {
                { "PartnerKey", this._partnerKey },
                { "RequestTime", DateTime.Now.ToString("yyyyMMddHHmmss") },
                { "SignType", "SHA1" },
                { "AppKey", this._appKey.ToString() },
                { "AuthState", this._authState },
                { "ForceReAuth", "1" },
                { "RedirectUri", $"{uriHost}/Authorized/Authorized" }
            };
            var signData = SignatureHelper.GetSignData(this._partnerSecret, dic, dic["SignType"]);

            dic.Add("SignData", signData);
            var tmp = new StringBuilder();

            tmp.Append(this._comAuthorizationUrl);
            tmp.Append('?');
            foreach (var kv in dic)
            {
                tmp.Append(kv.Key);
                tmp.Append('=');
                tmp.Append(Uri.EscapeDataString(kv.Value));
                tmp.Append('&');
            }
            tmp.Remove(tmp.Length - 1, 1);
            return(tmp.ToString());
        }
Beispiel #2
0
        public async Task <ActionResult> Callback(string code, string state, string error, string error_description)
        {
            var authed = false;

            if (this.ValidAuthState(state, out long id, out string authState))
            {
                var order = await this._authOrderAppService.Get(new EntityDto <long>(id));

                if (order != null && order.AuthState == authState && string.IsNullOrWhiteSpace(order.TaobaoCode))
                {
                    if (!string.IsNullOrWhiteSpace(code))
                    {
                        authed                 = true;
                        order.TaobaoCode       = code;
                        order.Error            = string.Empty;
                        order.ErrorDescription = string.Empty;
                    }
                    else if (!string.IsNullOrWhiteSpace(error))
                    {
                        order.Error            = error;
                        order.ErrorDescription = error_description;
                    }
                    await this._authOrderAppService.Update(order);

                    if (authed && !string.IsNullOrWhiteSpace(order.RedirectUri))
                    {
                        var partner = await this._partnerAppService.Get(new EntityDto <long>(order.PartnerId)).ConfigureAwait(false);

                        var dic = new SortedDictionary <string, string>()
                        {
                            { "PartnerKey", partner.PartnerKey },
                            { "AuthState", order.AuthState },
                            { "AppKey", order.AppKey.ToString() },
                            { "TaobaoCode", order.TaobaoCode },
                            { "RequestTime", DateTime.Now.ToString("yyyyMMddHHmmss") },
                            { "SignType", "SHA1" },
                        };
                        var signData = SignatureHelper.GetSignData(partner.SecretKey, dic, "SHA1");
                        dic.Add("SignData", signData);
                        var queryString = QueryString.Create(dic);
                        return(Redirect($"{order.RedirectUri}{queryString}"));
                        //回调页面可以直接在后端通过TopSdk中的TopAuthTokenCreateRequest来获取AccessToken
                        //code只能被使用一次,且时限较短
                    }
                }
            }
            ViewBag.Message = authed ? L("AreadyAuthed") : L("AuthRefused");
            return(View());
        }
Beispiel #3
0
 public Task <string> GetSignData(Partner partner, SortedDictionary <string, string> args, string algorithm = "SHA1", params string[] removeKeys)
 {
     return(Task.FromResult(SignatureHelper.GetSignData(partner.SecretKey, args, algorithm, null, null, "UTF-8", removeKeys)));
 }