public IActionResult WriteSession(AuthSessionRequestModel data) { #region 验证 SiteToken if (ssoConfigs.SiteToken != data.SiteToken) { return(Redirect(data.TargetUrl)); } #endregion #region 向 sso AuthUserToken 发送回调验证 var callBackRequest = new AuthUserTokenRequestModel() { AppKey = ssoConfigs.AppKey, SsoUserId = data.SsoUserId, UserToken = data.UserToken }; var postData = JsonConvert.SerializeObject(callBackRequest); var resrponseStr = httpPostHelper.Send(ssoConfigs.AuthUserToken, postData); var reswponseObject = JsonConvert.DeserializeObject <AuthUserTokenResponseModel>(resrponseStr); if (reswponseObject == null || !reswponseObject.Success) { //TODO //若未登录,则跳转到登录页 //若已登录,则跳转到授权接入页 return(Redirect(data.TargetUrl)); } #endregion #region 验证UserMapping UserMapping userMapping = siteContext.UserMapping.FirstOrDefault(x => x.SsoUserId == data.SsoUserId); if (userMapping == null) { //TODO //若未登录,则跳转到登录页 //若已登录,则跳转到授权接入页 return(Redirect(data.TargetUrl)); } #endregion User user = siteContext.User.Find(userMapping.UserId); if (user == null) { //TODO //若未登录,则跳转到登录页 //若已登录,则跳转到授权接入页 return(Redirect(data.TargetUrl)); } //写入登录信息 loginHelper.Login(HttpContext, user, false, data.UserToken); return(Redirect(data.TargetUrl)); }
public IActionResult AuthSession(AuthSessionRequestModel data) { /* * 1.验证 SiteToken * 2.判断被接入系统是否存在 UserMapping,若不存在则新增 User、UserMapping 数据 * 3.写入登录信息 * 4.重定向到接入Client传递过来的TargetUrl地址 * */ #region 验证 SiteToken if (ssoConfigs.SiteToken != data.SiteToken) { return(Redirect(data.FailUrl)); } #endregion //#TODO 调用 Server 的CallBack 验证请求 #region 补充用户信息 /* * 1.判断 UserMapping 是否存在 * 若不存在则有下面2个可能 * I. 最开始由a系统接入到b系统,这个时候 a系统中 UserMapping 无数据,b系统有UserMapping 数据。这个时候再由 b 系统到 a 系统,仅仅补充 UserMapping数据 * II.从未开始接入,补充 User,UserMapping数据 * */ //#TODO UserMapping userMapping = data.SsoUserId > 0 ? siteContext.UserMapping.FirstOrDefault(x => x.SsoUserId == data.SsoUserId) : null; if (userMapping == null) { if (data.UserId > 0) { #region a 系统接入 b 系统,b 系统再跳转到 a系统,此时 a 系统补充 UserMapping 关系 userMapping = new UserMapping() { UserId = data.UserId, SsoUserId = data.SsoUserId }; siteContext.UserMapping.Add(userMapping); siteContext.SaveChanges(); #endregion } else { #region 从未接入系统 //第三方用户第一进入,自动创建账号关联信息 //step a.新增用户到自己系统 var user = new User() { UserName = string.Format("{0}_SSO_{1}", data.SsoUserId, data.OtherUserId), PassWord = Guid.NewGuid().ToString() }; siteContext.User.Add(user); siteContext.SaveChanges(); userMapping = new UserMapping() { UserId = user.Id, SsoUserId = data.SsoUserId }; siteContext.UserMapping.Add(userMapping); siteContext.SaveChanges(); #endregion } } #endregion #region 写入登录信息 //根据ID获取用户信息 User user2 = siteContext.User.Find(userMapping.UserId); //写入登录信息 loginHelper.Login(HttpContext, user2, false, data.UserToken); #endregion return(Redirect(data.TargetUrl)); }