keycloak
Keycloakのエキスパートとして、シングルサインオンや多要素認証、ユーザー連携など、企業のID管理に必要な機能を導入・カスタマイズ支援し、セキュアな認証基盤を構築するSkill。
📜 元の英語説明(参考)
You are an expert in Keycloak, the open-source identity and access management solution by Red Hat. You help teams implement single sign-on (SSO), OAuth 2.0, OpenID Connect, SAML 2.0, user federation (LDAP/Active Directory), social login, multi-factor authentication, and fine-grained authorization — providing enterprise-grade identity management that can be self-hosted and customized.
🇯🇵 日本人クリエイター向け解説
Keycloakのエキスパートとして、シングルサインオンや多要素認証、ユーザー連携など、企業のID管理に必要な機能を導入・カスタマイズ支援し、セキュアな認証基盤を構築するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o keycloak.zip https://jpskill.com/download/15038.zip && unzip -o keycloak.zip && rm keycloak.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/15038.zip -OutFile "$d\keycloak.zip"; Expand-Archive "$d\keycloak.zip" -DestinationPath $d -Force; ri "$d\keycloak.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
keycloak.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
keycloakフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Keycloak — オープンソースのアイデンティティおよびアクセス管理
あなたは、Red Hat によるオープンソースのアイデンティティおよびアクセス管理ソリューションである Keycloak の専門家です。シングルサインオン (SSO)、OAuth 2.0、OpenID Connect、SAML 2.0、ユーザーフェデレーション (LDAP/Active Directory)、ソーシャルログイン、多要素認証、およびきめ細かい認可の実装をチームが支援します。これらは、セルフホストおよびカスタマイズ可能なエンタープライズグレードのアイデンティティ管理を提供します。
主要な機能
セットアップ
# docker-compose.yml — PostgreSQL を使用した Keycloak
version: "3.8"
services:
keycloak:
image: quay.io/keycloak/keycloak:24.0
command: start-dev
environment:
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://postgres:5432/keycloak
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: ${KC_DB_PASSWORD}
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: ${KC_ADMIN_PASSWORD}
KC_HOSTNAME: auth.example.com
KC_PROXY_HEADERS: xforwarded
ports:
- "8080:8080"
depends_on:
- postgres
postgres:
image: postgres:16
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: ${KC_DB_PASSWORD}
volumes:
- pg_data:/var/lib/postgresql/data
volumes:
pg_data:
クライアント統合 (Next.js)
// src/lib/auth.ts — Keycloak OIDC 統合
import NextAuth from "next-auth";
import KeycloakProvider from "next-auth/providers/keycloak";
export const { handlers, signIn, signOut, auth } = NextAuth({
providers: [
KeycloakProvider({
clientId: process.env.KEYCLOAK_CLIENT_ID!,
clientSecret: process.env.KEYCLOAK_CLIENT_SECRET!,
issuer: `${process.env.KEYCLOAK_URL}/realms/${process.env.KEYCLOAK_REALM}`,
}),
],
callbacks: {
async jwt({ token, account }) {
if (account) {
token.accessToken = account.access_token;
token.refreshToken = account.refresh_token;
token.idToken = account.id_token;
}
return token;
},
async session({ session, token }) {
session.accessToken = token.accessToken as string;
return session;
},
},
});
Admin API
// Keycloak Admin REST API — プログラムでユーザーを管理
const KEYCLOAK_URL = process.env.KEYCLOAK_URL;
const REALM = process.env.KEYCLOAK_REALM;
async function getAdminToken(): Promise<string> {
const res = await fetch(
`${KEYCLOAK_URL}/realms/master/protocol/openid-connect/token`,
{
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
grant_type: "client_credentials",
client_id: "admin-cli",
client_secret: process.env.KEYCLOAK_ADMIN_SECRET!,
}),
},
);
const { access_token } = await res.json();
return access_token;
}
async function createUser(userData: {
username: string;
email: string;
firstName: string;
lastName: string;
}) {
const token = await getAdminToken();
await fetch(`${KEYCLOAK_URL}/admin/realms/${REALM}/users`, {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
...userData,
enabled: true,
emailVerified: true,
credentials: [{ type: "password", value: "temp123", temporary: true }],
}),
});
}
async function assignRole(userId: string, roleName: string) {
const token = await getAdminToken();
// Get role
const rolesRes = await fetch(
`${KEYCLOAK_URL}/admin/realms/${REALM}/roles/${roleName}`,
{ headers: { Authorization: `Bearer ${token}` } },
);
const role = await rolesRes.json();
// Assign to user
await fetch(
`${KEYCLOAK_URL}/admin/realms/${REALM}/users/${userId}/role-mappings/realm`,
{
method: "POST",
headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
body: JSON.stringify([role]),
},
);
}
レルム構成
## Key Concepts
### Realm
- ユーザー、クライアント、ロールのための分離された名前空間
- 各レルムは、独自のログインページ、ユーザーデータベース、設定を持つ
- 例: "production" レルム、"staging" レルム
### Clients
- Keycloak を介して認証するアプリケーション
- タイプ: public (SPA)、confidential (バックエンド)、bearer-only (API)
- リダイレクト URI、CORS、トークンの有効期間を構成する
### Roles
- レルムロール: すべてのクライアントでグローバル (admin、user、moderator)
- クライアントロール: 特定のアプリケーションにスコープされる (api:read、api:write)
- 複合ロール: 複数のロールを 1 つに結合する
### Identity Providers
- ソーシャル: Google、GitHub、Facebook、Apple、Microsoft
- エンタープライズ: SAML (Okta、Azure AD)、LDAP、Active Directory
- カスタム: 任意の OIDC/SAML 2.0 プロバイダー
### Authentication Flows
- ユーザー名/パスワード + OTP (TOTP/HOTP)
- WebAuthn (パスキー、セキュリティキー)
- カスタムフロー (条件付き OTP、必須アクション)
インストール
# Docker (開発)
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:24.0 start-dev
# 本番環境
docker run -e KC_DB=postgres -e KC_HOSTNAME=auth.example.com \
quay.io/keycloak/keycloak:24.0 start --optimized
# Kubernetes (Helm)
helm install keycloak bitnami/keycloak
ベストプラクティス
- 環境ごとのレルム — 開発/ステージング/本番環境用に個別のレルムを用意し、それらの間で構成をエクスポート/インポートします。
- バックエンド用の Confidential clients — クライアントシークレット認証を使用します。フロントエンドアプリでシークレットを公開しないでください。
- ロールによる RBAC — ビジネスロール (admin、editor、viewer) を Keycloak レルム/クライアントロールにマッピングします。
- ソーシャルログイン — 開発者ツールには Google/GitHub を、コンシューマーアプリには Google/Apple を有効にします。
- トークンの有効期間 — アクセストークン: 5 分、リフレッシュトークン: 30 日。セキュリティと UX のバランスを取ります。
- 管理者向けの MFA — すべての管理者アカウントおよび特権アカウントに対して TOTP または WebAuthn を要求します。
- ユーザーフェデレーション — 既存の LDAP/AD に接続します。Keycloak は移行なしでユーザーを同期します。
- レルム構成のエクスポート — レルムをエクスポートします。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Keycloak — Open-Source Identity and Access Management
You are an expert in Keycloak, the open-source identity and access management solution by Red Hat. You help teams implement single sign-on (SSO), OAuth 2.0, OpenID Connect, SAML 2.0, user federation (LDAP/Active Directory), social login, multi-factor authentication, and fine-grained authorization — providing enterprise-grade identity management that can be self-hosted and customized.
Core Capabilities
Setup
# docker-compose.yml — Keycloak with PostgreSQL
version: "3.8"
services:
keycloak:
image: quay.io/keycloak/keycloak:24.0
command: start-dev
environment:
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://postgres:5432/keycloak
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: ${KC_DB_PASSWORD}
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: ${KC_ADMIN_PASSWORD}
KC_HOSTNAME: auth.example.com
KC_PROXY_HEADERS: xforwarded
ports:
- "8080:8080"
depends_on:
- postgres
postgres:
image: postgres:16
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: ${KC_DB_PASSWORD}
volumes:
- pg_data:/var/lib/postgresql/data
volumes:
pg_data:
Client Integration (Next.js)
// src/lib/auth.ts — Keycloak OIDC integration
import NextAuth from "next-auth";
import KeycloakProvider from "next-auth/providers/keycloak";
export const { handlers, signIn, signOut, auth } = NextAuth({
providers: [
KeycloakProvider({
clientId: process.env.KEYCLOAK_CLIENT_ID!,
clientSecret: process.env.KEYCLOAK_CLIENT_SECRET!,
issuer: `${process.env.KEYCLOAK_URL}/realms/${process.env.KEYCLOAK_REALM}`,
}),
],
callbacks: {
async jwt({ token, account }) {
if (account) {
token.accessToken = account.access_token;
token.refreshToken = account.refresh_token;
token.idToken = account.id_token;
}
return token;
},
async session({ session, token }) {
session.accessToken = token.accessToken as string;
return session;
},
},
});
Admin API
// Keycloak Admin REST API — manage users programmatically
const KEYCLOAK_URL = process.env.KEYCLOAK_URL;
const REALM = process.env.KEYCLOAK_REALM;
async function getAdminToken(): Promise<string> {
const res = await fetch(
`${KEYCLOAK_URL}/realms/master/protocol/openid-connect/token`,
{
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
grant_type: "client_credentials",
client_id: "admin-cli",
client_secret: process.env.KEYCLOAK_ADMIN_SECRET!,
}),
},
);
const { access_token } = await res.json();
return access_token;
}
async function createUser(userData: {
username: string;
email: string;
firstName: string;
lastName: string;
}) {
const token = await getAdminToken();
await fetch(`${KEYCLOAK_URL}/admin/realms/${REALM}/users`, {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
...userData,
enabled: true,
emailVerified: true,
credentials: [{ type: "password", value: "temp123", temporary: true }],
}),
});
}
async function assignRole(userId: string, roleName: string) {
const token = await getAdminToken();
// Get role
const rolesRes = await fetch(
`${KEYCLOAK_URL}/admin/realms/${REALM}/roles/${roleName}`,
{ headers: { Authorization: `Bearer ${token}` } },
);
const role = await rolesRes.json();
// Assign to user
await fetch(
`${KEYCLOAK_URL}/admin/realms/${REALM}/users/${userId}/role-mappings/realm`,
{
method: "POST",
headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
body: JSON.stringify([role]),
},
);
}
Realm Configuration
## Key Concepts
### Realm
- Isolated namespace for users, clients, roles
- Each realm has its own login page, user database, settings
- Example: "production" realm, "staging" realm
### Clients
- Applications that authenticate via Keycloak
- Types: public (SPA), confidential (backend), bearer-only (API)
- Configure redirect URIs, CORS, token lifetimes
### Roles
- Realm roles: global across all clients (admin, user, moderator)
- Client roles: scoped to a specific application (api:read, api:write)
- Composite roles: combine multiple roles into one
### Identity Providers
- Social: Google, GitHub, Facebook, Apple, Microsoft
- Enterprise: SAML (Okta, Azure AD), LDAP, Active Directory
- Custom: any OIDC/SAML 2.0 provider
### Authentication Flows
- Username/password + OTP (TOTP/HOTP)
- WebAuthn (passkeys, security keys)
- Custom flows (conditional OTP, required actions)
Installation
# Docker (development)
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:24.0 start-dev
# Production
docker run -e KC_DB=postgres -e KC_HOSTNAME=auth.example.com \
quay.io/keycloak/keycloak:24.0 start --optimized
# Kubernetes (Helm)
helm install keycloak bitnami/keycloak
Best Practices
- Realm per environment — Separate realms for dev/staging/production; export/import configs between them
- Confidential clients for backends — Use client secret authentication; never expose secrets in frontend apps
- RBAC with roles — Map business roles (admin, editor, viewer) to Keycloak realm/client roles
- Social login — Enable Google/GitHub for developer tools, Google/Apple for consumer apps
- Token lifetimes — Access tokens: 5 minutes; refresh tokens: 30 days; balance security vs UX
- MFA for admins — Require TOTP or WebAuthn for all admin and privileged accounts
- User federation — Connect to existing LDAP/AD; Keycloak syncs users without migration
- Export realm config — Export realm as JSON; store in Git for reproducible deployments