CentOS7+CAS5.3の構築メモ
はじめに
CAS(オープンソースのSingle Sign-Onサーバ)について個人的に調べたメモ。
個人用なので参考程度に...
環境について
以下を用いた。OSとJavaとCAS以外はあまりバージョンにこだわっていないです。
- CentOS 7.6
- Java 1.8 (CentOS7の標準)
- CAS 5.3系
- MySQLのテーブルを使って認証
- Tomcat 9
- nginx 1.15.12
CASのバージョン・プロトコル等
CASバージョン | 対応するJavaのバージョン | CAS Protocol |
---|---|---|
CAS 3.x | Java 1.6 | 2.0 |
CAS 5.3.x | Java 1.8 | 3.0.2 |
CAS 6.x | Java 11 | 3.0.2 |
CentOS6系がメインだった頃はどこもかしこもCAS3.xだったと思うがCentOS7系がメインとなった今はCAS5.3系が良い気がする。
(保守の観点からyumリポジトリ標準のJavaを使用したい。ソースコンパイルしだすと色々面倒...)
インストールについて
CAS3.xの頃はcas-server-webappをダウンロードしてきて手動でmvn packageをしてcas.warを作成しTomcatでデプロイ、という運用だったが、現在はWar Overlayを使ってビルドする。
必要なものを勝手にダウンロードして頑張ってくれる、らしい。
参考: WAR Overlay Installation
使ってみる
以下のリポジトリを使ってゴニョゴニョする。
リポジトリ:cas-overlay-template,GitHub
$ mkdir ~/tmp
$ cd ~/tmp
$ git clone https://github.com/apereo/cas-overlay-template.git
ブランチ一覧を確認する。今回は5.3を使う
$ git branch -r
origin/4.1
origin/4.2
origin/5.0.x
origin/5.1
origin/5.2
origin/5.3
origin/6.0
origin/HEAD -> origin/master
origin/master
$ git checkout origin/5.3
warを作成するためには中に入っているbuild.shを使う
// というか、先にhelpしてコマンドリストを確認しておこう
$ ./build.sh help
...
// ビルドする
$ ./build.sh package
[INFO] Scanning for projects...
[INFO]
[INFO] Using the MultiThreadedBuilder implementation with a thread count of 5
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building cas-overlay 1.0
[INFO] ------------------------------------------------------------------------
...
[INFO] Building war: /home/user/tmp/cas-overlay-template/target/cas.war
[INFO]
[INFO] --- spring-boot-maven-plugin:1.5.18.RELEASE:repackage (default) @ cas-overlay ---
[INFO] Layout: WAR
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.699 s (Wall Clock)
[INFO] Finished at: 2019-05-15T12:12:07+09:00
[INFO] Final Memory: 36M/347M
[INFO] ------------------------------------------------------------------------
$
$ ls ./target
cas cas.war classes maven-archiver war
BUILD SUCCESSと書かれていれば./target/cas.warが生成されている。それをTomcatとかでホストして使いましょう。終わり。(違)
@@後のカスタマイズでtarget以下を参考にしたりするので、一度ビルドするといいよ。
カスタマイズする
ざっくりいうと以下のファイルを弄る。
- pom.xml
- src/main/resources/*
前者はモジュールの管理を行う。後者はテンプレートや各種設定値のカスタマイズをするのだが、、そもそもフォルダがないので自分で作成する。(ここではまった)
$ mkdir -p src/main/resources
あとはMavenかGradle好きな方を使ってゴニョゴニョするらしいよ。(よくわかってない)
今回はMavenで設定。
認証方法をMySQLにしてみる
標準ではMellonという認証らしい。(なるほどわからん)
LDAPや各種DBの認証に対応しているが、今回はMySQLのオレオレ認証テーブルを使う。
各種モジュールの追加
- 設定ファイル: pom.xml
DB接続モジュールと、JsonServiceRegistryを追加する。
※JsonServiceRegistryってなんだ?ってなるが認証元ドメインを管理するために必要、、多分。
バックアップを取ってから以下のように変更。
(本当はリポジトリをForkして管理しよう..。)
$ cp -p pom.xml pom.xml.org
$ vi pom.xml
125 <!--
126 ...Additional dependencies may be placed here...
127 -->
+ 128 <dependency>
+ 129 <groupId>org.apereo.cas</groupId>
+ 130 <artifactId>cas-server-support-jdbc</artifactId>
+ 131 <version>${cas.version}</version>
+ 132 </dependency>
+ 133 <dependency>
+ 134 <groupId>org.apereo.cas</groupId>
+ 135 <artifactId>cas-server-support-jdbc-drivers</artifactId>
+ 136 <version>${cas.version}</version>
+ 137 </dependency>
...
+ 145 <!-- It means, enable to /etc/cas/config/services/*json -->
+ 146 <dependency>
+ 147 <groupId>org.apereo.cas</groupId>
+ 148 <artifactId>cas-server-support-json-service-registry</artifactId>
+ 149 <version>${cas.version}</version>
+ 150 </dependency>
MySQLを使った認証にする
- 設定ファイル: application.properties
今回は以下のように設定したい。適宜読み替えてください。
項目 | 設定値 |
---|---|
DBインスタンス | casdb |
DBユーザ名 | dbuser |
DBパスワード | dbpassword |
テーブル | users |
IDカラム | loginid |
パスワードカラム | passwd |
パスワードのエンコード | MD5(SHA-1とかある) |
Encoding | UTF-8 |
先程素の状態で一度build.shを叩いているので、targetフォルダが生成されいているはず。そこから編集したいファイルをコピーします。※本当はapplication.propertiesファイルをいじらずに*.ymlをいじれと書かれているのだが方法がわかっていない。ヘルプ。
まずはコピー。
$ cp target/cas/WEB-INF/classes/application.properties src/main/resources/.
Mellon認証の設定を削除
いじる。以下の行以外いらないので、がさっと削除。
$ vi src/main/resources/application.properties
// Mellon使わないのでコメントアウトする
+ #cas.authn.accept.users=casuser::Mellon
DB設定を追記
cas.authn.jdbc.query[0].sql=SELECT * FROM users WHERE loginid=?
cas.authn.jdbc.query[0].url=jdbc:mysql://database.example.com:3306/casdb
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
cas.authn.jdbc.query[0].user=dbuser
cas.authn.jdbc.query[0].password=dbpassword
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
cas.authn.jdbc.query[0].fieldPassword=passwd
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
サービスURLの設定箇所を追記
あとから設定するのでとりあえず書いておく。
cas.serviceRegistry.watcherEnabled=true
cas.serviceRegistry.initFromJson=false
cas.serviceRegistry.json.location=file:/etc/cas/services
サービスURLの登録
- 設定箇所: /etc/cas/services/*json(新規作成)
※Tomcatサーバから読めるようなパーミッションにすること
$ sudo mkdir -p /etc/cas/services
$ sudo vi /etc/cas/services/myservice-1001.json
// 中身はこんな感じ、任意のものに変更する
{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "https?://www.example.com.*",
"name" : "HTTPS/IMAPS wildcard",
"id" : 1001,
"evaluationOrder" : 99999,
// "theme" : "mytheme" // テーマを作るときのみ記載する
}
serviceIdは正規表現が使える。緩めに設定しないと後で(casclient側からのアクセス時に厳密に一致している必要がある)困ったりする。
デザイン(テーマ)変更
- 設定箇所: src/main/resources/*
targetフォルダから必要なファイルを持ってきてゴニョゴニョする。
テーマを作成することが可能。
参考:Dynamic Themes
CSS, JSのカスタマイズ
自分の場合はテーマを作らずにダイレクトに変更した。
以下のファイルを新規作成する、中身は適当に読み替える。
- src/main/resources/cas-theme-default.properties
cas.standard.css.file=/css/mycas.css
cas.admin.css.file=/css/admin.css
cas.javascript.file=/js/cas.js
設定したファイルは以下へ配置
src/main/resources/static/
.
├── css
│ ├── admin.css
│ └── mycas.css
├── images
│ └── custom_logo.png
└── js
└── cas.js
テンプレートのカスタマイズ
- 設定箇所: src/main/resources/templates/*
templatesフォルダを始めに作成し、変更したいファイルをコピーしてくる。
自分が変更したのは以下のファイル...(雑に説明)
src/main/resources/templates/
.
├── casLoginView.html
├── casLogoutView.html
├── fragments
│ ├── footer.html // JSのインクルードはこのへん
│ ├── header.html // ヘッダ画像とか
│ ├── loginform.html
│ └── loginsidebar.html
├── layout.html // CSSのincludeはこのへん
CAS protocolの変更
TODO:
再ビルド
これまでの更新をwarに再度まとめる。
./build.sh package
cas.warをTomcatに投げてデプロイする。
nginx
TODO:
こんなかんじにホストする。(投げやり)
upstream tomcat-sso {
server 127.0.0.1:18080; // 自分のTomcatのListenAddressを使うこと
}
server {
listen 443 ssl http2;
server_name www.example.com;
...
location /cas {
proxy_http_version 1.1;
proxy_pass http://tomcat-sso/cas;
proxy_redirect http://tomcat-sso/cas /;
proxy_cookie_path /cas /;
}
}
おつかれさまでした。
Author And Source
この問題について(CentOS7+CAS5.3の構築メモ), 我々は、より多くの情報をここで見つけました https://qiita.com/ringobouya/items/d7aaa308a92f7d09ad91著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .