AI

OSSのSSOと認証基盤比較:Keycloak vs Authentik vs Casdoor でシングルサインオンを構築

オープンソースラボ編集部2026年6月14日

OSSのSSOと認証基盤比較:Keycloak vs Authentik vs Casdoor でシングルサインオンを構築

Auth0(月$23〜/月・1,000ユーザー以上は急激に高額)・Okta(月$2/ユーザー〜)に対して、Keycloak(Red Hat製のエンタープライズOSSアイデンティティプロバイダー)・Authentik(モダンでシンプルなSSO)・Casdoor(RBAC・ABAC対応の認証プラットフォーム)はOSSのSSOソリューションです。

SSOと認証基盤が必要な場面

  • エンタープライズSSO: 社内の複数SaaSアプリ(Slack・Confluence・GitLab等)をSAML/OIDCで一元ログイン
  • B2Bアプリのソーシャルログイン: Google・GitHub・Microsoft・LDAPと連携した認証
  • マルチテナントSaaS: 顧客ごとにActive Directory・Google Workspaceと接続するSAML設定
  • Zero Trustネットワーク: VPN代替のIDPと組み合わせたアクセス制御

主要ツールの概要

Keycloak

2014年にRed Hatが開発したJava製のエンタープライズグレードのIDプロバイダーです。GitHubスター23k+。SAML2.0・OpenID Connect(OIDC)・OAuth2.0を完全サポートし、LDAP・Active Directory・Google・GitHubとのフェデレーションが可能。カスタムログイン画面(テーマ)・多要素認証・ブルートフォース保護・ユーザーセルフサービス(パスワードリセット等)を標準搭載。大規模エンタープライズでの実績が豊富です。

# docker-compose.yml - Keycloak + PostgreSQL
version: '3.8'
services:
  keycloak:
    image: quay.io/keycloak/keycloak:latest
    command: start-dev   # 本番はstartを使用
    environment:
      KC_DB: postgres
      KC_DB_URL: jdbc:postgresql://db:5432/keycloak
      KC_DB_USERNAME: keycloak
      KC_DB_PASSWORD: keycloak_password
      KC_HOSTNAME: auth.yourcompany.com
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin-password
    ports:
      - "8080:8080"
    depends_on:
      - db

  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: keycloak
      POSTGRES_PASSWORD: keycloak_password
    volumes:
      - keycloak_db:/var/lib/postgresql/data

volumes:
  keycloak_db:
# Keycloak Admin REST APIで自動プロビジョニング
import requests

KEYCLOAK_URL = "https://auth.yourcompany.com"
REALM = "yourcompany"
ADMIN_TOKEN = "admin-access-token"

headers = {
    "Authorization": f"Bearer {ADMIN_TOKEN}",
    "Content-Type": "application/json",
}

# レルムにユーザーを作成
user_resp = requests.post(
    f"{KEYCLOAK_URL}/admin/realms/{REALM}/users",
    headers=headers,
    json={
        "username": "john.doe",
        "email": "john.doe@yourcompany.com",
        "firstName": "John",
        "lastName": "Doe",
        "enabled": True,
        "emailVerified": True,
        "credentials": [{"type": "password", "value": "initial-password", "temporary": True}],
        "attributes": {"department": ["Engineering"], "employeeId": ["12345"]},
    },
)
print(f"User created: {user_resp.status_code}")

# ユーザーをグループに追加
user_id = user_resp.headers.get("Location", "").split("/")[-1]
groups = requests.get(f"{KEYCLOAK_URL}/admin/realms/{REALM}/groups?search=engineers", headers=headers).json()
if groups:
    requests.put(
        f"{KEYCLOAK_URL}/admin/realms/{REALM}/users/{user_id}/groups/{groups[0]['id']}",
        headers=headers,
    )
    print(f"Added to group: {groups[0]['name']}")
// Keycloak OIDC でNext.jsアプリに認証を追加
// next-auth を使ったKeycloak連携
// pages/api/auth/[...nextauth].js
import NextAuth from "next-auth";
import KeycloakProvider from "next-auth/providers/keycloak";

export default 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.idToken = account.id_token;     // IDトークン
        token.accessToken = account.access_token;  // アクセストークン
        token.roles = account.id_token
          ? JSON.parse(atob(account.id_token.split(".")[1])).realm_access?.roles
          : [];
      }
      return token;
    },
    async session({ session, token }) {
      session.accessToken = token.accessToken;
      session.roles = token.roles;           // Keycloakのロールをセッションに追加
      return session;
    },
  },
});

Authentik

2020年に公開されたPython/Djangoベースのモダンなアイデンティティプロバイダーです。GitHubスター15k+。Keycloakよりセットアップが直感的でUIがモダン。フロー(Flow)ベースの認証ステップで、ソーシャルログイン・LDAP・SAMLをGUIで設定できます。プロキシプロバイダーを使ってヘッダーベースの認証(Basic Authがないサービスにも認証を追加)が可能です。

# docker-compose.yml - Authentik
version: '3.8'
services:
  postgresql:
    image: postgres:15-alpine
    environment:
      POSTGRES_PASSWORD: authentik_password
      POSTGRES_USER: authentik
      POSTGRES_DB: authentik
    volumes:
      - authentik_db:/var/lib/postgresql/data

  redis:
    image: redis:alpine

  server:
    image: ghcr.io/goauthentik/server:latest
    command: server
    environment:
      AUTHENTIK_REDIS__HOST: redis
      AUTHENTIK_POSTGRESQL__HOST: postgresql
      AUTHENTIK_POSTGRESQL__USER: authentik
      AUTHENTIK_POSTGRESQL__PASSWORD: authentik_password
      AUTHENTIK_POSTGRESQL__NAME: authentik
      AUTHENTIK_SECRET_KEY: your-secret-key-50-chars
      AUTHENTIK_ERROR_REPORTING__ENABLED: "false"
    ports:
      - "9000:9000"
      - "9443:9443"

  worker:
    image: ghcr.io/goauthentik/server:latest
    command: worker
    environment:
      AUTHENTIK_REDIS__HOST: redis
      AUTHENTIK_POSTGRESQL__HOST: postgresql
      AUTHENTIK_POSTGRESQL__USER: authentik
      AUTHENTIK_POSTGRESQL__PASSWORD: authentik_password
      AUTHENTIK_POSTGRESQL__NAME: authentik
      AUTHENTIK_SECRET_KEY: your-secret-key-50-chars

volumes:
  authentik_db:

機能比較表

比較項目KeycloakAuthentikCasdoor
SSO標準SAML/OIDC/OAuth2SAML/OIDC/OAuth2OIDC/OAuth2/SAML
UI操作性複雑モダン・直感的シンプル
LDAP/AD連携
プロキシ認証✅(強力)限定的
RBAC/ABAC✅(Casbin)
言語JavaPythonGo
GitHub Stars23k+15k+10k+

SSOで認証済みユーザーのセッション情報をログとして収集するにはDevOpsカテゴリ/categories/devopsのGrafana Lokiと組み合わせてください。SSOと組み合わせる内部ツールのアクセス管理にはSecurityカテゴリ/categories/securityのVaultwardenと組み合わせてシークレット管理ができます。

FAQ

Q. KeycloakとAuth0のコスト比較を教えてください

A. Auth0はFreeプランが月7,000 MAU(月間アクティブユーザー)まで。それ以上はEssentialsが月$23(1,000 MAU)、Professionalが月$240(5,000 MAU)と急上昇します。1万MAUでは月$480程度。Keycloakはセルフホストのため基本無料(インフラコスト)。1万ユーザーでも$30〜$100/月のVPSで十分運用できます。ただしKeycloakのセットアップ・運用はAuth0より大幅に複雑です。5,000ユーザー以下の小規模チームではAuth0の利便性コストが小さいですが、それ以上ではKeycloakのROIが高くなります。

Q. KeycloakでSAML設定をするにはどうすればいいですか?

A. Keycloak管理コンソールからSAMLクライアントを作成します。基本手順: ①Clients → Create client②Client type: SAMLを選択③Client IDにSP Entity IDを入力④Valid redirect URIsにACS URLを入力⑤Fine Grain SAML Endpoint設定でACS URLを設定⑥SAML Capabilities でSign Assertions・Include AuthnStatement・Sign DocumentsをON⑦「Downloading certificate」でSAML用証明書をダウンロードし、SPに設定⑧SPのメタデータXMLファイルからInbound SAMLを設定するとクレームマッピングが自動設定される。主要SaaS(Salesforce・Slack・Confluence等)はSAMLメタデータXMLを提供しており、それをKeycloakにインポートするだけで設定が完了します。

Q. AuthentikとKeycloakのどちらを選ぶべきですか?

A. Keycloakを選ぶ場合: ①エンタープライズのActive Directory/LDAP連携が必要②SAML設定が複雑なSaaSとの接続③Red Hatのサポートが必要④大規模クラスター構成。Authentikを選ぶ場合: ①設定をGUI操作で直感的に行いたい②プロキシプロバイダーで任意のWebサービスに認証を追加したい③Dockerコンテナ中心の環境。中小規模のチームでKeycloakの学習コストを避けたい場合はAuthentikの方が導入が早く、中長期的な運用コストも低い傾向があります。

Q. NginxにSSOを追加してプライベートサービスを保護するには?

A. Authentikのアウトポストプロキシを使えばNginxの前段にAuthentik認証を追加できます。

server {
    listen 443 ssl;
    server_name private.yourcompany.com;

    location / {
        # Authentikアウトポストへの認証リクエスト
        auth_request /outpost.goauthentik.io/auth/nginx;
        auth_request_set $auth_cookie $upstream_http_set_cookie;
        add_header Set-Cookie $auth_cookie;
        error_page 401 = @goauthentik_proxy_signin;

        # バックエンドへのプロキシ
        proxy_pass http://private-service:8080;
    }

    location /outpost.goauthentik.io {
        proxy_pass http://authentik-outpost:9000;
    }

    location @goauthentik_proxy_signin {
        internal;
        return 302 /outpost.goauthentik.io/start?rd=$scheme://$host$request_uri;
    }
}

まとめ

ユースケース推奨ツール
エンタープライズSSO・LDAP・SAMLKeycloak
モダンUI・プロキシ認証・中小規模Authentik
Casbin RBAC/ABAC・Go統合Casdoor

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。