经过两篇sso文章的分析,相信大家都会感觉到这个legalthings/sso官方提供的运行方式的局限性了。为了更好地分析这个sso的过程。本文中,苏南大叔对这个legalthings/sso范例,稍稍的进行些改造。以便其更接近于生产模式。改善的地方主要集中在两点:不同的broker使用不用的域名,并且启动命令的参数传递,也换成其他方式。

苏南大叔:SSO单点登陆,范例代码部署增益方案 - sso-better-hero
SSO单点登陆,范例代码部署增益方案(图5-1)

本文的范例来自legalthings/sso。截至到发稿,最新版本为0.3.0 - Bearer auth

改造目标

本文范例legalthings/sso源码来自:

前置阅读文章为:

原版的legalthings/sso范例运行,需要执行如下四条命令。

php -S localhost:9000 -t examples/server/
export SSO_SERVER=http://localhost:9000 SSO_BROKER_ID=Alice SSO_BROKER_SECRET=8iwzik1bwd; php -S localhost:9001 -t examples/broker/
export SSO_SERVER=http://localhost:9000 SSO_BROKER_ID=Greg SSO_BROKER_SECRET=7pypoox2pc; php -S localhost:9002 -t examples/broker/
export SSO_SERVER=http://localhost:9000 SSO_BROKER_ID=Julias SSO_BROKER_SECRET=ceda63kmhp; php -S localhost:9003 -t examples/ajax-broker/

但是这几个启动命令,和平时大家所熟悉的nginx+php的构架是很不搭配的,导致很多新人会望而却步。那么苏南大叔本文中的主要改造之处,就在于使用大家更容易接收的方式实现上述四条命令相同的目的。

网站域名设定

server域名假设为sso,三个broker域名分别设置为a/b/c。四个域名设置在本地的hosts位置中做了映射。当然,正式的生产环境上,是没有这一步骤的。这里仅仅是个模拟操作而已。

苏南大叔:SSO单点登陆,范例代码部署增益方案 - domain-list
SSO单点登陆,范例代码部署增益方案(图5-2)

nginx设置

server {
  listen 80;
  server_name sso;
  root /code/www/php/sso/examples/server;
  location / {
    index index.html index.php index.htm;
  }
  access_log  /code/www/php/sso/examples/logs/sso.log;
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}
server {
  listen 80;
  server_name a;
  root /code/www/php/sso/examples/broker;
  location / {
    index index.html index.php index.htm;
  }
  access_log  /code/www/php/sso/examples/logs/a.log;
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}
server {
  listen 80;
  server_name b;
  root /code/www/php/sso/examples/broker;
  location / {
    index index.html index.php index.htm;
  }
  access_log  /code/www/php/sso/examples/logs/b.log;
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}
server {
  listen 80;
  server_name c;
  root /code/www/php/sso/examples/ajax-broker;
  location / {
    index index.html index.php index.htm;
  }
  access_log  /code/www/php/sso/examples/logs/c.log;
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}

这里的设置,就是最普通的nginx+php的设置了,唯一特殊的地方,就是增加了个access_log。主要目的就是便于分析相互之间的数据请求情况。这个nginx的正常生效,需要新建个对应的logs目录。

另外,/code/www/php/sso/字样,是苏南大叔本地的路径,您需要修改为您自己的项目路径。

苏南大叔:SSO单点登陆,范例代码部署增益方案 - nginx-conf
SSO单点登陆,范例代码部署增益方案(图5-3)

代码更改

本步骤仅仅是为了替换原版命令中的env传递命令的方式,而做的修改,并不是唯一答案。下面这篇文章有更详细说明:

增加一个新的配置文件examples/config/broker.php,注意设置需要和server/myssoserver.php中的配置保持一致。

<?php
putenv("SSO_SERVER=http://sso");
$domain = $_SERVER['HTTP_HOST'];
switch ($domain) {
    case "a":
        putenv("SSO_BROKER_ID=Alice");
        putenv("SSO_BROKER_SECRET=8iwzik1bwd");
        break;
    case "b":
        putenv("SSO_BROKER_ID=Greg");
        putenv("SSO_BROKER_SECRET=7pypoox2pc");
        break;
    case "c":
    default:
        putenv("SSO_BROKER_ID=Julias");
        putenv("SSO_BROKER_SECRET=ceda63kmhp");
        break;
}
?>

然后在下述一系列文件中,增加上述配置文件的调用。比如在autoload.php后面,增加这个require_once

broker/*.php,ajax-broker/*.php:

require_once __DIR__ . '/../../vendor/autoload.php';
require_once __DIR__ . '/../config/broker.php';

苏南大叔:SSO单点登陆,范例代码部署增益方案 - require-once-config
SSO单点登陆,范例代码部署增益方案(图5-4)

修改ajax-broker代码

文件ajax-broker/index.html,这代码里面有个google cdn上的jquery引用,由于未知原因,这个js文件也是不能访问的。苏南大叔给它换一个新的资源文件。

http://code.jquery.com/jquery-3.3.1.min.js

苏南大叔:SSO单点登陆,范例代码部署增益方案 - ajax-broker-jquery
SSO单点登陆,范例代码部署增益方案(图5-5)

总结

上述设置之后,从使用方式上来说,就和生产环境基本上没有太大区别了。也不管是什么样的服务器系统也都是能部署和使用的了。大家敬请期待,接下来的苏南大叔提供的sso原理分析及代码实现。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   php    sso

本站的忠实读者小伙伴,正在阅读下面这些文章: