背景
因为公司有2个平台,而且历史起因每个平台都有个本人的用户零碎。当初要重构,技术老大心愿用sso做到不同平台登录。都2021了还用ucenter(没听过这个的自行百度)?老大是想用saml做sso,这个在国内,而且PHP材料少得可怜。我也是折腾了良久才弄得明确。当初咱们是用saml+oauth 做的sso。
SAML 常识介绍
如上图,角色介绍
user agent:浏览器,用户操作等
service provider(以下都简称sp):每个零碎、平台
ident provider(以下都简称idp):对立的用户验证核心
发送波及验证名词解释:
- metadata(元数据):SP和IDP进行集成的时候的一个配置,这个配置叫做 metadata。这个配置有两份,两边各一份,外面约定了应该怎么去映射用户信息,签名的证书等。IDP和SP会通过别的形式去替换这两份 metadata;
- acs:sp 、idp各自解释和生成xml的地址;
- sso:单点登陆页面
- sls:退出地址
文字流程:
- 用户先发动申请sp,sp判断用户是否登录状态(session、token),如果不是登录状态间接带着saml 下的去重定向idp,这个过程咱们叫他AuthnRequest;
- idp那边会显示登录页sso,用户填写账号密码后,再提交给idp自身,而后生成response xml用post模式发送到sp 的acs解释;
- sp 的 acs收到response后解释xml,这过程叫断言,获取相干状态判断用是否登陆胜利,若登陆胜利生成session或token;
- 下次用户在用sp的资源时候,直接判断session和token就好。
oauth2 和 saml 在sso上的区别
oauth2(Authorization):受权
saml(Authentication):验证
流程根本一样,如果用api办法去验证登陆,oauth2 是十分不便能够每次用token发送到认证服务器验证,登陆状态;
smal登陆完要在sp在解决一次登陆凭证;
PHP & saml
在这里我先介绍几个PHP做的saml开源代码:
onelogin
lightsaml
simplesamlphp
这3个预计就目前为止,php在saml中做得比较完善的开源我的项目了。
那如何把saml 跟laravel 关联呢?国际友人曾经把轮子做进去了。别离都是基于下面的开源我的项目做的。
laravel-idp:https://github.com/codegreencreative/laravel-samlidp
laravel-sp:https://github.com/aacotroneo/laravel-saml2
这两个库别离是用了lightsaml、onelogin去做的,所以更多的时候要看这外面的配置和源码,而且库的文档和issue可能写得简陋,须要咱们对saml整改流程清晰明确状况下,再配合浏览源码能力无效应用,有工夫我再把这两个库如何配合应用和源码解读写进去。