public void WaitLogin()
        {
            var controller = new LoginController();

            string       flag         = "abc1234567890";
            OAuth2Result oAuth2Result = new OAuth2Result()
            {
                AccessToken  = "access_token",
                ClientId     = "client_id",
                ClientSecret = "client_secret",
                ExpireIn     = DateTime.Now.AddHours(-1),
                IdToken      = "id_token",
                RefreshToken = "refresh_token"
            };

            OAuthHelper.OAuth2Results[flag] = oAuth2Result;

            JsonResult result = controller.WaitLogin(flag);

            Assert.IsNotNull(result.Data);

            JsonResult result2 = controller.WaitLogin("abc123456789");

            Assert.IsNotNull(result2.Data);
        }
Esempio n. 2
0
 /// <summary>
 /// 获取登录信息
 /// </summary>
 /// <returns></returns>
 public static bool TryGetOAuth2Result(string flag, out OAuth2Result result)
 {
     lock (OAuth2Results)
     {
         if (OAuth2Results.TryGetValue(flag, out result))
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 3
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}"));
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 设置登录信息(设置其他NLB)
        /// </summary>
        public static void SetOAuth2Result(string flag, OAuth2Result result)
        {
            SetOAuth2ResultWithOutNLB(flag, result);

            // Set Other NLB
            if (!string.IsNullOrEmpty(Constant.OtherNLBUrls))
            {
                System.Threading.Tasks.Task.Run(() =>
                {
                    SetOtherNLBResults(flag, result);
                });
            }
        }
Esempio n. 5
0
 /// <summary>
 /// 设置登录信息
 /// </summary>
 public static void SetOAuth2ResultWithOutNLB(string flag, OAuth2Result result)
 {
     lock (OAuth2Results)
     {
         RemoveExpireResult();
         if (result == null)
         {
             OAuth2Results.Remove(flag);
         }
         else
         {
             OAuth2Results[flag] = result;
         }
     }
 }
        public void RefreshToken()
        {
            var controller = new LoginController();
            var Result     = new OAuth2Result()
            {
                AccessToken  = "AccessToken",
                ClientId     = "ClientId",
                ClientSecret = "ClientSecret",
                ExpireIn     = Convert.ToDateTime("2020-09-09 09:00:00"),
                IdToken      = "IdToken",
                RefreshToken = "RefreshToken"
            };
            JsonResult result = controller.RefreshToken(Result);

            Assert.IsNotNull(result);
        }
        public void RemoveExpireResult()
        {
            OAuth2Result result = new OAuth2Result()
            {
                AccessToken  = "access_token",
                ClientId     = "client_id",
                ClientSecret = "client_secret",
                ExpireIn     = DateTime.Now.AddHours(-1),
                IdToken      = "id_token",
                RefreshToken = "refresh_token"
            };

            OAuthHelper.OAuth2Results[flag] = result;

            OAuthHelper.RemoveExpireResult();

            Assert.IsTrue(OAuthHelper.OAuth2Results.Count == 0);
        }
Esempio n. 8
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 }));
            }
        }
Esempio n. 9
0
        /// <summary>
        /// OAuth 2.0 Login
        /// </summary>
        public ActionResult OAuth(string flag, string language)
        {
            try
            {
                _log.Debug($"OAuth Start");

                var redirectUrl = $"{Request.Url.Scheme}://{Request.Url.Authority}/Login/Callback?flag={flag}&language={language}";
                var json        = "{\"client_name\":\"yunstorm\",\"grant_types\":[\"authorization_code\",\"implicit\",\"refresh_token\"],\"response_types\":[\"token id_token\",\"code\",\"token\"],\"scope\":\"offline openid all\",\"redirect_uris\":[\"" + redirectUrl + "\"],\"post_logout_redirect_uris\":[\"" + redirectUrl + "\"],\"metadata\":{\"device\":{\"name\":\"yunstorm\",\"client_type\":\"windows\",\"description\":\"pc\"}}}";
                var content     = new StringContent(json, Encoding.UTF8, "application/json");

                string resStr  = string.Empty;
                var    handler = new WebRequestHandler();
                handler.ServerCertificateValidationCallback = delegate { return(true); };
                using (var httpClient = new HttpClient(handler))
                {
                    var res = httpClient.PostAsync($"{Constant.OAuth2Url}/oauth2/clients", content).Result;
                    resStr = res.Content.ReadAsStringAsync().Result;
                    _log.Debug($"OAuth oauth2 clients: '{resStr}'");
                }

                var          obj          = JsonConvert.DeserializeObject <dynamic>(resStr);
                var          clientId     = obj["client_id"].Value;
                var          clientSecret = obj["client_secret"].Value;
                OAuth2Result auth2Result  = new OAuth2Result()
                {
                    ClientId     = clientId,
                    ClientSecret = clientSecret,
                    ExpireIn     = DateTime.Now.AddMinutes(30)
                };
                OAuthHelper.SetOAuth2Result(flag, auth2Result);

                var loginUrl = $"{Constant.OAuth2Url}/oauth2/auth?client_id={clientId}&redirect_uri={CommonHelper.EncodeUrl(redirectUrl)}&response_type=code&scope=offline+openid+all&state={OAuthHelper.RandomNumABC(24)}&lang={language}";
                _log.Debug($"OAuth End");
                return(Redirect(loginUrl));
            }
            catch (Exception ex)
            {
                _log.Debug($"OAuth Exception: {ex.Message}");
                return(Redirect($"/Login/Error?language={language}"));
            }
        }
Esempio n. 10
0
 public JsonResult WaitLogin(string flag)
 {
     try
     {
         OAuth2Result auth2Result = null;
         bool         oauth2      = OAuthHelper.TryGetOAuth2Result(flag, out auth2Result);
         if (!oauth2 || string.IsNullOrEmpty(auth2Result.AccessToken) || string.IsNullOrEmpty(auth2Result.RefreshToken))
         {
             return(Json(new { success = false }));
         }
         else
         {
             var resultJson = JsonConvert.SerializeObject(auth2Result);
             _log.Debug($"WaitLogin result: {resultJson}");
             return(Json(new { success = true, token = resultJson }));
         }
     }
     catch (Exception ex)
     {
         _log.Debug($"WaitLogin Exception: {ex.Message}");
         return(Json(new { success = false }));
     }
 }
Esempio n. 11
0
        public void OAuth2ResultTest()
        {
            OAuth2Result oAuth2Result = new OAuth2Result()
            {
                AccessToken  = "AccessToken",
                ClientId     = "ClientId",
                ClientSecret = "ClientSecret",
                ExpireIn     = Convert.ToDateTime("2020-09-09 09:00:00"),
                IdToken      = "IdToken",
                RefreshToken = "RefreshToken"
            };

            var AccessToken  = oAuth2Result.AccessToken;
            var ClientId     = oAuth2Result.ClientId;
            var ClientSecret = oAuth2Result.ClientSecret;
            var ExpireIn     = oAuth2Result.ExpireIn;
            var IdToken      = oAuth2Result.IdToken;
            var RefreshToken = oAuth2Result.RefreshToken;

            Assert.IsTrue(AccessToken == "AccessToken");
            Assert.IsTrue(ClientId == "ClientId");
            Assert.IsTrue(ClientSecret == "ClientSecret");
            Assert.IsTrue(ExpireIn == Convert.ToDateTime("2020-09-09 09:00:00"));
            Assert.IsTrue(IdToken == "IdToken");
            Assert.IsTrue(RefreshToken == "RefreshToken");

            PostOAuth2Result postOAuth2Result = new PostOAuth2Result()
            {
                Flag   = "Flag",
                Result = oAuth2Result
            };
            var Flag   = postOAuth2Result.Flag;
            var Result = postOAuth2Result.Result;

            Assert.IsTrue(Flag == "Flag");
            Assert.IsTrue(Result == oAuth2Result);
        }
Esempio n. 12
0
        /// <summary>
        /// Set Other NLB Results
        /// </summary>
        private static void SetOtherNLBResults(string flag, OAuth2Result auth2Result)
        {
            _log.Info($"SetOtherNLBResults Start.");

            var nlbUrlList = Constant.OtherNLBUrls.Split(',');

            foreach (string url in nlbUrlList)
            {
                try
                {
                    string nlbUrl = CommonHelper.GetUrl(url);

                    PostOAuth2Result postResult = new PostOAuth2Result()
                    {
                        Flag   = flag,
                        Result = auth2Result
                    };
                    HttpContent formdata = new StringContent(JsonConvert.SerializeObject(postResult));

                    // WebRequestHandler
                    var handler = new WebRequestHandler();
                    handler.ServerCertificateValidationCallback = delegate { return(true); };
                    using (var httpClient = new HttpClient(handler))
                    {
                        var reqResult = httpClient.PostAsync($"{nlbUrl}/NLBOAuth2/SetNLBOAuth2", formdata).Result;
                        var result    = reqResult.Content.ReadAsStringAsync().Result;

                        _log.Info($"SetOtherNLBResults End, url: {url}, Message: {result}");
                    }
                }
                catch (Exception ex)
                {
                    _log.Info($"SetOtherNLBResults url: {url}, Exception: {ex.Message}");
                }
            }
        }