PHP 与 SAML
背景
因为公司有2个平台,而且历史原因每个平台都有个自己的用户系统。现在要重构,技术老大希望用sso做到不同平台登录。都2021了还用ucenter(没听过这个的自行百度)?老大是想用saml做sso,这个在国内,而且PHP资料少得可怜。我也是折腾了好久才弄得明白。现在我们是用saml+oauth 做的sso。
SAML 知识介绍
文章图片
如上图,角色介绍
user agent:浏览器,用户操作等
service provider(以下都简称sp):每个系统、平台
ident provider(以下都简称idp):统一的用户验证中心
【PHP 与 SAML】发送涉及验证名词解释:
- 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(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整改流程清晰明白情况下,再配合阅读源码才能有效使用,有时间我再把这两个库如何配合使用和源码解读写出来。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 我和你之前距离
- thinkphp|thinkphp 3.2 如何调用第三方类库
- CGI,FastCGI,PHP-CGI与PHP-FPM