61 lines
2.0 KiB
C#
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;
|
|
}
|
|
} |