.net SSO单点登录mvc

单点登录(Single Sign On),简称为 SSO,单点登录怎么理解了,就是一个地方登录.
什么一个地方登录了,所有的系统只有一个地方登录?
登录一次就可以使用所有的系统.
最经典的案列就是阿里巴巴的账号体系了.
如果你仔淘宝登录了,天猫,聚划算就不要登录了,支付宝好像也不要登录了.

就相当于皇帝给你个令牌,三宫六院随你逛.

单点登录就是解决登录来,登录去的麻烦.
程序开发也只要维护一个表就好了.

说起来简单,做起来还是不简单,如果没有源码的话.

多说无益,上百科普及下知识.
上代码
单点登录,最核心的地方还是登录.

  /// <summary>
        /// 登录验证
        /// </summary>
        /// <param name="system">系统</param>
        /// <param name="account">账户</param>
        /// <param name="password">密码</param>
        /// <returns></returns>
        [HttpGet]
        public HttpResponseMessage CheckLogin(string system, string account, string password)
        {
            LogEntity logEntity = new LogEntity();
            logEntity.CategoryId = 1;
            logEntity.OperateTypeId = ((int)OperationType.Login).ToString();
            logEntity.OperateType = EnumAttribute.GetDescription(OperationType.Login);
            logEntity.OperateAccount = account;
            logEntity.OperateUserId = account;
            logEntity.Module = system;

            try
            {
                //验证账户
                UserEntity userEntity = new UserBLL().CheckLogin(account, password);

                //生成票据
                var ticket = Guid.NewGuid().ToString();
                //写入票据
                CacheFactory.Cache().WriteCache(userEntity, ticket, DateTime.Now.AddHours(8));

                //写入日志
                logEntity.ExecuteResult = 1;
                logEntity.ExecuteResultJson = "登录成功";
                logEntity.WriteLog();

                return Success("登录成功", ticket);
            }
            catch (Exception ex)
            {
                logEntity.ExecuteResult = -1;
                logEntity.ExecuteResultJson = ex.Message;
                logEntity.WriteLog();
                return Error(ex.Message);
            }
        }

楼上代码大致意思就是,登录的时候传入基本的信息进行验证.
如果登录成功了保留关键步骤,生成一个票据.没成功的话自己想怎么处理就怎么处理.

票据就像签合同一样一式两份, 客户端保存一份,服务器保存一份.
这个就是契约. 简单点就像武侠片一块玉分两块.十几年后凭借两块破玉寻找失散多年的兄妹.

登录成功之后,下一次访问的时候就拿着这个令牌就可以访问了.

比如张三要买玩具,登录之后,拿着令牌就可以访问自己账户中心的数据.

 /// <summary>
        /// 票据验证
        /// </summary>
        /// <param name="ticket"></param>
        /// <returns></returns>
        [HttpGet]
        public HttpResponseMessage CheckTicket(string ticket)
        {
            UserEntity userEntity = CacheFactory.Cache().GetCache<UserEntity>(ticket);
            if (userEntity != null)
            {
                return Success("通过", userEntity);
            }
            else
            {
                return Error("错误");
            }
        }

拿着令牌过去服务器有验证令牌的程序.通过了才能访问数据.

说的是不是有点简单.原理就是这样的,封装的太厉害了,不易于理解.

.net程序末法时代,人人贡献一点开源产品
源代码下载: http://www.zhruanjian.com/
技术交流群:345265775

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值