如何实现不同域名后缀domino server之间的SSO

1.        SSO  的过程  
浏览器访问受限信息,被自动转到 domino 授权页面。如果启用了 SSO ,当浏览器上传用户名和密码授权时, web server 会将授权信息以 cookie 的方式写入给浏览器的 response  header  

当浏览器请求之后相关的页面时,会在 request header 中带入该 cookie 以验证授权。  

2.         为什么 domino SSO 必须要求相同的域名后缀  
其实更多限制来自浏览器。浏览器的安全限制会根据请求中的 host 来决定是否发送 cookie 。例如途中 domino web 的授权 cookie ltpa token SSO 域和路径决定了浏览器在什么条件下发送这个 cookie 。域就是域名的后缀,正常情况下应该是例如: abc.com xyz.net  路径 '/' 是指地址栏中 URL host 以后的信息。  
如果 cookie 域名为 abc.com 那么浏览器请求 server.abc.com  相关的内容就会发送这个 cookie  
如何实现不同域名后缀domino server之间的SSO - mylotustips - mylotustips的博客  
那么如果域名不一致,浏览器不会发送 cookie SSO 无法实现。  

3.         那么推测当访问 abc.com 时,相关的服务器写入名为 xyz.com cookie ,是否浏览器就能正常访问 xyz.com 。原则上是可以的,但是浏览器的安全设置,浏览器会禁止接受与当前访问 host 域名不一致的 cookie   就是说当前 URL abc.com  时浏览器只会接受 server  写域为 abc.com  或者  *.abc.com cookie  
4.         绕道的开发可以避免这个问题,但是从 domino  当前的情况来说,必须要求域名后缀一直,无法实现多域名 sso  
5.         那如果 server 的域名后缀不一致,甚至没有只有 ip ,没有域名我们能否实现 SSO 了?  

根据 SSO 原理,如果授权 cookie 能成功写入浏览器,并且浏览器在访问相关的页面时能正常发送 cookie ,那么 从( NAT )的角度也许能实现 SSO  

下面单独以解决 NAT(net address translate) 设备利用 ip 实现多服务器 SSO  
NAT  ipv4 中来解决 ip 地址有限的相关协议。我们没有独立公网 ip pc 基本都采用 nat 来与 internet 传输数据  
原请求ip地址原请求端口转换后地址转换后端口
192.168.1.103
4001
192.168.1.106
4080

例如有 3 domino 服务器 IP 分别为
server1192.168.1.106
server2192.168.1.108
server3192.168.1.104


当访问 server1 时如果要重定向到 server3 URL 一般会有 192.168.1.106 变为 192.168.1.104. 为了 SSO ,我们希望能否将 URL 转变为 192.168.1.106:port  然后将所有发送至这个 port 的所有数据转到 server3 192.168.1.104.  那么如果 cookie 的域名也改为 '192.168.1.106' 浏览器也会正常得到授权 cookie 然后,访问 server3 的页面时也会正常将 cookie 发送给 192.168.1.104  

linux iptables  这个防火墙基于网络层对数据包的 nat 能够很好的帮助我们实现这个  

iptables  包括 4 个表,我们要用到其中 nat  filter 。这也是经常用到的两个表。  
数据包进入 prerouting ,将会被更改目标地址和端口:  
例如发送给 192.168.1.106:84  的数据包会被改为 192.168.1.104:80  
然后经过 forward   到达 postrouting 链,在 postrouting 链数据包的源地址和源端口将会被更改例如浏览器地址 : 192.168.1.103:40001  被更改为 nat 防火墙的地址和 ip:192.168.1.106:4080  
并生成一条 nat 记录:  
根据这条记录,当 server3 返回数据包时,相关的数据包端口信息 4080 将会被发送至浏览器 192.168.1.103:4001
192.168.1.103
4001
192.168.1.106
4080

如何实现不同域名后缀domino server之间的SSO - mylotustips - mylotustips的博客  
接下来就可配置 domino sso 文档。 SSO 文档  
如何实现不同域名后缀domino server之间的SSO - mylotustips - mylotustips的博客  

配置 web redirect 数据库,来实现 URL 的跳转。  
用户 dwa3 在服务器 server3 上,当前授权 server server1 ,授权后会根据重定向库,重定向到 server3 上。重定向的 3 中设置中的 mail serve ,会首先去重定向的服务器后缀,如果为空,去取 server document->internet protocol  下的 hostname 。如果将这个域的信息写为 “192.168.1.106:84” ,那么浏览器的 URL 将会跳转为:  
http://192.168.1.106:84/mail/dwa3.nsf   192.168.1.106  接到 84 端口的包都会扔给 server3  

然而 hostname 用来做 http ip 绑定,如果这个域改为  192.168.1.106:84 ,将无法绑定 ip  

我查看了 web redirect 的模板,可以更改模板中的的 http_hostname, server document 中创建一个新的值,并让 web redirect 去取这个值来生成相关的 URL  

所有的配置成功后就可以正常 SSO 了。如图是 firefox web request 的相关信息,并对比 server3  http  数据抓包  
post names.nsf?login  得到授权 cookie ltpatoken,  并且被重定向至 192.168.1.106:84  
如何实现不同域名后缀domino server之间的SSO - mylotustips - mylotustips的博客  
从定向的 request 中带入授权 cookie ltpatoken 。并得到来自 server3 cookie shimmers  
( 这里不会过多讨论 shimmers shimmers 不用做授权。因为所以 cookie 写入和发送的过程与同域名后缀的过程完全一致,而我们 SSO 授权只涉及 ltpatoken  
如何实现不同域名后缀domino server之间的SSO - mylotustips - mylotustips的博客  


对比 server3 的数据:  
如何实现不同域名后缀domino server之间的SSO - mylotustips - mylotustips的博客  

如何实现不同域名后缀domino server之间的SSO - mylotustips - mylotustips的博客
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当用户第一次访问web应用系统1的时候,因为还没有登录,会被引导到认证中心进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,返回给用户一个认证的凭据;用户再访问别的web应用的时候就会将这个Token带上,作为自己认证的凭据,应用系统接受到请求之后会把Token送到认证中心进行效验,检查Token的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。所有应用系统共享一个身份认证系统。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志,返还给用户。另外,认证系统还应该对Token进行效验,判断其有效性。 所有应用系统能够识别和提取Token信息要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对Token进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。 比如说,我现在有3个分站点和1个认证中心(总站)。当用户访问分站点的时候,分站点会发Token到验证中心进行验证。验证中心判断用户是否已经登录。如果未登录,则返回到验证中心登录入口进行登录,否之则返回Token验证到分站点,直接进入分站点
当用户第一次访问web应用系统1的时候,因为还没有登录,会被引导到认证中心进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,返回给用户一个认证的凭据;用户再访问别的web应用的时候就会将这个Token带上,作为自己认证的凭据,应用系统接受到请求之后会把Token送到认证中心进行效验,检查Token的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。所有应用系统共享一个身份认证系统。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志,返还给用户。另外,认证系统还应该对Token进行效验,判断其有效性。 所有应用系统能够识别和提取Token信息要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对Token进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。 比如说,我现在有3个分站点和1个认证中心(总站)。当用户访问分站点的时候,分站点会发Token到验证中心进行验证。验证中心判断用户是否已经登录。如果未登录,则返回到验证中心登录入口进行登录,否之则返回Token验证到分站点,直接进入分站点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值