LoginSignup
10
8

More than 3 years have passed since last update.

Keycloakを使ってSAMLを理解する#1

Last updated at Posted at 2020-01-25

Azure上のCentOSに、Keycloakとサンプルアプリを入れて、SAMLを使ったログインの動作検証を行ったメモです。

環境

  • Azure
  • CentOS Linux release 7.7.1908 (Core)
  • OpenJDK 1.8.0
  • Apache Maven 3.6.3
  • Keycloak 8.0.1

システム構成

Untitled Diagram.png

1.CentOS

CentOSのセットアップ

Azureに仮想マシンをデプロイします。

項目 設定
仮想マシン名 CentOS7Keycloak
地域 東日本
イメージ CentOS-based 7.7
サイズ Standard B1s(1vcpu,1GiBのメモリ)
認証の種類 パスワード
ユーザー名 gebo
パスワード xxxx
受信ポートを選択 SSH(22)
OSディスクの種類 Standard HDD
タイムゾーン (UTC+09:00)大阪、札幌、東京

Keycloakが使うポート8080を開放します
以下手順です。
[Azule]
→[仮想マシン]
→[CentOS7Keycloak]
→[受信ポートの規則を追加する]
→[受信セキュリティ規則の追加]
宛先ポート範囲=8080
→追加

接続確認

CentOSのデプロイが完了したらmac標準のターミナルアプリで接続確認しておきます。

ターミナル
$ssh gebo@x.x.x.x
[Password:xxxx
// これで接続できればOK

suzuki_—_gebo_CentOS7Keycloak___—_ssh_gebo_52_185_169_82_—_80×24.png

OpenJDKのインストール

CentOSに OpenJDK 1.8.0 をインストールします。
この後、Mavenでビルドするのでdevelも入れます。

// openJDKをインストール
$ sudo yum update -y
$ sudo yum install java-1.8.0-openjdk 
$ sudo yum install java-1.8.0-openjdk-devel

// 確認
$ java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
$ javac -version
javac 1.8.0_232

2.Keycloak

2-1.Keycloakのインストール

CentOSにKeycloakをインストールします。

ダウンロード

Keycloakはの8.0.1です。
以下サイトのStandalone server distributionをダウンロードして解凍します。
https://www.keycloak.org/downloads.html

// ホームに戻ってから実行
$ cd
$ sudo wget https://downloads.jboss.org/keycloak/8.0.1/keycloak-8.0.1.zip
$ unzip keycloak-8.0.1.zip

起動確認

// memo:unzipしたkeycloak-8.0.1で実行
$ cd ~/keycloak-8.0.1
$ ./bin/standalone.sh -b 0.0.0.0
// なんだかんだあって
Keycloak 8.0.1 (WildFly Core 10.0.3.Fin$al) started
と出れば起動OK

suzuki_—_gebo_CentOS7Keycloak___keycloak-8_0_1_—_ssh_gebo_52_185_169_82_—_80×24-2.png

  • memo:Keycloakを終了させるにはCtrl+C

ブラウザchromeから
http:xxx.xxx.xx.xxx:8080/auth/
に接続してWelcome画面が出てくればOK。
[You need ... admin user] と警告のようなものが表示されていますが、そこは次対応します。

Welcome_to_Keycloak.png

これ以降はKeycloakが立ち上がっている状態で作業してください。
サービスにしてしまってもいいかと思います。

2-2.Keycloakの初期設定

  • 管理者ユーザーの追加(admin/admin)
  • HTTP接続許可設定
// memo:unzipしたkeycloak-8.0.1で実行
$ cd ~/keycloak-8.0.1

// Keycloak の管理者ユーザーを作成
$ ./bin/add-user-keycloak.sh -r master -u admin -p admin

// 【重要】
// ここでKeycloakを再起動してください

// 管理者ID(ここではadmin)で認証情報を設定する
$ ./bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin
[Enter password:**** ←これはKeycloakの管理者パスワード(admin)

// SSL requiredを「NONE」に変更
$ ./bin/kcadm.sh update realms/master -s sslRequired=NONE
  • Administration Consoleにログイン

ブラウザで
http:xxx.xxx.xx.xxx:8080/auth/
に接続して
Administration Console
Login
できればOK。

Welcome_to_Keycloak-2.png

Log_in_to_Keycloak.png

Keycloak_Admin_Console.png

2-3.Keycloakへのロールとユーザー登録

これから使うサンプルアプリ用のデータを登録します。

(1)Administration Consoleにログイン

adminでログインします。

(2)ロールの登録

  • デフォルトのMasterのレルム①が左メニュに表示されているかと思いますので、Rolesを選択②し、右側のビューから「Add Role」をクリック③します。

Keycloak_Admin_Console-6.png

  • user Roleを作成します。

Keycloak_Admin_Console-10.png

(3)ユーザー登録

  • デフォルトのMasterのレルム①が左メニュに表示されているかと思いますので、Usersを選択②し、右側のビューから「View all users」をクリック③して登録済みユーザーが表示される④ことを確認します。
  • 「Add user」をクリック⑤します。

Keycloak_Admin_Console-3.png

  • Add user画面でユーザー情報を入力して「save」します。ここではtest1というユーザーを作成しました。

Keycloak_Admin_Console-11.png

  • 作成したユーザーの詳細画面に遷移するので、「Credential」からPasswordをセットします。

Keycloak_Admin_Console-5.png

(4)ユーザーとロールの紐づけ

ユーザー情報画面から「Role Mappings」を選択し、Available Rolesから今作成したユーザーを選択して「Add selected」します。
これでユーザーにロールが割り当てられます。

Keycloak_Admin_Console-12.png

Keycloak_Admin_Console-13.png

3.サンプルアプリ

Keycloak(Idp)とSAMLで接続するSP役のサンプルアプリをインストールします。
Keycloakのサイトにquickstartsというサンプル集がついているのですが、その中のapp-profile-samlというものを使います。
Keycloakと同じ仮想マシン上にインストールします。

Mavenのインストール

このサンプルアプリはビルドが必要なんで、CentOSにMavenをインストールします。

// ホームディレクトリでやります
cd

// ダウンロード
$ curl -OL http://ftp.tsukuba.wide.ad.jp/software/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

// 展開
$ tar -xzvf apache-maven-3.6.3-bin.tar.gz

// optに移動
$ sudo mv apache-maven-3.6.3 /opt/

// 配置
$ cd /opt
$ sudo ln -s /opt/apache-maven-3.6.3 apache-maven

// apache-mavenというリンクができていればOK
$ ls -l
total 0
lrwxrwxrwx. 1 root root 23 Jan 13 03:08 apache-maven -> /opt/apache-maven-3.6.3
drwxrwxr-x. 6 gebo gebo 99 Jan 13 03:07 apache-maven-3.6.3
drwxr-xr-x. 2 root root  6 Oct 30  2018 rh

mvnのパスを追加する

.bash_profileをviで開く
$ vi ~/.bash_profile
.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

# PATHに/opt/apache-maven/binを追加
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/opt/apache-maven/bin

export PATH
変更した.bash_profileを反映する
$ source ~/.bash_profile

クライアントアダプタのインストール

widlfly SAMLのクライアントアダプタをインストールします

// ホームディレクトリでやります
cd

// ダウンロード
$ sudo wget https://downloads.jboss.org/keycloak/8.0.1/adapters/saml/keycloak-saml-wildfly-adapter-dist-8.0.1.zip

// ダウンロードしたzipをインストールする
$ cp keycloak-saml-wildfly-adapter-dist-8.0.1.zip ./keycloak-8.0.1
$ cd keycloak-8.0.1
$ unzip keycloak-saml-wildfly-adapter-dist-8.0.1.zip
$ ./bin/jboss-cli.sh -c --file=bin/adapter-elytron-install-saml.cli
// memo:{"outcome" => "failed"}の場合は失敗しているので、Keycloakを再起動してからやってみましょう
{"outcome" => "success"}
{
    "outcome" => "success",
    "response-headers" => {
        "operation-requires-reload" => true,
        "process-state" => "reload-required"
    }
}
{
    "outcome" => "success",
    "response-headers" => {"process-state" => "reload-required"}
}
{
    "outcome" => "success",
    "response-headers" => {"process-state" => "reload-required"}
}
{
    "outcome" => "success",
    "response-headers" => {"process-state" => "reload-required"}
}
{
    "outcome" => "success",
    "response-headers" => {"process-state" => "reload-required"}
}
{
    "outcome" => "success",
    "response-headers" => {"process-state" => "reload-required"}
}
{
    "outcome" => "success",
    "response-headers" => {"process-state" => "reload-required"}
}
{
    "outcome" => "success",
    "response-headers" => {"process-state" => "reload-required"}
}

Quickstarts distributionのインストール

app-profile-saml-jee-jspの設定

README app-profile-saml-jee-jsp: HTML5 Profile Application with SAMLの通りにやります。

  • Open the Keycloak admin console
  • レルムMasterのConfigureでClientを選択
  • Createをクリック
  • Add Client画面で以下設定:
    • Client ID: app-profile-saml
    • Client Protocol: saml
    • Save
  • App-profile-saml画面で以下設定:
    • Valid Redirect URIs: http://x.x.x.x:8080/app-profile-saml/*
    • Base URL: http://x.x.x.xxx:8080/app-profile-saml/
    • Master SAML Processing URL: http://x.x.x.x:8080/app-profile-saml/saml
    • Force Name ID Format: ON
    • Save
  • Mappers画面で以下設定:
    • Add Buildtinをクリック
    • X500 email,role list,X500 givenName,X500 surnameがリストに表示されるのですべてAddのチェックを付けてAdd selectedクリック
  • Installation
    • Select Keycloak SAML Adapter keycloak-saml.xml
    • Click Download
    • Edit keycloak-saml.xml and replace SPECIFY YOUR LOGOUT PAGE!/index.jsp
    • Move the file keycloak-saml.xml to the config/ directory in the root of the quickstart
  • keycloak-saml.xmlをCentOSに転送する
macのコンソールアプリ
18:13:10 ~ $ scp -r /Users/suzuki/Downloads/keycloak-saml.xml gebo@x.x.x.x:/home/gebo/keycloak-quickstarts-latest/app-profile-saml-jee-jsp/config

app-profile-saml-jee-jspのインストール

app-profile-saml-jee-jspはSAML接続のサンプルアプリです。
以下の手順でCentOSにデプロイします。

// ホームディレクトリでやります
cd

// ダウンロード
sudo wget https://github.com/keycloak/keycloak-quickstarts/archive/latest.zip

// 解凍
unzip latest.zip

// アプリフォルダに移動
cd keycloak-quickstarts-latest
cd app-profile-saml-jee-jsp/

// デプロイ
mvn clean wildfly:deploy

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  59.403 s
[INFO] Finished at: 2020-01-13T09:37:49Z
[INFO] ------------------------------------------------------------------------

サンプルを起動

  • ブラウザから以下urlに接続すると、最初の画面が表示されるんで、LOGINをクリック

http://x.x.x.x:8080/app-profile-saml

Keycloak_Example_App-2.png

  • Keycloakのログイン画面が表示されるんで、さっき作成したユーザー(test1)でログインします。

Log_in_to_Keycloak-3.png

  • ログインしたユーザーの情報が表示されればOK。

何か設定がおかしいと、こういう画面にはならず、Forbiddenとかになったりします。

Keycloak_SAML_Example_App.png

単にログインして、ユーザー情報を出しているだけですが、
- app-profile-saml=SP
- Keycloak=IdP
という関係でSAMLでやっています。
次回のSAMLの詳細を検証していきたいとおもいます。

おつかれさまでした

SAMLというより、まずは、Keycloakのことが分かっていないと先に進めないところが大変...
次はどんな風にSAMLをやっているのか見ていきます。

10
8
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
10
8