既存のシステムは、外部からのアクセスを必要とするため、シングルサインオンは、三の者の支援を必要としています。システム自体はマイクロサービスアーキテクチャ、サブシステムの運用独立の複数であるため、その独自のマイクロユーザ認証サービスを持っている(いないCASは、我々は十分なインフラを持っている、そして今増やすことなく増加することはできません)。顧客及びその他のアクセス(パブリック・クラウド・ネットワーク)理由は、トークン+のRedisのでは達成できないので、しかし、それはまた、外部CASのサポートを必要とします。
偽サインオンの実装を使用して、史郎が達成史郎+トークンサービス・サブシステムを使用した認証システムを既存の。今では認証サブシステムを通じて三部システム構成設定をサポートするためのCASログインが有効になっています。これは、独自の認証の実装、または三者CASを使用するかどうかは、全体のプロセスは完全に異なっています。
CASサーバーを設定します
ここで説明されていない最初からCAS 4、それはもはや今度は、公式リリース戦争を提供し、ソースコードパッケージをダウンロードする必要があり、オンラインの多くは、(ダウンロードは少し遅い依存)。4.xおよび戦争前にはhttps://mvnrepository.com/artifact/org.jasig.cas/cas-server-webappからダウンロードすることができます。ダウンロードした後、Tomcatのwebappディレクトリにそれを抽出します。
起動します。
次の設定を変更します。
認定除去します。https:
Tomcatの\ webappsに\ CAS \ WEB-で INF \ deployerConfigContext.xml ファイル のHttpClient-REF = "HttpClientを"追加バックP:requireSecure = "false"を、pの Tomcatの\ webappsに\ CAS \ WEB- INF \春・コンフィギュレーションの ticketGrantingTicketCookieGenerator P内部の.xmlファイル:cookieSecure = falseに変更「真」; P-:クッキーcookieMaxAge =「 - 1」3600に変更されました(-1ログイン情報を保存し、3600秒は1時間で、クッキーを保存しない) のtomcat \ webappsに\へカスの\ WEB-INF \ spring-設定の PのwarnCookieGenerator.xml:cookieSecure = "true"に偽の読み P-を:クッキーcookieMaxAge = " - 1"は3600に変更されました
シングルアウトを構成します:
trueに括弧内の\ \ \値:WEB-INF CASのwebapps \ Tomcatは$ {偽} cas.logout.followServiceRedirectsで-servlet.xmlをCAS
認証は、簡単なテスト(<beanクラス=「org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler」/>メモを削除する)構成やデータ発信元認証に基づくことができる(https://www.cnblogs.com/wlwl/参照P / 10056067.html)。
クライアント統合CAS春ブーツ
ライブラリの依存関係:
< 依存性> < のgroupId > net.unicon.cas </ のgroupId > < たartifactId > CAS-クライアント自動構成サポート</ たartifactId > < バージョン> 1.5.0-GA </ バージョン> </ 依存> < 依存性> < のgroupId > org.jasig.cas.client </ groupIdを> < たartifactId > CAS-クライアントコア</ たartifactId > <バージョン>3.2.1 </ バージョン> < 除外> < 除外> < たartifactId >サーブレットAPI </ たartifactId > < groupIdを>のjavax.servlet </ groupIdを> </ 除外> </ 除外> </ 依存>
application.properties次の構成に追加します。
cas.server-URLプレフィックス=にhttp:// localhost:8080 / CAS
cas.serverログイン-URL =にhttp:// localhost:8080 / CAS /ログイン
cas.clientホスト-URL =のhttp:// localhostを: 18080 /
cas.useセッション=真
cas.validation型= CAS
casClientLogoutUrl =にhttp:// localhost:8080 / CAS /ログアウト・サービス=のhttp:// localhostを:18080 / tabase /のlogout.html
輸入net.unicon.cas.client.configuration.EnableCasClient。 @EnableCasClient // 启用CASクライアント @CloudApplication パブリック クラスConsumerStarter { 公共 静的 ボイドメイン(文字列[]引数){ CloudBootstrap.run(ConsumerStarter。クラス、引数)。 } } パッケージcom.hs。 輸入java.util.HashMapを; 輸入java.util.Map; 輸入org.jasig.cas.client.authentication.AuthenticationFilter。 輸入org.springframework.beans.factory.annotation.Value。 インポートorg.springframework.boot.web.servlet.FilterRegistrationBean; 輸入org.springframework.context.annotation.Bean。 輸入org.springframework.context.annotation.Configuration。 @Configuration パブリック クラスCASAutoConfig { @value( "$ {cas.server-URLプレフィックス}" ) プライベート文字列serverUrlPrefix。 @value( "$ {cas.serverログイン-URL}" ) プライベート文字列serverLoginUrl。 @value( "$ {cas.client-ホストURL}" ) プライベート文字列clientHostUrl。 / ** *授权过滤器 * @return * / @Bean 公共FilterRegistrationBean filterAuthenticationRegistration(){ FilterRegistrationBean登録 = 新しいFilterRegistrationBean()。 registration.setFilter(新しいAuthenticationFilter()); // 设定匹配的路径 registration.addUrlPatterns( "/ *" ); 地図 <文字列、文字列> initParameters = 新しい HashMapの<文字列、文字列> (); initParameters.put( "casServerLoginUrl" 、serverUrlPrefix)。 initParameters.put( "serverNameの" 、clientHostUrl)。 // 忽略的URL、 "|" initParameters.put( "ignorePattern"、 "/ジンバブエログアウト/成功| /インデックス" ); ; registration.setInitParameters(InitParameters) // セットロード順 (1 registration.setOrder ); 戻り値の登録; } }
史郎アナログログイン(史郎は、既存の認証フレームワークを変更しません)
CASのログインに成功すると、アプリケーションはユーザー名が含まれているチケットを、返します。このとき、アプリケーションはUserFilterホームは、あなたがチケットのHttpServletRequest上のユーザー名かどうかを判断でき史郎フィルタを、インターセプトされ、有効なユーザー名があり、そして、あなたはユーザ名シミュレーションをログに記録することを使用することができます。だから全体の認証プロセス史郎ほとんど変化、FormAuthenticationFilterを変更する必要はありません。
CASは、ユーザー名2.xおよび3.xのバージョンが同じではありません得る、それは注意すべきです。
バージョン2.xのクライアントの取得方法は、ユーザー名CASは渡さ:
// 以下三者都可以 session.getAttribute(CASFilter.CAS_FILTER_USER)。 session.getAttribute( "edu.yale.its.tp.cas.client.filter.user" ); CASFilterRequestWrapper reqWrapper = 新しいCASFilterRequestWrapper(リクエスト)。 reqWrapper.getRemoteUser())。
バージョン3.xクライアントの取得方法は、ユーザー名CASは渡さ:
HttpServletRequestのリクエスト= ServletActionContext.getRequest()。 AttributePrincipal主 = (AttributePrincipal)request.getUserPrincipal(); 文字列名 = principal.getName(); ロングorgnId = Long.parseLong(principal.getAttributes()( "orgnId")を取得するのtoString()。。);
取得した後、我々は着陸をシミュレートすることができます。
ブール isAllowed = スーパー.isAccessAllowed(要求、応答、mappedValue)。 // もし(isAllowed){ } そう であれば(Boolean.valueOf(BaseConfig.getConfig( "ta.casEnable"、 "偽" ))){ AttributePrincipal主 = (AttributePrincipal)((HttpServletRequestの)要求).getUserPrincipal(); 文字列名 = principal.getName(); 被験者被験者 = getSubject(リクエスト、レスポンス)。 AuthenticationTokenトークン = 新 UsernamePasswordToken(); ((UsernamePasswordToken)トークン).setUsername(ユーザー名); ((UsernamePasswordToken)トークン).setPassword(新しい 文字 [] { '1' })。 subject.login(トークン)。 isAllowed = スーパー.isAccessAllowed(要求、応答、mappedValue)。 }
shiro登出
中史郎さんlogoutFilterではsession.invalidate()を呼び出しすることができます。その後、CASを撤回するようにアドレスcasClientLogoutUrlを返します。
/ ** * CAS添加开始 * / 場合(StringUtils.isNotBlank(BaseConfig.getConfig( "casClientLogoutUrl" ))){ ((HttpServletRequestの)要求).getSession()(無効)。 redirectUrl = BaseConfig.getConfig( "casClientLogoutUrl" )。 } // CAS添加结束 返し redirectUrlを。
敬具、CAS +史郎シミュレートログインの完全な実装に。
CASチケットの有効期限ポリシーを参照します。https://www.cnblogs.com/gao241/p/3367869.html
CASのプロセスの説明を参照します。https://www.cnblogs.com/xiatian0721/p/8136305.html
CASの公式スキーマ参照します。https://apereo.github.io/cas/5.3.x/planning/Architecture.html