1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KeycloakとGrowiをコンテナでデプロイして、SAMLを学ぶ

Posted at

こんにちは
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

最近、本業でSAML認証に絡んだ検証をしないといけなくなり、ちょっと環境を作りたくなったのでKeycloakとGrowiをデプロイして勉強していきたいと思います。
※メモベースなので雑いのですが、そのうち整備します。

Keycloakとは

Red Hatによって開発されたオープンソースのアイデンティティ・アクセス管理(IAM: Identity and Access Management)ソフトウェア。Webアプリケーションやサービスに対して、最小限の労力で認証機能を追加し、セキュリティを確保することが可能になる。

今回構築する環境

Linuxに環境を用意するのが面倒だったので、今回はWindows11にWSLとDockerDesktopをインストールして、そこでデプロイをしております。

構築

Keycloakのデプロイ

C:\Users\ohtsu>docker run -d -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:26.0.6 start-dev

Growi

MongoDBのデプロイ

C:\Users\ohtsu>docker run -d --name growi-mongodb --restart unless-stopped -v growi-mongodb-data:/data/db -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=password mongo:7

Growiのデプロイ

C:\Users\ohtsu>docker run -d --name growi --restart unless-stopped --link growi-mongodb:mongodb -p 3000:3000 -e MONGO_URI=mongodb://admin:password@mongodb:27017/growi?authSource=admin -e PASSWORD_SEED=changeme -e FILE_UPLOAD=local weseek/growi:7

KeycloakでSAML環境用意 #1

http://localhost:8080にアクセスします。
以下の画面が表示されるので、admin:adminでログインします。

image.png

以下のような画面が表示されます。

image.png

画面左上のKeycloakを押下して、Create realmを押下します。

image.png

growiという名前のrealmを作成します。

image.png

growiという名前のrealmがアクティブになっていることを確認します。
画面左のClientsを押下してCreate Clientを押下します。

image.png

Client Type:SAML
Client ID:growi
Name:growi
として作成していきます。
※スクショだと少しミスってますが、Client IDはgrowiにします。

image.png

Root URL: http://localhost:3000/
Home URL: http://localhost:3000/
Valid redirect URIs: http://localhost:3000/*
Master SAML Processing URL: http://localhost:3000/passport/saml/callback※
※これはGrowi側で定義されているものを記載する。
こちらで作成をしていきます。

image.png

作成されたことを確認します。

image.png

Clients > Growi > Settings > SAML capabilitiesを見ます。
デフォルトですが、以下のようになっていることを確認します。
Name ID format: username
Force POST binding: ON
Include AuthnStatement : ON

image.png

同じくSignature and Encryption配下のようになっていることを確認します。
Sign documents: ON
Sign assertions: ON
Signature algorithm: RSA_SHA256
SAML Signature Key Name : KEY_ID
Canonicalization Method : EXCLUSIVE

image.png

Keysタブを見てみます。
デフォルトだとこのように鍵が作成されております。

image.png

Client Signature requiredをOffにしておきます。
image.png

GrowiでのSAML環境用意

http://localhost:3000にアクセスします。
Growiアカウントを作成します。

image.png

Growiのウェルカムページが表示されます。

image.png

設定画面からアプリ設定を開きます。
Databaseにhttp://localhost:3000と入力して更新をかけます。

image.png

設定画面からセキュリティ設定を開きます。
SAMLが無効化されているので、有効化します。

image.png

有効化した後の結果です。
コールバックURLはKeycloakのAccess settingsで使用しています。
アプリ設定で設定を事前にしておくことでコールバックURLはスクショのようなものではなくhttp://localhost:8080/realms/growi/protocol/samlのようなものになっていると思います。

image.png

KeycloakのRealm settingsのKeysからRS256のCertuficateをコピーします。

http://localhost:8080/realms/growi/protocol/samlをGrowiのエントリーポイントにペーストします。
image.png

発行者:growi

証明書は少し癖になりますので、細かく書きます。
証明書:KeycloakのKeysのRS256を貼り付けます。

image.png

image.png

これを

MIICmTCCAYECBgGa5JU3nDANBgkqhkiG9w0BAQsFADAQMQ4wDAYDVQQDDAVncm93aTAeFw0yNTEyMDMxNDE3NTVaFw0zNTEyMDMxNDE5MzVaMBAxDjAMBgNVBAMMBWdyb3dpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2BkqZUE3vGOkF3svKgrDCsXrmvPWyxc262JgIvyCvj0Hyhn0DAwEYmkTrKRHS33y7AyDzRT9X8akdmarO1B4tZeCnQp+IiUU6prQ0ERIjjbGwcQaUQ71Tlm5TillZP53RJj5oFLacAK96GvdTUh1NowwwYEHgazTN9RxigE4onCOl6BZzhAqNFAuqRi6rF4o3//XNhgcLG1UpGl0KHFHCgzUhci4BxoLK+rXLr+ymYFtwR8jFzwhcHIx/Z5fn+5jNFd8C3brtLMXZI97FwxdCVP+xP5002uGwAA0K6QU2U9Xe2acOIeswJKP7EAG9fHZkUImrGmPQEoaVpC2+lUIGQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCUu/KzFaW3Ye5RwoZJ08KRiRR08B4WTqlIJMro3HC2td/kX282BNWp9eGOf+d1YdPlQgHR/wBrQgWgmWu+tbO5MNpAbDjuPD7nJUty+DuAlJ54VjJa1VIXo0C1J6eAwwjzi/HRWS9iWI1LBQVvzUlqefRMTaHGMz3rVFp28cC31aYa52h9t75XhOPlyuEuqMHwU9WX+8ujJNMFC+Do3E72aPMjcgtm5VpeCOXBlq4O/lOtnFjOUw2qfVhSRd1lKfNUQ9NFFbU+HO6IuB/4wGT9TrSxnUzeYkdziNtsJQsDkSjzzqd3JdSH2ehMy5LUg0qhgp4GxcIpZNALyXZ4VsOU

こうします。前後に-----BEGIN CERTIFICATE-----と-----END CERTIFICATE-----を入れます

-----BEGIN CERTIFICATE-----
MIICmTCCAYECBgGa5JU3nDANBgkqhkiG9w0BAQsFADAQMQ4wDAYDVQQDDAVncm93aTAeFw0yNTEyMDMxNDE3NTVaFw0zNTEyMDMxNDE5MzVaMBAxDjAMBgNVBAMMBWdyb3dpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2BkqZUE3vGOkF3svKgrDCsXrmvPWyxc262JgIvyCvj0Hyhn0DAwEYmkTrKRHS33y7AyDzRT9X8akdmarO1B4tZeCnQp+IiUU6prQ0ERIjjbGwcQaUQ71Tlm5TillZP53RJj5oFLacAK96GvdTUh1NowwwYEHgazTN9RxigE4onCOl6BZzhAqNFAuqRi6rF4o3//XNhgcLG1UpGl0KHFHCgzUhci4BxoLK+rXLr+ymYFtwR8jFzwhcHIx/Z5fn+5jNFd8C3brtLMXZI97FwxdCVP+xP5002uGwAA0K6QU2U9Xe2acOIeswJKP7EAG9fHZkUImrGmPQEoaVpC2+lUIGQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCUu/KzFaW3Ye5RwoZJ08KRiRR08B4WTqlIJMro3HC2td/kX282BNWp9eGOf+d1YdPlQgHR/wBrQgWgmWu+tbO5MNpAbDjuPD7nJUty+DuAlJ54VjJa1VIXo0C1J6eAwwjzi/HRWS9iWI1LBQVvzUlqefRMTaHGMz3rVFp28cC31aYa52h9t75XhOPlyuEuqMHwU9WX+8ujJNMFC+Do3E72aPMjcgtm5VpeCOXBlq4O/lOtnFjOUw2qfVhSRd1lKfNUQ9NFFbU+HO6IuB/4wGT9TrSxnUzeYkdziNtsJQsDkSjzzqd3JdSH2ehMy5LUg0qhgp4GxcIpZNALyXZ4VsOU
-----END CERTIFICATE-----

入力結果は以下となります。

image.png

ID: id
username: username
メールアドレス: email
名:firstName
姓:lastName
これはKeycloak側の設定に合わせます。

image.png

KeycloakでSAML環境用意 #2

Clients > Client details > Dedicated scopes
Configure new mapperを押下します。

image.png

User Propertyを選択します。

image.png

image.png

image.png

image.png

image.png

image.png

Name Mapper Type Property Friendly Name SAML Attribute Name SAML Attribute NameFormat
username User Property username username username Basic
id User Property id id id Basic
email User Property email email email Basic
firstName UserProperty firstname firstname firstname Basic
lastName UserProperty lastname lastname lastname Basic

全て作成後のMapperの画面

image.png

Userを作成する。
image.png

image.png

testユーザのパスワードを設定しておきます。

image.png

image.png

image.png

ログイン確認

SAMLでログインを選択します。
image.png

SAMLで作成したユーザを指定します。
image.png

ログイン出来たことを確認します。OKですね。
image.png

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?