微服务开发之单点登录

关于CAS

CAS是一种单点登录开源框架,遵循apache2.0协议,代码托管在github.com/apereo/cas上。
而单点登录(SSO, Single Sign On)可简单理解为当用户在一个应用上登录了,其他被授权信任的关联应用不用再登录。
比如在同一个浏览器中登录了天猫,再打开淘宝网站时会自动登录,无需单独输用户名密码或扫二维码。以下简单说明下CAS的部署与测试结果。

本地测试环境

jdk8
tomcat8.5
gradle-4.3.1
cas4.2.7

下载及编译cas

$wget "https://github.com/apereo/cas/archive/v4.2.7.tar.gz"
$tar -zxf v4.2.7.tar.gz
$cd cas-4.2.7/cas-server-webapp
$gradle build

编译完成后可在当前路径的build/libs/找到编译打包出来的war文件cas-server-webapp-4.2.7.war;将其重命名为cas.war后,复制到tomcat的web工作目录webapps/下。

tomcat ssl证书配置

具体流程可参考网上资料,这里暂不展开讨论。配置好ssl证书后,在tomcat目录下的conf/server.xml增加类似如下配置:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
            maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
            clientAuth="false" sslProtocol="TLS"
            keystoreFile="/Users/apple/Documents/cas/castestkey"
            keystorePass="xxxx"/>

修改hosts

假设测试环境为本机,我们除了启动一个cas server,还将启动启动两个application server用于单点登录测试。以下为这三个节点的本地host配置:

127.0.0.1 sso.cas.com
127.0.0.1 app1.cas.com
127.0.0.1 app2.cas.com

访问cas服务

tomcat起来后,我们可以这样访问cas服务:https://sso.cas.com:8443/cas/login
登录界面如下所示:
微服务开发之单点登录_第1张图片

编译并运行测试服务

我的测试代码基于这源码项目进行了部分修改:https://github.com/willwu1984/springboot-cas-shiro。
对项目通过mvn package命令完成打包后, 在》/target下找到可执行文件cas-0.0.1-SNAPSHOT.jar
启动测试服务:

$java -jar target/cas-0.0.1-SNAPSHOT.jar
// ...
2018-07-13 15:32:04.542  INFO 72755 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 18091 (http)
2018-07-13 15:32:04.547  INFO 72755 --- [           main] cas.Application                          : Started Application in 5.087 seconds (JVM running for 5.65)

这时我们浏览器访问 http://app1.cas.com:18091/ , 会发现页面首先被重定向到cas登录认证页面:

https://sso.cas.com:8443/cas/login?service=http://app1.cas.com:18091/shiro-cas

因为当前并没真正接入数据库,可输入默认用户名:密码(casuser:Mellon)进行测试, 这时会跳转回到测试服务的主页:
微服务开发之单点登录_第2张图片

这时我们运行另外一个测试应用服务,假设地址为 http://app2.cas.com:18092/
在同一个浏览器中访问该地址时,会发现已经自动完成登录并进入主界面。

你可能感兴趣的:(Effective,JAVA,微服务实践)