Files
zszq-trs/YLErpWeb/Models/TianFengSSOHandler.cs
T
2024-05-09 14:06:26 +08:00

61 lines
2.0 KiB
C#

namespace YLErp.Web.Models
{
/// <summary>
/// 天风证券单点登录
/// </summary>
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));
}
/// <summary>
/// 验证令牌,返回用户名
/// </summary>
public async Task<string> 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;
}
}