1

背景
因为公司有2个平台,而且历史原因每个平台都有个自己的用户系统。现在要重构,技术老大希望用sso做到不同平台登录。都2021了还用ucenter(没听过这个的自行百度)?老大是想用saml做sso,这个在国内,而且PHP资料少得可怜。我也是折腾了好久才弄得明白。现在我们是用saml+oauth 做的sso。

SAML 知识介绍
image.png
如上图,角色介绍
user agent:浏览器,用户操作等
service provider(以下都简称sp):每个系统、平台
ident provider(以下都简称idp):统一的用户验证中心

发送涉及验证名词解释:

  • metadata(元数据):SP和IDP进行集成的时候的一个配置,这个配置叫做 metadata。这个配置有两份,两边各一份,里面约定了应该怎么去映射用户信息,签名的证书等。IDP和SP会通过别的方式去交换这两份 metadata;
  • acs:sp 、idp各自解释和生成xml的地址;
  • sso:单点登陆页面
  • sls:退出地址

文字流程:

  1. 用户先发起请求sp,sp判断用户是否登录状态(session、token),如果不是登录状态直接带着saml 下的去重定向idp,这个过程我们叫他AuthnRequest;
  2. idp那边会显示登录页sso,用户填写账号密码后,再提交给idp本身,然后生成response xml用post形式发送到sp 的acs解释;
  3. sp 的 acs收到response后解释xml,这过程叫断言,获取相关状态判断用是否登陆成功,若登陆成功生成session或token;
  4. 下次用户在用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整改流程清晰明白情况下,再配合阅读源码才能有效使用,有时间我再把这两个库如何配合使用和源码解读写出来。

参考

https://www.jianshu.com/p/75e...

唔系我认叻
12 声望1 粉丝