Open.auth 开源项目学习(一)SSO单点登录

        整理好自己的心情,我觉得我要开始提升自己了。于是我翻开我的项目文件夹准备找一个开源项目啃一啃。我个人比较喜欢学习各种设计思想比较优秀的项目。而不是各种复杂算法,偏底层项目。于是我选择了Open.auth .NET作为我要啃的项目。

      首先看下项目结构:

             mvc:主要站点项目  网站的表示层及渲染是在这个页面

     webApi:业务接口项目 向表层提供一些数据访问业务处理相关的接口

             App:核心业务层 作为数据访问跟webApi层的连接作用,并做数据整合处理

             Domain:数据访问层   里面有一些我们需要用到的数据模型

             Infrastructure:基础配置层,包括一些公用的类,基础设置,及文件。

             Repository:数据仓库 做一些数据的映射提供程序与数据库交互的相关业务

这是我初步对项目的理解。

那么下一步我们启动应用,会发现首先映入眼帘的是登录界面。

我们一步一步观察登录的代码会发现。他并没有直接访问登录的业务代码,也没有通过表层发ajax请求来做登录验证。

而是在后台的登录代码里面再请求登录的接口。

代码:

        /// <summary>
        /// 登陆接口
        /// </summary>
        /// <param name="appKey">应用程序key.</param>
        /// <param name="username">用户名</param>
        /// <param name="pwd">密码</param>
        /// <returns>System.String.</returns>
        public static LoginResult Login(string appKey, string username, string pwd)
        {
            var requestUri = "/api/Check/Login";

            try
            {
                var value = _helper.Post(new
                {
                    AppKey = appKey,
                    UserName = username,
                    Password = pwd
                }, requestUri);

                var result = JsonHelper.Instance.Deserialize<LoginResult>(value);
                return result;
               
            }
            catch (Exception ex)
            {
                return null;
            }
        }

 

为什么要这么做呢?

我们分析一下他的好处。

1.不暴露真实的数据访问路口,安全性更好

2.我可以在我的网站写我的登录校验逻辑,你也可以写你接口的校验逻辑。两者可以兼容。符合开闭原则

3.对于多个项目用同一个登录的情况会有很好的兼容作用

劣势:

1.性能上可能会有损失,当然这个有待测试

2.提升的代码的逻辑复杂度

 

暂时只想到这么多,下次再继续聊。

 

posted on 2018-12-28 13:34  DaivdHu  阅读(709)  评论(0编辑  收藏  举报

导航