개발자용 "%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일