MVC单点登录使用小结

来源:互联网 发布:路由器和交换机 知乎 编辑:程序博客网 时间:2024/06/05 15:16

一、客户端

1、在web.config中加入需要登录的公共地址

  <add key="PassportCenterUrl" value="http://localhost:8022"/>

2、编写过滤条件

public class AuthAttribute : ActionFilterAttribute    {        public AuthCodeEnum Code { get; set; }        public override void OnActionExecuting(ActionExecutingContext filterContext)        {            var request = filterContext.HttpContext.Request;            var session = filterContext.HttpContext.Session;            //如果存在身份信息             if (Common.CurrentUser == null)            {                if (Code == AuthCodeEnum.Public)                {                    return;                }                string reqToken = request["Token"];                string ticket = request["Ticket"];                Cache cache = HttpContext.Current.Cache;                //每次刷新页面的时候首先删除Token                if (string.IsNullOrEmpty(reqToken) || string.IsNullOrEmpty(ticket))                {                    cache.Remove(ConstantHelper.TOKEN_KEY);                }                //没有获取到Token或者Token验证不通过或者没有取到从P回调的ticket 都进行再次请求P                TokenModel tokenModel = cache.Get(ConstantHelper.TOKEN_KEY) == null ? null : (TokenModel)cache.Get(ConstantHelper.TOKEN_KEY);                if (string.IsNullOrEmpty(reqToken) || tokenModel == null || tokenModel.Token != reqToken ||                    string.IsNullOrEmpty(ticket))                {                    DateTime timestamp = DateTime.Now;                    string returnUrl = request.Url.AbsoluteUri;                    tokenModel = new TokenModel                    {                        TimeStamp = timestamp,                        Token = AuthernUtil.CreateToken(timestamp)                    };                    //Token加入缓存中,设计过期时间为20分钟                    cache.Add(ConstantHelper.TOKEN_KEY, tokenModel, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);                    filterContext.Result = new ContentResult                    {                        Content = GetAuthernScript(AuthernUtil.GetAutherUrl(tokenModel.Token, timestamp), returnUrl)                    };                    return;                }                LoginService service = new LoginService();                var userinfo = service.GetUserInfo(ticket);                session[ConstantHelper.USER_SESSION_KEY] = userinfo;                  //验证通过,cache中去掉Token,保证每个token只能使用一次                cache.Remove(ConstantHelper.TOKEN_KEY);            }        }        private string GetAuthernScript(string authernUrl, string returnUrl)        {            StringBuilder sbScript = new StringBuilder();            sbScript.Append("<script type='text/javascript'>");            sbScript.AppendFormat("window.location.href='{0}&returnUrl=' + encodeURIComponent('{1}');", authernUrl, returnUrl);            sbScript.Append("</script>");            return sbScript.ToString();        }    }

3、设定过滤条件

  [Auth(Code = AuthCodeEnum.Login)]        public ViewResult Login()        {            ViewBag.id = Common.CurrentUser.UserId;            ViewBag.useName = Common.CurrentUser.UserName;            return View("Index");        }



下载 地址:http://download.csdn.net/detail/zhgl7688/9839632


0 0