SSO 跨域单点登录架构

https://help.aliyun.com/document\_detail/55359.html?spm=5176.product44282.4.7.O4lc1n

跨域单点登录架构

如大家也具有的站点就去维护一客验证cookie呢?使用一个独的站点去得征用户并设置验证cookie的干活也?这一个想法近乎对。
一经运用单点登录,那么即便用用户的数额是联合之,这样的话就好透过一个站点提供web或者WCF服务来形成征和授权的效能。这样虽节省了冗余的用户征逻辑,现在然而根本之是以此独自的站点如何当SSO架构中起效率。
于这架构模型中,浏览器不存储任何其他站点的验证cookie,只存那么些独立站点的验证cookie,大家就算吃它于名叫http://www.sso.com/
于那架构中,对每一个站点的呼吁皆以吃直跨越反到http://www.sso.com/,由于检查验证cookie是否在。假诺cookie存在,倘诺存在,再次来到请求的页面,假如非存,那么固然领先反至相应的登录页面。
横流程图如下:

                       

利通晓,我们只要有脚两独网站:
http://www.domain1.com/
http://www.domain2.com/
再有一个用来管理验证cookie的站点:http://www.sso.com/

 

表明流程如下:

 

用户请求http://www.domain1.com/遇一个消表明的页面
重定向到http://www.sso.com/,ReturnUrl参数设置成要站点1时底URL。
 http://www.sso.com/检查是否出验证cookie存在,固然当求被绝非其它用户令牌存在,那么要被带动在用户需登录的命就跳反到站点1。在query
string中还保留着前边ReturnUrl参数的值。
站点1自参数中获知是于http://www.sso.com/跳转而来,且得知没有用户验证cookie,最后跳反至站点1底登录页面进行登录,而无越反到http://www.sso.com/

用户提供阐明音讯点击登录按钮,请求没有回置到站点http://www.sso.com/,这时,站点1通过http://www.sso.com/供的web/WCF接口进行用户之印证,倘使申明成功,那么为用户发布一个令牌(可以是一个GUID)。
站点1标明用户就报到成功(在session中存储用户对象),一个含有了令牌的URL跳反到http://www.sso.com/装验证cookie,ReturnUrl参数如故设置成前面请求的URL。
http://www.sso.com/站点检查过来的URL,发现发用户令牌,但还没用户验证cookie,表达已经经过了站点1之求证,现在亟需装站点http://www.sso.com/生的验证cookie。照例设置好了cookie后,将cookie添加在response中,还上加上用户令牌依照ReturnUrl参数中之URL一并回。
浏览器得知要跨越反至站点1,并且发生了站点http://www.sso.com/的验证cookie,在地点存储下sso站点的验证cookie并对准站点1倡导呼吁。
站点1反省了用户令牌,因为凡经过站点SSO的web/WCF服务证并经之,所以站点1回来用户请求的页面。

本用户要站点2
浏览器跳反至sso站点,仍然设置好ReturnUrl的价。
浏览器因为假若领先反到sso站点,发现地面有矣sso站点的验证cookie,所以用cookie添加在呼吁被同样连起。
sso站点检查cookie,发现cookie还一贯然而,那么以query
string中补充加上用户令牌按照ReturnUrl再次来到。
站点2发现有用户令牌,声明已走过验证流程,那么就是回用户请求的页面。

阿里云短信服务地点,胸闷的下载看

总结

正好起,浏览器没有另外http://www.sso.com/站点下之验证cookie。请求站点1及站点2另外需要验证的页面(需要中间的跳转至sso站点检查验证cookie是否是)。用户登录后,sso站点的验证cookie存储于当地(重要之是用户令牌仅仅用户用户登录会话时)。
现行恳请站点1要站点2都跳反到sso站点,浏览器发送sso站点的验证cookie并检查用户令牌,验证后还跨反到原请求的URL,原始站点检查用户令牌正确后归用户要的页面。

 

次种架构的程序实现

相当于空闲了来翻译了第二有的:程序实现
等于小之爱侣可预先看原稿:http://www.codeproject.com/KB/aspnet/CrossDomainSSOExample.aspx

 

1 文件存放地点的问题

阿里云的少信接口 属于第三着扩展 所以文件在 thinkphp\vendor\
比如起名message 把SDK的文本还满怀到里面

图片 1

 

2 把落实力量的代码 写好 放在message目录

图片 2

而是注意文件之门道

代码里面的文件头 引用的文书地方用类似的

require_once
dirname(dirname(__FILE__)).’/Message/aliyun-php-sdk-core/Config.php’;
require_once
dirname(dirname(__FILE__)).’/Message/aliyun-php-sdk-core/Autoloader/Autoloader.php’;

require_once
dirname(dirname(__FILE__)).’/Message/Dysmsapi/Request/V20170525/SendSmsRequest.php’;
require_once
dirname(dirname(__FILE__)).’/Message/Dysmsapi/Request/V20170525/QuerySendDetailsRequest.php’;

class aaa{

}

3  在thinkphp的框架中 使用

require ‘./ThinkPHP/Library/Vendor/Message/aaa.class.php’;
$a=new \aaa(‘111111111’);

 

此外情势要测试,这么些得

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图