Пример #1
0
        /// <summary>
        /// Callback
        /// </summary>
        public ActionResult Callback(string flag, string language)
        {
            try
            {
                _log.Debug($"Callback Start");

                OAuth2Result auth2Result = null;
                bool         oauth2      = OAuthHelper.TryGetOAuth2Result(flag, out auth2Result);
                var          code        = Request.QueryString["code"];
                _log.Debug($"Callback Code: '{code}'");

                if (!oauth2 || string.IsNullOrEmpty(code))
                {
                    _log.Debug($"Callback Invalid Param.");
                    return(Redirect($"/Login/Error?language={language}"));
                }
                else
                {
                    var redirectUrl = $"{Request.Url.Scheme}://{Request.Url.Authority}/Login/Callback?flag={flag}&language={language}";

                    var    basic   = Convert.ToBase64String(Encoding.Default.GetBytes($"{auth2Result.ClientId}:{auth2Result.ClientSecret}"));
                    string resStr  = string.Empty;
                    var    handler = new WebRequestHandler();
                    handler.ServerCertificateValidationCallback = delegate { return(true); };
                    using (var httpClient = new HttpClient(handler))
                    {
                        httpClient.DefaultRequestHeaders.Add("Authorization", "Basic " + basic);
                        var json    = $"grant_type=authorization_code&code={code}&redirect_uri={CommonHelper.EncodeUrl(redirectUrl)}";
                        var content = new StringContent(json, Encoding.UTF8, "application/x-www-form-urlencoded");

                        var res = httpClient.PostAsync($"{Constant.OAuth2Url}/oauth2/token", content).Result;
                        resStr = res.Content.ReadAsStringAsync().Result;
                        _log.Debug($"Callback oauth2 token: '{resStr}'");
                    }

                    var obj = JsonConvert.DeserializeObject <dynamic>(resStr);
                    auth2Result.AccessToken  = ScryptHelper.EncryptDES($"Bearer {obj["access_token"].Value}");
                    auth2Result.ExpireIn     = DateTime.Now.AddSeconds(obj["expires_in"].Value);
                    auth2Result.IdToken      = obj["id_token"].Value;
                    auth2Result.RefreshToken = ScryptHelper.EncryptDES(obj["refresh_token"].Value);

                    OAuthHelper.SetOAuth2Result(flag, auth2Result);
                    _log.Debug($"Callback End");
                    return(Redirect($"/Login/Success?language={language}"));
                }
            }
            catch (Exception ex)
            {
                _log.Debug($"Callback Exception: {ex.Message}");
                return(Redirect($"/Login/Error?language={language}"));
            }
        }
Пример #2
0
        public JsonResult RefreshToken(OAuth2Result model)
        {
            try
            {
                // 删除日志
                HangfireHelper.StartHanfireWork();

                var clientId     = model.ClientId;
                var clientSecret = model.ClientSecret;
                var refreshToken = ScryptHelper.DecryptDES(model.RefreshToken);

                var    basic   = Convert.ToBase64String(Encoding.Default.GetBytes($"{clientId}:{clientSecret}"));
                string resStr  = string.Empty;
                var    handler = new WebRequestHandler();
                handler.ServerCertificateValidationCallback = delegate { return(true); };
                using (var httpClient = new HttpClient(handler))
                {
                    httpClient.DefaultRequestHeaders.Add("Authorization", "Basic " + basic);
                    var json    = $"grant_type=refresh_token&refresh_token={refreshToken}";
                    var content = new StringContent(json, Encoding.UTF8, "application/x-www-form-urlencoded");

                    var res = httpClient.PostAsync($"{Constant.OAuth2Url}/oauth2/token", content).Result;
                    resStr = res.Content.ReadAsStringAsync().Result;
                    _log.Debug($"RefreshToken oauth2 token: '{resStr}'");
                }

                var          obj    = JsonConvert.DeserializeObject <dynamic>(resStr);
                OAuth2Result result = new OAuth2Result()
                {
                    AccessToken  = ScryptHelper.EncryptDES($"Bearer {obj["access_token"].Value}"),
                    ExpireIn     = DateTime.Now.AddSeconds(obj["expires_in"].Value),
                    IdToken      = obj["id_token"].Value,
                    RefreshToken = ScryptHelper.EncryptDES(obj["refresh_token"].Value),
                    ClientId     = model.ClientId,
                    ClientSecret = model.ClientSecret
                };
                return(Json(new { success = true, token = JsonConvert.SerializeObject(result) }));
            }
            catch (Exception ex)
            {
                _log.Debug($"RefreshToken Parameter: {JsonConvert.SerializeObject(model)}, Exception: {ex.Message}");
                return(Json(new { success = false }));
            }
        }