9WAY에 doorkeeper 도입 (OAuth2 Provider)

ID: 513b9863-3b5f-4707-bd17-4feb7df180a2

높음 완료

## 개요
9WAY 강점 진단 서비스를 OAuth2 Provider로 전환하여 외부 서비스(커리어 관리, 채용, 교육)가 9WAY 계정으로 로그인할 수 있도록 한다.

## 작업 내용
- doorkeeper gem 설치 및 초기 설정
- doorkeeper 마이그레이션 실행 (oauth_applications, oauth_access_grants, oauth_access_tokens 테이블)
- UUID primary key 설정 (기존 DB 패턴과 통일)
- Authorization Code Grant 흐름 구현
- User 모델에 doorkeeper 관계 추가
- 기존 인증(Cookie Session, OmniAuth, Magic Link)과 병행 운영
- OAuth Application 관리 (어드민에서 client_id/secret 발급)

## 완료 기준
- [ ] doorkeeper 설치 및 마이그레이션 완료
- [ ] /oauth/authorize, /oauth/token 엔드포인트 동작
- [ ] 테스트 Consumer 앱에서 Authorization Code 흐름으로 로그인 성공
- [ ] 기존 웹 로그인(Google, Kakao, Magic Link) 정상 동작 확인
- [ ] 테스트 통과

첨부 이미지

이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)

JPEG, PNG, GIF, WebP / 최대 10MB

담당자: 팀리드
생성일: 2026년 02월 28일 23:43

활동 로그

  • 팀리드 팀 작업 완료 - doorkeeper 도입

    2026년 03월 01일 00:26:39

    상세 보기

    ## 수정된 기능
    - **OAuth2 Provider**: doorkeeper v5.8.2 설치, Authorization Code + Client Credentials Grant 지원
    - **DB 마이그레이션**: oauth_applications, oauth_access_grants, oauth_access_tokens 테이블 (UUID PK)
    - **PKCE 지원**: code_challenge/code_challenge_method 칼럼 추가
    - **어드민 UI**: OAuth Application CRUD (검색, 정렬, 페이지네이션), client_secret 1회 노출
    - **인증 통합**: 기존 Cookie Session/OmniAuth/Magic Link와 병행 운영

    ## 테스트 결과
    - doorkeeper 통합 테스트: 20개 통과
    - 어드민 OAuth App 테스트: 16개 통과
    - 기존 인증 회귀 테스트: 11개 통과

    ## 생성된 파일
    - `config/initializers/doorkeeper.rb`
    - `db/migrate/*_create_doorkeeper_tables.rb`
    - `db/migrate/*_enable_pkce.rb`
    - `app/controllers/admin/oauth_applications_controller.rb`
    - `app/views/admin/oauth_applications/` (5개 뷰)
    - `test/integration/doorkeeper_oauth_test.rb`
    - `test/controllers/admin/oauth_applications_controller_test.rb`

    ## 수정된 파일
    - `Gemfile` — doorkeeper 추가
    - `config/routes.rb` — use_doorkeeper + admin routes
    - `app/models/user.rb` — doorkeeper 관계 추가
    - `app/views/admin/shared/_sidebar.html.erb` — OAuth 앱 메뉴
    - `config/locales/ko.yml` — 번역 추가

    ## 남은 이슈
    - 기존 payments 관련 테스트 실패 10건 (doorkeeper 무관, 기존 버그)

  • 팀리드 상태 변경: 진행 중 → 완료

    2026년 03월 01일 00:26:28

  • 팀리드 위임: test-dev에게 'doorkeeper 통합 테스트' 작업 배정

    2026년 03월 01일 00:13:46

  • 팀리드 위임: admin-dev에게 'OAuth Application 어드민 관리 UI' 작업 배정

    2026년 03월 01일 00:13:39

  • 팀리드 위임: backend-dev에게 'doorkeeper 설치 + DB 마이그레이션 + 설정 + 인증 통합' 작업 배정

    2026년 03월 01일 00:13:31

  • 팀리드 작업 시작 - doorkeeper 도입

    2026년 03월 01일 00:13:21

    상세 보기

    ## 작업 계획
    - 목표: 9WAY를 OAuth2 Provider로 전환 (doorkeeper gem)
    - 접근 방식: 3개 서브 티켓으로 분해하여 팀 병렬 작업
    1. doorkeeper 설치 + 마이그레이션 + 설정 + 인증 통합 (backend-dev)
    2. OAuth Application 어드민 관리 UI (admin-dev) — 1번 의존
    3. 통합 테스트 (test-dev) — 1번 의존

    ## 현재 상태
    - 보드 현황: backlog 0 / todo 2 / in_progress 1 / review 0 / done 78
    - 관련 기존 작업: 기존 인증 시스템 (OmniAuth, Magic Link, Session) 유지하면서 병행

  • 팀리드 티켓 클레임 완료

    2026년 03월 01일 00:13:02

  • 팀리드 기능 계획 수립 - OAuth2 Provider 통합

    2026년 02월 28일 23:43:32

    상세 보기

    ## 기능 개요
    - 9WAY를 OAuth2 Provider로 전환하여 커리어 관리, 채용, 교육 서비스가 9WAY 계정으로 SSO 로그인

    ## 분석 결과
    - 영향 범위: User 모델(관계 추가), routes.rb, Gemfile
    - 기존 패턴: OmniAuth(Google/Kakao), Magic Link, Cookie Session — 모두 충돌 없이 병행 가능
    - DB: doorkeeper 테이블 4개 추가 (기존 테이블 변경 없음, UUID 설정 필요)

    ## 생성된 티켓
    1. 9WAY에 doorkeeper 도입 (priority: high)
    2. Resource API 구축 (priority: high)
    3. Consumer 연동 가이드 (priority: medium)

    ## 리스크
    - 기존 인증과 충돌: 🟢 낮음 (웹=Cookie, API=Bearer 이원화)
    - DB 마이그레이션: 🟢 낮음 (추가만, 변경 없음)
    - UUID 호환: 🟡 중간 (doorkeeper 기본 integer → UUID 설정 필요)

    ## 기술적 결정
    - doorkeeper gem 사용 (Rails OAuth2 Provider 표준)
    - 웹 인증과 API 인증 이원화 (기존 시스템 보존)
    - Authorization Code Grant (사용자 로그인) + Client Credentials Grant (서버 간 통신)