위젯스토어 - 노션 위젯·노션 꾸미기, 움직이는 아이콘, 시작페이지, 마이페이지

개발자용 "%BRAND%로 로그인"(OAuth 2.1 / OpenID Connect)

표준 OAuth 2.1과 OpenID Connect로 내 앱에 "%BRAND%로 로그인"을 추가하세요. 앱 만들기, PKCE, JWKS로 ES256 ID 토큰 확인, 허락받은 범위로 API 호출하는 방법을 알려 드려요.

개발자 콘솔에서 누구나 앱을 만들고 %BRAND% 계정으로 로그인하게 할 수 있어요. 이미 %BRAND%에 로그인한 사람은 "허용"만 누르면 돼요. 보여 줄 정보는 본인이 고르고, 계정 → 앱 및 API에서 언제든 연결을 끊을 수 있어요.

1. 앱 만들기

/developers에서 "새 앱"을 누르고 다음을 입력하세요.

  • 이름, 아이콘, 홈페이지와 개인정보 처리방침 URL(필수). 동의 화면에 보여요.
  • 리디렉션 URI(한 줄에 하나). 정확히 같아야 해요. 와일드카드, 끝의 슬래시 차이, 쿼리 차이는 모두 안 돼요. https만 쓸 수 있고, 네이티브 앱은 루프백(http://127.0.0.1/..., 포트 상관없음)과 사용자 지정 스킴도 쓸 수 있어요.
  • 앱 종류: "서버 앱"은 client secret을 받아요(한 번만 보여 주고 해시로만 저장). "브라우저 / 네이티브 앱"은 시크릿이 없어요.

무료 요금제는 앱 3개, Pro는 10개까지 만들 수 있어요. 새 앱에는 "미확인"이 표시되고 검토 전까지 사용자는 100명까지예요.

2. 인증 화면으로 보내기

GET https://widgetstore.net/oauth/authorize
  ?response_type=code
  &client_id=wsc_...
  &redirect_uri=https://example.com/auth/callback
  &scope=openid profile email
  &state=<random>
  &nonce=<random>
  &code_challenge=<BASE64URL(SHA256(verifier))>
  &code_challenge_method=S256
  • 모든 앱은 PKCE(S256)를 써야 해요. 서버 앱도 마찬가지예요.
  • 돌아온 state가 같은지 확인하세요(CSRF 방지). iss도 함께 돌려줘요.
  • prompt=none은 화면 없이 확인해요. 로그인했고 이미 동의했으면 코드를 주고, 아니면 login_required 또는 consent_required를 돌려줘요. prompt=consent는 항상 동의 화면을 보여 줘요.

3. 코드 교환

POST https://widgetstore.net/widget/api/oauth/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic base64(client_id:client_secret)   # 서버 앱만

grant_type=authorization_code&code=...&code_verifier=...&redirect_uri=...

access_token(1시간), refresh_token(쓸 때마다 새로 바뀌고, 예전 것을 다시 쓰면 인증 전체가 취소돼요), id_token을 받아요. 코드는 한 번만 쓸 수 있고 10분 뒤 만료돼요.

4. ID 토큰 확인

  • ES256으로 서명해요. 공개 키는 https://widgetstore.net/widget/api/oauth/jwks(kid로 선택).
  • iss가 https://widgetstore.net, aud가 내 client ID인지, exp, nonce가 맞는지 확인하세요.
  • sub는 내 앱 전용이에요. 같은 사람도 다른 앱에서는 다른 sub라서 앱끼리 사람을 연결할 수 없어요.
  • 클레임은 본인이 허락한 범위에 따라 달라요. profile → name, picture, email → email, email_verified.

디스커버리: https://widgetstore.net/.well-known/openid-configuration. UserInfo: 액세스 토큰으로 GET https://widgetstore.net/widget/api/oauth/userinfo.

범위

범위받을 수 있는 것
openid로그인에 필수
profile닉네임과 프로필 사진
email인증된 이메일 주소
read, write:*오픈 API와 MCP로 위젯, 페이지, 데이터 읽고 쓰기

규칙

  • 필요한 범위만 요청하세요. profile과 email은 본인이 뺄 수 있어요.
  • %BRAND% 비밀번호나 이메일 인증 코드를 묻지 마세요.
  • 내 앱에서 로그아웃하면 토큰을 취소하세요: POST https://widgetstore.net/widget/api/oauth/revoke.
  • 사람을 속이거나 데이터를 악용하는 앱은 사용 중지할 수 있어요. 중지된 앱은 새 인증도, 토큰 갱신도 할 수 없어요.

최종 업데이트: 2026년 11월 14일