LoginSignup
3
0

More than 3 years have passed since last update.

CentOS7+CAS5.3の構築メモ

Last updated at Posted at 2019-05-15

はじめに

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 /;
    }
}

おつかれさまでした。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0