namespace YLErp.Web.Models { /// /// 天风证券单点登录 /// public class TianFengSSOHandler { public static string GetSsoLoginUrl(string serviceUrl) { return SsoLoginConfig.SSO_Url + "/login?service=" + serviceUrl; } public static string GetSsoLogoutUrl(string serviceUrl) { return SsoLoginConfig.SSO_Url + "/logout?service=" + serviceUrl; } readonly IHttpClientFactory _httpClientFactory; public TianFengSSOHandler(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory ?? throw new ArgumentNullException(nameof(httpClientFactory)); } /// /// 验证令牌,返回用户名 /// public async Task ValidateAsync(string ticket, string serviceUrl) { // 如果Request.Url的值带参数,需要对这个url先进过编码,这里的service的值应该跟上一步跳转到SSO时service的值一致(注意需要去掉service中的ticket参数) // url的值,例如:http://sso.liyong.com:8280/sso/validate?ticket=ST-3-QrZ3WmuPOX94L4og7vbQ-cas&service=http://localhost/test.aspx var url = SsoLoginConfig.SSO_Url + "/validate?ticket=" + ticket + "&service=" + serviceUrl; LogFactory.GetLogger("天风单点登录").Info("sso validate url:" + url); var client = _httpClientFactory.CreateClient(); var response = await client.GetStringAsync(url); var reader = new StringReader(response); var isOk = reader.ReadLine(); if (isOk.Trim() != "yes") { throw new ServiceException("[单点登录]令牌验证失败,ticket:" + ticket); } return reader.ReadLine(); } } public class SsoLoginResult { public string userName; public string userTicket; public bool redirect; } }