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