1.非自研系统
通过接口,获取第三方系统token,存redis缓存,设计跳转配置,根据获取的配置路由等用户信息来访问第三方系统免登录。(登入校验在第三方系统实现)
public async Task<string> PostOaAcessTokenAsync(string loginid)
{string resToken = "";var formData = new Dictionary<string, string>{{ "appid", "*************************" },{ "loginid", loginid }};var content = new FormUrlEncodedContent(formData);HttpResponseMessage response = await HttpHelper.Client.PostAsync("http://127.0.0.1:8888/ssologin/getToken", content);if (response.IsSuccessStatusCode){var responseContent = await response.Content.ReadAsStringAsync();resToken = responseContent;if (resToken.Contains("has no account:")){throw new UserFriendlyException(UserConst.OA_User_No_Exist);}return resToken;}else{throw new UserFriendlyException(UserConst.Login_Error);}}
1.自研系统(OOS机制-单点登录)
通过调整自研系统登入接口参数,添加token字段,由门户创建token,这边按照token值来判断是否不走正常账号密码登入,直接通过token值调用门户接口校验,如果校验成功则质检进入自研系统。
public async Task SSOLoginValidationAsync(string token, Action<UserEntity> userAction = null)
{var user = new UserEntity();HttpResponseMessage response = await HttpHelper.Client.PostAsync("http://127.0.0.1/prod-api/auth/get-token/" + token, null);if (response.IsSuccessStatusCode){var responseContent = await response.Content.ReadAsStringAsync();var jObject = JObject.Parse(responseContent);var bo = jObject["succeeded"].Value<bool>();if (bo){string UserCode = jObject["data"].Value<string>();if (await ExistAsync(UserCode, o => user = o)){if (userAction is not null){userAction.Invoke(user);return;}}throw new UserFriendlyException(UserConst.Login_User_No_Exist);}else{throw new UserFriendlyException(UserConst.Auth_User_Token_Invalid);}}else{throw new UserFriendlyException(UserConst.SSO_Token_Err);}
}