背景因为公司有两个平台,每个平台由于历史原因都有自己的用户体系。现在要重构,技术老大希望在不同平台都可以使用sso登录。都2021了你还在用ucenter(你自己百度没听说过这个)?老板想用saml做sso,是在国内,php资料很少。我也花了很长时间才弄明白。现在我们正在使用saml+oauth进行sso。SAML知识介绍如上图,角色介绍。Useragent:浏览器,用户操作等:元数据(metadata):SP和IDP集成时的一种配置,这种配置称为元数据。这个配置有两份,每边一份,规定了如何映射用户信息、签名证书等,IDP和SP会通过其他方式交换这两份元数据;acs:sp,idp分别解释生成xml的地址;sso:单点登录页面sls:退出地址文本流:用户首先向sp发起请求,sp判断用户是否为登录状态(session,token),如果不是登录状态,直接重定向idp和saml,这个过程我们称他为AuthnRequest;登录页面sso会显示在idp端,用户填写账号密码后提交给idp自己,然后生成响应xml以post的形式发送给sp的acs进行解析;sp的acs在收到响应后解释xml。这个过程称为断言,获取相关状态来判断是否登录成功。如果登录成功,则生成会话或令牌;下次用户使用sp资源时,直接判断session和token即可。oauth2和samlonsso的区别oauth2(Authorization):authorizedsaml(Authentication):验证过程基本相同,如果使用api方式验证登录,oauth2很方便,可以发送到认证服务器每次使用令牌进行验证,登录状态;smal登录后,需要在sp中处理一个登录凭证;PHP&saml这里先介绍几个PHP做的saml的开源代码:oneloginlightsamlsimplesamlphp这三个估计到此为止,php已经在saml中做了一个比较完整的开源项目。那么如何将saml与laravel关联起来呢?国际友人已经造轮子了。它们都是基于上述开源项目。laravel-idp:https://github.com/codegreencreative/laravel-samlidplaravel-sp:https://github.com/aacotroneo/laravel-saml2这两个库分别用lightsaml和onelogin做的,所以比较多时间,取决于配置和源代码,库的文档和问题可能写得不好。如果我们需要清楚地了解saml整改过程,可以结合阅读源码使用。有时间我会把这两个Howtousethelibrary一起写,并解读和编写源码。参考https://www.jianshu.com/p/75e...
