3

PHP 与 SAML

 2 years ago
source link: https://segmentfault.com/a/1190000040918488
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

PHP 与 SAML

发布于 今天 14:35

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK