ServiceLogin

최종 수정: 2026년 7월 3일

ServiceLoginSpace가 자기 제품의 end-user(ServiceUser)를 OAuth로 가입·로그인시키는 설정입니다. Weegloo 플랫폼 계정(콘텐츠 스튜디오에 로그인하는 Weegloo User)과는 별개의 신원 체계를 제품에 붙이는 입구입니다. 이 설정으로 가입한 회원은 ServiceLogin의 기본 역할(defaultRole)을 받고, 그 회원의 토큰은 ACMA/ACDA에 인증됩니다.

Space에는 ServiceLogin이 최대 하나만 존재합니다. 이미 있는 상태에서 생성(POST)을 다시 호출하면 WGL409003(409 Conflict)이 반환됩니다. 그래서 조회도 loginId 없이 GET .../service-login으로 그 하나를 단건으로 가져옵니다(목록 엔드포인트는 없습니다).

리소스 구조

다음은 ServiceLogin 한 건의 응답입니다. sys(시스템 속성)와 함께, 서비스 표시 정보와 가입 동작을 담는 본문 속성 name·callbackUrl·contactEmail·approvalRequired를 가집니다.

{
  "sys": {
    "id": "3trmXRM3RqbgSnifyg7PSlgn01Ex",
    "type": "ServiceLogin",
    "space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
    "defaultRole": { "sys": { "id": "3trmXRLXeZN2RTHvVj3hFDN5546vbp", "type": "Refer", "targetType": "ServiceUserRole" } },
    "providers": [
      { "registrationId": "google", "clientId": "821047-dailywear.apps.googleusercontent.com" }
    ],
    "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "createdAt": "2026-06-18T12:55:00.000Z",
    "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "updatedAt": "2026-06-18T12:55:00.000Z",
    "version": 1
  },
  "name": "데일리웨어 멤버십",
  "callbackUrl": "https://dailywear.example/auth/callback",
  "contactEmail": "members@dailywear.example",
  "approvalRequired": false
}

주요 키:

  • defaultRole: 새로 가입한 회원이 기본으로 받는 ServiceUserRoleRefer입니다. 회원별로 다른 역할이 필요하면 ServiceUserroleOverride로 덮어씁니다.
  • providers: 이 서비스가 지원하는 OAuth 제공자 목록입니다. 각 항목은 registrationId·clientId·clientSecret로 구성됩니다. 응답에는 clientSecret이 나오지 않습니다.
  • callbackUrl: 회원이 OAuth 로그인을 마친 뒤 이동할 URL입니다. 이 URL에 교환 토큰(exchangeToken)이 쿼리 문자열로 붙어 돌아옵니다.
  • approvalRequired: 켜면 신규 회원이 로그인 비활성(enableLogin=false) 상태로 가입돼 관리자 승인이 필요합니다.

시스템 속성 (sys)

모든 ServiceLogin은 공통 시스템 속성을 sys 객체에 담습니다. space·defaultRole·createdBy·updatedByRefer 모양({ "sys": { "id", "type": "Refer", "targetType" } })으로 들어갑니다.

속성타입설명
idstring리소스 고유 식별자.
typestring리소스 종류. ServiceLogin은 항상 "ServiceLogin".
spaceRefer<Space>이 설정이 속한 Space.
defaultRoleRefer<ServiceUserRole>신규 가입 회원이 기본으로 받는 ServiceUserRole.
providersProvider 배열지원하는 OAuth 제공자 목록. 응답 항목에는 clientSecret이 없습니다.
createdByRefer<User>이 설정을 만든 Weegloo User.
createdAtstring (date-time)생성 시각.
updatedByRefer<User>마지막으로 수정한 Weegloo User.
updatedAtstring (date-time)마지막 수정 시각.
versioninteger리소스 버전. 수정할 때 X-Weegloo-Version 헤더에 넣습니다.

ServiceLogin은 설정 리소스라 발행 개념이 없습니다. publish·archive·status가 없고, 동시 수정 충돌 방지를 위한 version만 가집니다.

본문 속성과 provider

속성타입설명
namestring서비스 표시 이름.
callbackUrlstringOAuth 로그인 완료 후 이동할 URL. 이 URL에 exchangeToken이 쿼리로 붙어 돌아옵니다.
contactEmailstring서비스 관리자 연락 이메일.
approvalRequiredbooleantrue면 신규 회원이 enableLogin=false로 시작해 관리자 승인이 필요합니다. 기본값은 false.

providers

providers는 이 서비스가 지원하는 OAuth 제공자 목록입니다. 각 provider는 다음 세 값으로 구성됩니다.

속성타입설명
registrationIdstringOAuth 제공자 식별자. 현재 google·github·facebook·gitlab·kakao·naver·line을 지원합니다.
clientIdstring그 제공자에서 발급받은 클라이언트 ID.
clientSecretstring그 제공자에서 발급받은 클라이언트 시크릿. 쓰기 전용이라 응답에는 나오지 않습니다.

현재 WEEGLOO가 OAuth 엔드포인트를 연결해 둔 registrationIdgoogle·github·facebook·gitlab·kakao·naver·line 일곱 가지입니다. 그 외 값으로는 로그인이 동작하지 않습니다.

provider는 ServiceLogin 생성 본문에 함께 넣을 수도 있고, 아래 provider 추가·수정·삭제 엔드포인트로 따로 관리할 수도 있습니다. ServiceLogin 수정(PUT) 본문에는 providers가 없으므로, 이미 만든 설정의 provider는 전용 엔드포인트로 다룹니다.

ServiceLogin은 항상 provider를 1개 이상 두어야 하며, 최대 10개까지 둘 수 있습니다. 생성 시 providers에 최소 하나를 넣어야 합니다. 마지막 남은 provider 하나는 삭제할 수 없고, 삭제를 시도하면 WGL422055(422)를 반환합니다. provider를 모두 없애려면 ServiceLogin 자체를 삭제합니다.

리디렉션 URI 등록

각 provider(Google·GitHub·Facebook·GitLab·Kakao·Naver·LINE) 콘솔에서 OAuth 앱을 만들 때, 승인된 리디렉션 URI(redirect URI)를 WEEGLOO가 쓰는 값과 똑같이 등록해야 합니다. 값이 다르면 로그인이 redirect_uri mismatch로 실패합니다.

등록할 URI는 다음 형식입니다.

https://auth.weegloo.com/v1/spaces/{spaceId}/login/oauth2/code/{registrationId}

  • {spaceId}: 이 ServiceLogin이 속한 Spacesys.id.
  • {registrationId}: provider 식별자(google·github·facebook·gitlab·kakao·naver·line).

예를 들어 Space HnQ32YiH에 Google을 붙인다면 https://auth.weegloo.com/v1/spaces/HnQ32YiH/login/oauth2/code/google을 등록합니다.

API

아래 모든 엔드포인트의 기준 URL은 https://cma.weegloo.com/v1이며, Authorization 헤더에 CMA를 인증하는 Bearer 토큰이 필요합니다. 수정(PUT·PATCH)과 provider 관리 엔드포인트는 동시 수정 충돌을 막기 위해 현재 sys.versionX-Weegloo-Version 헤더에 실어야 합니다. 생성과 ServiceLogin 삭제에는 이 헤더가 없습니다. 조회는 loginId 없이 그 SpaceServiceLogin 한 건을 가져옵니다.