Exemple #1
0
        /// <summary>
        /// 登录页面提交登录请求。
        /// </summary>
        /// <param name="context"></param>
        public void HandleLogin(HttpContext context)
        {
            var account = SampleDB.FindAccount(context.Request["account"], Util.ComputePasswordHash(context.Request["pwd"], context.Request["account"]));

            if (account != null)
            {
                //8 登录成功,创建用户账号对应的token xxx
                var token = Util.GetTokenForAccount(account);

                //9 把token写到本站cookie;
                context.Response.SetCookie(new HttpCookie("baibaomensso", token));

                //这个cookie和sso流程无关,是方便SSO的login.html前端页面显示用户名用的。
                context.Response.SetCookie(new HttpCookie("username", account.Name));

                //9 跳转到returnurl并带上token。此处只输出token,在前端页面回调中执行跳转。
                context.Response.Write(token);
                context.Response.End();
                //context.Response.Redirect(MakeReturnUrl(context.Request["returnurl"],token),true);
            }
            else
            {
                //不应该用401,不合理而且会导致浏览器弹出登录框:http://stackoverflow.com/questions/1959947/whats-an-appropriate-http-status-code-to-return-by-a-rest-api-service-for-a-val
                //context.Response.StatusCode = 401;
                context.Response.StatusCode = 422;
            }
        }
Exemple #2
0
        private void HandleValidate(HttpContext context)
        {
            var theToken = Util.DecryptTokenForValidationRequest(context.Request);

            UserInfo theAccount = null;

            if (!string.IsNullOrEmpty(theToken))
            {
                theAccount = Util.FindAccountForToken(theToken);
            }
            else
            {
                //todo:要检查账号所在域名是否正确。
                string accountStr = null;
                if (context.User != null && context.User.Identity != null)
                {
                    accountStr = context.User.Identity.Name.Split('\\')[1].ToLower();
                }

                if (!string.IsNullOrEmpty(accountStr))
                {
                    theAccount = SampleDB.FindAccount(accountStr);
                }
            }

            if (theAccount != null)
            {
                //13. 验证通过。
                //14. 告知token有效,并附带允许站点获取的用户信息。
                //32. 同13。
                //33. 同14。

                //todo:实际场景中,应该根据请求的server-key,只传递该server能看到的用户信息。
                context.Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(theAccount));
            }
            context.Response.End();
        }