#Php

单点登录系列(一)

Published at March 23, 2020 ·  1 min read

单点登录出现的背景 企业内的办公软件繁多,每个软件都有一套自己的用户系统,每个系统都需要注册一个账号,对员工来说需要记录许多账号密码,难以使用,对企业来说需要管理多系统的用户,难以管理。如果有一个系统实现用户的统一管理,登录企业内的所有软件只需要一个账号,对员工和企业都是好事。 单点登录的出现就解决了这个问题。 单点登录的实现方式 单点登录实现的核心就是多应用共享会话,共享会话的实现方式因协议而异,目前主要有三种协议。 SAML(Security Assertion Markup Language) SAML 是一种基于 XML 结构提供应用间交换用户信息的协议。下面放一张 SAML 单点登录的流程图。 其中有三个角色, Client(客户端),Identify Provider(认证服务提供者),Service Provider(服务提供者),SP 提供服务,IP 负责认证 SAML协议 比较复杂,上面的流程图只是 web 浏览器的访问模式,还有 ECP(Enchaned Client Or Proxy) 加强型客户端或代理,IDP(Identity Provider Discovery) 认证服务发现等几种模式。 OIDC(OpenID Connect) OpenId Connect 是基于 OAuth 2.0 协议的一种简单认证层协议。它允许客户端通过授权服务去校验终端用户的身份,并通过易上手的 REST 风格的接口获取用户的基本信息。 OIDC 的基本流程如下图 +--------+ +--------+ | | | | | |---------(1) AuthN Request-------->| | | | | | | | +--------+ | | | | | | | | | | | End- |<--(2) AuthN & AuthZ-->| | | | | User | | | | RP | | | | OP | | | +--------+ | | | | | | | |<--------(3) AuthN Response--------| | | | | | | |---------(4) UserInfo Request----->| | | | | | | |<--------(5) UserInfo Response-----| | | | | | +--------+ +--------+ RP (Reply Party) 代表需要验证用户身份的客户端...


Composer 自动加载解析

Published at March 22, 2020 ·  4 min read

Composer 自动加载分析以及优化 自动加载的原理 自动加载的核心实现是依靠 spl_autoload_register 函数 spl_autoload_register 可以注册自动加载器到SPL __autoload函数队列中。用通俗一点的话说就是这个方法允许我们自己定义一个自动加载函数。 下面给出一个官方的例子 A.class.php <?php class A { function foo() { echo __CLASS__ . PHP_EOL; } } autoload.php <?php spl_autoload_register(function ($class) { echo $class . PHP_EOL; $filename = $class . '.class.php'; if (file_exists($filename)) { include $filename; } else { throw new Exception("Unable to load {$class}", 1); } }); try { $obj = new A(); } catch (Exception $e) { echo $e->getMessage() ....


如何给 PHP 添加新特性

Published at March 24, 2019 ·  7 min read

如何给 PHP 添加新的语法特性(译) 译者注: 文中的操作都是基于 PHP5.6 进行的修改,翻译这篇文章的时候 PHP7 都已经出了,有很多方法已经被遗弃,希望各位注意不要踩坑。 原文链接 正文 最近有好多人问我怎么给 PHP 添加新语法特性。我仔细想了想,确实没有这方面的教程,接下来我会阐述整个流程。同时这篇文章也是对 Zend 引擎的一个简介。 我提前为这篇过长的文章道歉。 这篇文章假设你已经掌握了一些 C 的基本知识,并且了解 PHP 的一些基本概念(像 zvals 结构体)。如果你不具备这些条件,建议先去了解一下。 我将使用你可能从其他语言获知的 in 运算符作为一个例子。它表现如下: $words = ['hello', 'world', 'foo', 'bar']; var_dump('hello' in $words); // true var_dump('foo' in $words); // true var_dump('blub' in $words); // false $string = 'PHP is fun!...



Recent posts

Leetcode30

ElasticSearch 系列(一)

Mysql 分区表实践

Kafka 入门

Hugo 安装


Archives

2020 (11)
2019 (56)