ホームページ >バックエンド開発 >PHPチュートリアル >cas はシングルサインオンとログアウトを実装します (Java および PHP クライアント) (転送)

cas はシングルサインオンとログアウトを実装します (Java および PHP クライアント) (転送)

WBOY
WBOYオリジナル
2016-06-13 12:29:591512ブラウズ

cas はシングルサインオンとログアウトを実装します (Java および PHP クライアント) (転送)

最近のプロジェクトでは、クライアントに Java と php が必要です。Java には ucenter の代わりとなるアプリケーションがいくつかあり、これには

が必要です。

?

これらのクライアントのシングル サインインとログアウトを有効にするために、オンラインで多くの関連情報を検索し、最終的に今日正常に構成できました。手順は次のとおりです。

?

1. cas サーバー: ダウンロード アドレス: http://downloads.jasig.org/cas/ cas サーバーとクライアントには、最新バージョンと古いバージョンのさまざまなバージョンがあります

?

サーバーの最新バージョンは次のとおりです: cas-server-3.4.4-release.zip

?

cas-server-3.4.4-release.zip を解凍し、モジュール ディレクトリ内の cas-server-webapp-3.4.4.war の名前を cas.war に変更し、

にコピーします。

?

Tomcat Web アプリで Tomcat を起動し、次の場所にアクセスします: http://localhost:8080/cas/loginログイン インターフェースが表示されます:


cas サーバーはデフォルトでユーザー名 = パスワード検証を使用し、tomact 用の証明書を設定する必要があります。https 検証が使用される場合は、次を参照してください。

?

http://blog.csdn.net/haydenwang8287/archive/2010/07/26/5765941.aspx

?

1.1. https 検証を使用しない場合は、サーバーを構成する必要があります

1. casWEB-INFdeployerConfigContext.xml

p:httpClient-ref="httpClient"/>

?

? パラメーター p:requireSecure="false" を追加します。セキュリティ検証が必要かどうか、つまり HTTPS は使用されないことを意味します。追加後は次のようになります:

?

?p:httpClient-ref="httpClient"? p:requireSecure="false"/>

?

2. casWEB-INFspring-configuration

ticketGrantingTicketCookieGenerator.xml

???? p:cookieSecure="true"

???? p:cookieMaxAge="-1"

???? p:cookieName="CASTGC"

???? p:cookiePath="/cas" />

?

パラメータ p:cookieSecure="true" も同様に HTTPS 検証に関連しており、TRUE は HTTPS 検証が使用されることを意味し、FALSE は https 検証が使用されないことを意味します。

パラメータ p:cookieMaxAge="-1" は、簡単に言えば、COOKIE の最大ライフ サイクルです。 -1 は、現在開いている IE ウィンドウでのみ有効であることを意味します。他のウィンドウを閉じるか再度開くと、引き続き検証が必要になります。必要に応じて、3600 など、0 より大きい数値に変更できます。これは、3600 秒以内に IE ウィンドウを開くには検証が必要ないことを意味します。

?

1.2. サーバー側出口アクセス: http://localhost:8080/cas/logout

?

?

終了後に戻れるようにするには、

を設定する必要があります

サーバー側の cas-servlet.xml 構成

属性 p:followServiceRedirects="true" を追加

?

終了リンクは次のとおりです: http://localhost:8080/cas/logout?service=http://localhost:8080/Casclient/index.jsp

?

1.3. サーバー側の検証方法を変更し、データベース検証を使用します:

構成ファイルdeployerConfigContext.xmlを変更し、dbcp接続プールを追加します: (Oracleを例にします)

?


???
? ??????? >
????????? jdbc:oracle:thin:@192.168.18.26:1521:orcl
??? ?? >????
??????<値
??? ;プロパティ名="パスワード">
????????? <値>テスト
???


?

必要な jar パッケージは次のとおりです: (添付ファイルを参照: cas-server-support-jdbc-3.4.4.jar、commons-dbcp-1.2.1.jar、commons-pool-1.3.jar、ojdbc14_g.jar)

?

暗号化メソッドを構成します。cas には MD5 暗号化が組み込まれており、独自の暗号化クラスを作成して org.jasig.cas.authentication.handler.PasswordEncoder インターフェイスを実装することもできます。

?

??? class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" byName">???? ??? ?

?? ?

デフォルトの検証方法をコメントアウトし、データベースクエリ検証を使用します:

??????

??????

????

?


???
??
????????? ??????? value="userinfo からパスワードを選択 ここで lower(username) = lower ( ?)" />

????

??????

?????


?

---------------これで cas サーバーの構成が完了しました。
?
?

2. Java クライアント構成、クライアントをダウンロードします:

http://downloads.jasig.org/cas-clients /、最新バージョンは: cas-client-3.2.0 ? モジュールの下の jar を Java クライアント Casclient1 のライブラリにコピーし、web.xml でフィルターを構成します。構成は次のとおりです (詳細は添付ファイルを参照)。 <ウェブアプリ version="2.4"

?xmlns="

http://java.sun.com/xml/ns/j2ee

"
?xmlns:xsi="
http:/ /www.w3.org/2001/XMLSchema-instance" ?xsi:schemaLocation="
http://java.sun.com/ xml/ns/j2ee ?
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">?
?
?

?<リスナー>
?????? ;/リスナー>

?

?<フィルター>????????? <フィルター名>CAS シングル サインアウト フィルター
?????? org.jasig.cas.client.session.SingleSignOutFilter
?
?
??? ??<フィルタ名>CASシングルサインアウトフィルタ
??????/*
? /filter-mapping>

??
?
??????? <フィルタ名>CASFilter
??????<フィルタクラス>org.jasig.cas.client.authentication.AuthenticationFilter
?? ???????
????????????casServerLoginUrl
?????? ???????http://192.168.18.8:8080/cas/login
????????? ???
??????? ??????
???? ??????????サーバー名
?????????http:// 192.168.18.8:8989
??????? ;
?

?
?????? CASFilter
??? ?????/*
?

?
?
?
????????? CAS 検証フィルター
??????? 🎜>??????????
????????? casServerUrlPrefix
???????????????http:// 192.168.18.8:8080/cas
???????
???????
??????????????? パラメータ名>
??????????????? ;param-value>http://192.168.18.8:8989

???????
?

?
??????? ;CAS 検証フィルター
??????/*?

?
?
?
?????? ????
???????????? ???? org.jasig.cas.client.util.HttpServletRequestWrapperFilter
?
?????? ??/*
?





??????CAS アサーション スレッド ローカル フィルタ
??????? -class>org.jasig.cas.client.util.AssertionThreadLocalFilter

??????CAS アサーション スレッド ローカル フィルタ

??????/*
?
?
?
??? index.jsp
? -list>



?

ページは次のとおりです:

<%
AttributePrincipal プリンシパル = (AttributePrincipal)request.getUserPrincipal();???
String username =
%>


ログインに成功しました。これはクライアント 1



ユーザー名: < ユーザー名 % >

http://localhost:8989/Casclient2/index.jsp">クライアント 2 を入力

http://localhost:8080/cas/logout?service=http://localhost:8989/Casclient1/index.jsp"> ;終了

?

----------ここで Java クライアントの構成は成功しました。Tomcat に公開し、Casclient1 をコピーして名前を Casclient2 に変更し、Tomcat を起動して、

?

Casclient1 にアクセスしてログイン ページに移動します。ログインに成功すると、Casclient2 にアクセスするとログイン成功ページが表示されます。シングルサインインは成功しました。

?

?

3. PHP クライアントを設定し、PHP クライアントをダウンロードします: http://downloads.jasig.org/cas-clients/php/? 、最新バージョンは: CAS-1.2.0RC2

?

新しい PHP プロジェクト Phpcasclient1 を作成し、CAS フォルダーと CAS.php をプロジェクトにコピーし、CAS/client.php を変更し、https を http に変更し、docs/examples/example_simple.php を変更します

?

それをプロジェクトにコピーし、次のように変更します:

//
// phpCAS シンプルクライアント
//

// phpCAS lib をインポートします
include_once('CAS.php');

phpCAS::setDebug();

// phpCAS を初期化します
phpCAS::client(CAS_VERSION_2_0,'192.168.18.8',8080,'cas');

// CAS サーバーの SSL 検証はありません
phpCAS::setNoCasServerValidation();

// CAS 認証を強制します
phpCAS::forceAuthentication();

// このステップで、ユーザーは CAS サーバーによって認証されています
// ユーザーのログイン名は phpCAS::getUser() で読み取ることができます。

// 必要に応じてログアウトします
if (isset($_REQUEST['logout'])) {

?

?$param=array("service"=>"http://localhost/Phpcasclient1/example_simple.php");// ログアウトして戻ります

?phpCAS::logout($param);


}

// このテストでは、認証が成功したことを出力するだけですl
?>

?
??? ;title>phpCAS シンプル クライアント
?
??? これはクライアント 1
???

ユーザーのログインは
??? p>phpCAS のバージョンは .


???
?? ;p>http://192.168.18.8:8989/Casclient1/index.jsp">Go Javaクライアント 1

????
?

終了< ;/p> ;?

?

php 設定で php_curl を有効にする必要があります。Phpcasclient1 を Phpcasclient2 にコピーできます

?

アクセス: http://localhost/Phpcasclient1/example_simple.php、ログインページにジャンプし、ログイン成功後に Phpcasclient2 にアクセスします。ログインは必要ありません。

?

PHP シングル サインインは成功しました。この時点で、Java クライアントにアクセスする場合、ログインする必要がないことがわかります。php アプリケーションと Java アプリケーション間のシングル サインインは成功しました。

?

注: php の phpCAS::client(CAS_VERSION_2_0,'192.168.18.8',8080,'cas'); のアドレスは Java のアドレスと同じである必要があります。 web.xml の cas サーバー アドレスは一貫しています。まず、IP: 192.168.18.8 とローカルホスト、 を記述します。

PHP と Java は常に同時にログインできず、長い間イライラしていました

?

----------------ここで Java クライアントと php クライアントが設定されました。これで、php と php の間に単一のログアウトがないことがわかります。クライアントが終了すると、Java クライアントも終了します。逆に、Java は終了しますが、php は同期的に終了しません。

?

で構成を行う必要があります。

phpCAS::setNoCasServerValidation();

// CAS 認証を強制しますphpCAS::forceAuthentication();

ここに を追加します

?

phpCAS::setNoCasServerValidation();

// CAS 認証を強制します

phpCAS::handleLogoutRequests();? ここでサーバー側のJava終了通知を検知し、phpとjava間の同期ログアウトを実現できます。

phpCAS::forceAuthentication();

?

?

?

discuz supesite のシングルサインオンについては、php でのシングルサインオンの原理を理解した後、discuz supesite のログインコードを変更する必要があります。 discuz のコードはlogging.phpです。

?

スーパーサイトはbatch.login.phpです。私はJava開発を行っていますが、PHPにはあまり詳しくないので、基本的に、最初にシングルサインインしてユーザーを取得します。名前、ユーザーによると

?

データベース内のパスワードを取得し、それを discuz システム自体のログイン システムに与えてログインします。 discuz は Cookie 検証を使用するため、Java 側で終了した後は discuz は終了しません。

?

誰かが変更に成功した場合は、私たちと共有してください。

?

参考URL:

http://blog.csdn.net/DL88250/archive/2008/08/20/2799522.aspx

http://www.wsria.com/archives/1349

http://tonrenyuye.blog.163.com/blog/static/30012576200922925820471/

http://www.discuz.net/thread-1416206-1-1.html

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。