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); }
/// <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); }
/// <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}")); } }
/// <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); }); } }
/// <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); }
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 })); } }
/// <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}")); } }
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 })); } }
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); }
/// <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}"); } } }