1. オープンソースのシングルサインオンシステムCASは、はじめに
1.1 シングルサインオンとは何ですか
シングルサインオン(シングルサインオン)、と呼ばれるSSOは、より人気のある企業のビジネス・インテグレーション・ソリューションの1つです。SSO 複数のアプリケーションで定義され、ユーザーは相互信頼のすべてのアプリケーションにアクセスするには、一度ログインする必要があります。
そこに多くのサブシステム、当社の現在のシステムがあり、これらのサブシステムは、異なるサーバーに展開され、その後の伝統的な方法を使用セッションを解決できない、我々は解決するために、シングルサイン関連の技術を使用する必要があります。
1.2 何であるCAS
CASがあるエールを狙っ、大学主催のオープンソースプロジェクトのWeb シングルサインオンのアプリケーションの信頼性の高い方法を提供すること、CAS で2004 インディアン12は正式ヶ月になったJA-SIGのプロジェクト。CASは、次の特性があります。
[1] オープンソースのエンタープライズシングルサインオンの溶液。
[2] CASサーバーの別の展開要求するウェブアプリケーションを。
[3] CASクライアントのクライアントのサポート非常に多数(ここでは、様々なシングルサインオンシステムを意味するウェブアプリケーション)を含む、ジャワ、.NET、PHP、Perlの、アパッチ、uPortal、ルビーようにと。
構造上の観点からは、 CASは:2つの部分から構成CASサーバーおよびCASクライアント。CASサーバーは、ユーザーの認証の主な原因別の展開を、必要とする; CASクライアントは、必要なログに記録されたがにリダイレクト場合、保護されたリソースにアクセスするためのクライアント要求を処理する責任があるCASサーバー。下の図は、ある CAS 基本合意プロセス:
SSO シングルサインオンのプロセスへのアクセス以下の手順は次のとおりです。
1. アクセスサービス:SSOのクライアントは、システムによって提供されるリソースサービスアプリケーションにアクセスするための要求を送信します。
2. 方向性認証:SSOのクライアントは、ユーザーの要求をリダイレクトしますSSOのサーバー。
3. ユーザー認証:ユーザ認証。
4. 認可チケット:SSOのサーバーがランダム生成サービスチケットを。
5. 注意事項を確認してください:SSO サーバの認証チケットサービスチケット。正当性を認証した後、クライアントがサービスにアクセスすることを可能にします。
6. ユーザ情報の転送:SSO 認証サーバを経由チケットは、ユーザ認証結果情報をクライアントに送信します。
1.3 CASのサーバーの展開
CAS サーバーは、実際に戦争のパッケージ。
リソースで \ CAS \ソース\のCASサーバー -4.0.0リリース\の-4.0.0 CASサーバモジュール\ ディレクトリ
CAS-サーバのwebapp-4.0.0.warが 変更されます cas.warをにTomcatの下のディレクトリwebappsの下に。開始tomcatに抽出し、自動的に戦争のパッケージを。ブラウザの入力HTTPを:// localhostを:8080 / CAS /ログインは 、ログインページを見ることができます
我々はさらに後にその色の価値を高めることができ、この醜いページに対して何も持たないでください。一時的に達成するための機能に焦点を当てます。
固定されたユーザー名とパスワードがある のcasuser /メロンは、
成功したログインページの後に成功したログインプロンプトにジャンプします
1.4 CASのサーバーの構成
1.4.1 ポートの変更
私たちは8080を使用したくない場合は、ポートアクセスCASを、あなたはポートを変更することができます
(1)変性 TOMCAT ポート
オープン Tomcatのディレクトリのconf \ server.xmlをは 以下の構成を見つけます
ポート 8080 ではなく9100
(2)変更のCAS プロファイルを
CASは変更WEB-INF / cas.propertiesを
server.name =のhttp:// localhostを:9100 |
1.4.2 削除HTTPS 証明書を
CASは、デフォルトで使用されたHTTPS プロトコル、 HTTPSを使用している場合、プロトコルが必要とSSLのセキュリティ証明書を(適用し、購入する機関に特有のものにします)。あなたがセキュリティを要求していない場合は開発段階やテストは、使用することができます HTTPのプロトコルを。私たちは、CASがするよう、設定を変更することによって説明するためにここにいる使用したHTTP プロトコルを。
(1)変性CAS WEB-INF / deployerConfigContext.xml
以下の設定を見つけます
<beanクラス= "org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" |
私たちは、のパラメータを増やす必要があり、Pを:requireSecure =「false」の場合、 requireSecureの安全な認証の必要性に意味属性、つまり、HTTPS 、虚偽が採用されていないことにより、
(2)変更 CAS の / WEB-INF / 春 -立体配置/ ticketGrantingTicketCookieGenerator.xmlを
以下の設定を見つけます
<ビーンID = "ticketGrantingTicketCookieGenerator" クラス= "org.jasig.cas.web.support.CookieRetrievingCookieGenerator" P:cookieSecure = "true" を P:cookieMaxAge = " - 1" P:COOKIENAME = "CASTGC" P:cookiePath = "/ CAS" /> |
パラメータ P:「真の」= cookieSecure 、同じようHTTPS 認証関連、TRUEが使用しているHTTPSの認証は、FALSEが使用されていないHTTPS 認証を。
パラメータ Pは: - 「1」クッキーcookieMaxAge = 、COOKIE 、最大寿命を-1 まだ認証を必要とする、それは、オープンクローズまたは他のウィンドウを再度開くで、現在のウィンドウでのみ有効です、何のライフサイクルではありません。それ以上の必要に応じて変更することができる0 などの数字3600 であることを意味、等3600 認証が不要な、第二は、任意のウィンドウを開きます。
ここでは、falseに変更cookieSecureなり、cookieMaxAgeは に変更 3600
( 3 )変更 WEB-INF /スプリング構成/ CASの warnCookieGenerator.xmlを
以下の設定を見つけます
<ビーンID = "warnCookieGenerator"クラス= "org.jasig.cas.web.support.CookieRetrievingCookieGenerator" |
ここでは、falseに変更cookieSecureなり、cookieMaxAgeは に変更 3600
1.5 CASのクライアント小さな入門デモ
1.5.1 クライアントプロジェクト1つのビル
( 1 )の導入に依存エンジニアリング構造
Mavenの作成プロジェクト(WAR ) casclient_demo1 導入CAS クライアントは、頼りにし、開発Tomcatの実行ポート9001を
<依存性> <! - CAS - > <依存> <groupIdを> org.jasig.cas.client </ groupIdを> <たartifactId> CAS -clientコア</たartifactId> <バージョン> 3.3.3 </バージョン> </依存関係> <依存> <groupIdを>のjavax.servlet </ groupIdを> <たartifactId> サーブレット - API </たartifactId> <バージョン> 2.5 </バージョン> <スコープ>提供</スコープ> </依存関係> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <!-- 指定端口 --> <port>9001</port> <!-- 请求路径 --> <path>/</path> </configuration> </plugin> </plugins> </build> |
(2)添加web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 --> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> <!-- 该过滤器用于实现单点登出功能,可选配置。 --> <filter> <filter-name>CAS Single Sign Out Filter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Single Sign Out Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器负责用户的认证工作,必须启用它 --> <filter> <filter-name>CASFilter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>http://localhost:9100/cas/login</param-value> <!--这里的server是服务端的IP --> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:9001</param-value> </init-param> </filter> <filter-mapping> <filter-name>CASFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器负责对Ticket的校验工作,必须启用它 --> <filter> <filter-name>CAS Validation Filter</filter-name> <filter-class> org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>http://localhost:9100/cas</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:9001</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Validation Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 --> <filter> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <filter-class> org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 --> <filter> <filter-name>CAS Assertion Thread Local Filter</filter-name> <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Assertion Thread Local Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> |
(3)编写index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>一品优购</title> </head> <body> 欢迎来到一品优购 <%=request.getRemoteUser()%> </body> </html> |
request.getRemoteUser()为获取远程登录名
1.5.2客户端工程2搭建
(1)创建Maven工程 (war)casclient_demo2 引入cas客户端依赖并制定tomcat运行端口为9002
(2)创建web.xml,参照casclient_demo1 ,将serverName的值改为http://localhost:9002,一共两处
(3)创建index.jsp ,内容显示“欢迎来到二品优购”
1.5.3单点登录测试
(1)启动cas部署的tomcat
(2)启动客户端工程1和客户端工程2
(3)地址栏输入http://localhost:9001/ 和http://localhost:9002/ ,地址均会跳转到CAS登录页
(4)输入用户名和密码后,页面跳转回9002 ,再次访问9001也可以打开主页面。
1.5.4单点退出登录
地址栏输入 http://localhost:9100/cas/logout
即可看到退出后的提示页面
我们可以将这个链接添加到index.jsp中
<a href="http://localhost:9100/cas/logout">退出登录</a> |
但我们更希望退出登录后,能自动跳转到某个页面,那如何处理呢?
修改cas系统的配置文件cas-servlet.xml
<bean id="logoutAction" class="org.jasig.cas.web.flow.LogoutAction" p:servicesManager-ref="servicesManager" p:followServiceRedirects="${cas.logout.followServiceRedirects:true}"/> |
改为true后,可以在退出时跳转页面到目标页面,修改index.jsp的退出链接
<a href= "http://localhost:9 1 00/cas/logout?service=http:// www.baidu.com ">退出登录する</a> |
完全な、幸運を!