关于php:PHP-与-SAML

7次阅读

共计 1221 个字符,预计需要花费 4 分钟才能阅读完成。

背景
因为公司有 2 个平台,而且历史起因每个平台都有个本人的用户零碎。当初要重构,技术老大心愿用 sso 做到不同平台登录。都 2021 了还用 ucenter(没听过这个的自行百度)?老大是想用 saml 做 sso,这个在国内,而且 PHP 材料少得可怜。我也是折腾了良久才弄得明确。当初咱们是用 saml+oauth 做的 sso。

SAML 常识介绍

如上图,角色介绍
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 整改流程清晰明确状况下,再配合浏览源码能力无效应用,有工夫我再把这两个库如何配合应用和源码解读写进去。

正文完
 0