PHP 与 SAML

唔系我认叻 -
PHP 与 SAML

背景
因为公司有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:退出地址

文字流程:

用户先发起请求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整改流程清晰明白情况下,再配合阅读源码才能有效使用,有时间我再把这两个库如何配合使用和源码解读写出来。

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

php介绍

PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。
上一篇: 模板导出Xls

Tags 标签

phpsaml

扩展阅读

加个好友,技术交流

1628738909466805.jpg