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));
        }
示例#2
0
        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));
        }