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.提升的代码的逻辑复杂度
暂时只想到这么多,下次再继续聊。