Keycloak の設定
config.json
{
"oidc_providers": {
"keycloak": {
"display_name": "Sign in with keycloak",
"provider_url": "https://keycloak.example.com/realms/master",
"client_id": "***",
"client_secret": "***",
"redirect_url": "https://semaphore.example.com/api/auth/oidc/keycloak/redirect"
}
}
}
グループによるプロジェクトのロール Enterprise
グループマッピングを使うには、ユーザーのグループを ID トー クンに入れる mapper を追加します。
- Keycloak Admin Console でクライアントを開き、Client scopes に移動して
<client-id>-dedicatedスコープを開きます。 - By configuration で mapper を追加し、Group Membership を選びます。
- Token Claim Name に
groupsを設定し、Add to ID token をオンにします。 - Full group path でグループの送り方を選びます。オンの場合、Keycloak は各グループのパス(例:
/devops、/platform/sre)を送るため、グループマッピングにもこのパスを指定する必要があります。オフの場合、Keycloak はグループ名だけ(例:sre)を送ります。
次に、プロバイダーに groups_claim を設定します。
config.json
{
"oidc_providers": {
"keycloak": {
"...": "...",
"groups_claim": "groups"
}
}
}
scopes に groups を追加しないでください。Keycloak は知らないスコープを拒否します。この mapper に追加のスコープは必要ありません。
IdP 起点のログイン
ユーザーが Keycloak の Account Console のアプリケーションランチャーから Semaphore を起動できるようにするには、 プロバイダーで IdP 起点のログインを有効にします。
config.json
{
"oidc_providers": {
"keycloak": {
"...": "...",
"allow_idp_initiated": true
}
}
}
次に、Keycloak の管理コンソールでクライアントを開き、Home URL(Keycloak 19 以降。古いバージョンでは Base URL と呼ばれます)を次のように設定します。
https://semaphore.example.com/api/auth/oidc/keycloak/initiate
ユーザーがランチャーでアプリケーションをクリックすると、Keycloak は iss パラメータを付けてこの URL にリダイレクトします。Semaphore は
iss を provider_url(レルムの issuer)と照合して検証し、通常の認可コードフローを開始します。
関連する GitHub Issue
- #2308 — Keycloak サーバーの証明書検証を無効にする方法
- #2314 — TLS 検証を無効にするオプション
- #1496 — Semaphore からログアウトしたときに Keycloak セッションからもログアウトする