Skip to main content

pocket-id

간단한 OIDC (open id connect) provider입니다. 가장 큰 특징은 passkey만 지원한다는 것인데, 이점이 약간의 호불호가 있긴 합니다.

스크린샷_2025-12-21_005054.png

passkey에 관해서는 따로 이야기해야 할 정도이지만 쉽게 말하면 기존과 같은 패스워드 기반이 아니라, 특정 보안 하드웨어 또는 생체 인식 등으로 인증을 대신하는 것입니다.

스크린샷_2025-12-21_005127.png

저같은 경우 제 노트북과 데스크탑에 하드웨어 키, 그리고 vaultwarden에 패스키를 등록했고 이를 인증에 이용하도록 세팅했습니다.

install

기본적으로 docker compose 를 추천하고 있습니다.

# curl -o docker-compose.yml https://raw.githubusercontent.com/pocket-id/pocket-id/main/docker-compose.yml
# curl -o .env https://raw.githubusercontent.com/pocket-id/pocket-id/main/.env.example

curl 명령으로 기본적인 템플릿을 다운로드받아서, 자신의 환경에 맞게 수정해주면 됩니다.

services:
  pocket-id:
    image: ghcr.io/pocket-id/pocket-id:v1
    restart: unless-stopped
    env_file: .env
    ports:
      - 1411:1411
    volumes:
      - "./data:/app/data"
    # Optional healthcheck
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.pocket-id.rule=Host(`YOUR_OIDC_DOMAIN`)"
      - "traefik.http.routers.pocket-id.entrypoints=websecure"
      - "traefik.http.routers.pocket-id.tls=true"
      - "traefik.http.routers.pocket-id.tls.certresolver=letsencrypt"
      - "traefik.http.services.pocket-id.loadbalancer.server.port=1411"
    networks:
      - proxy
    healthcheck:
      test: [ "CMD", "/app/pocket-id", "healthcheck" ]
      interval: 1m30s
      timeout: 5s
      retries: 2
      start_period: 10s

networks:
  proxy:
    external: true

.env 파일도 자신의 환경에 맞게 수정하면 됩니다.

# See the documentation for more information: https://pocket-id.org/docs/configuration/environment-variables

# These variables must be configured for your deployment:
APP_URL=https://auth.your.domain

# Encryption key (choose one method):
# Method 1: Direct key (simple but less secure)
# Generate with: openssl rand -base64 32
ENCRYPTION_KEY=...
# Method 2: File-based key (recommended)
# Put the base64 key in a file and point to it here.
# ENCRYPTION_KEY_FILE=/path/to/encryption_key

# These variables are optional but recommended to review:
TRUST_PROXY=true
MAXMIND_LICENSE_KEY=...
PUID=1000
PGID=1000

TRUST_PROXY 옵션은 해당 docker가 리버스프록시 뒤에 있을 경우 설정해주면 됩니다. MAXMIND_LICENSE_KEY 는 audit log에서 접속된 IP의 지리적 정보를 취득하는데 이용합니다. 만약 키가 없을 경우 ip의 위치는 알수 없음으로 표시됩니다.


개별 서비스에 pocket-id를 OIDC로 등록하는 방법은 어느정도 공통적인 매뉴얼이 있으나, pocket-id docs에서 잘 알려진 앱들의 개별적인 세팅 방법도 소개하고 있다. https://pocket-id.org/docs/client-examples