"ChatGPT로 로그인"은 전 세계 ChatGPT 사용자가 이용할 수 있는 OpenAI의 OAuth 2.0 및 OpenID Connect 로그인 서비스입니다. 귀하의 앱은 안정적인 계정 ID와 사용자의 이름, 이메일 주소 및 프로필 사진을 받게 됩니다. 2026년 9월 29일 DevDay 이후로, Plus 및 Pro 사용자는 참여 앱이 설정된 앱별 주간 한도 내에서 귀하의 API 키 대신 자신의 ChatGPT 요금제로 AI 요청을 실행하도록 허용할 수 있습니다. 귀하의 앱은 사용자의 대화, 메모리 또는 API 키를 절대 받지 않습니다.
두 번째 부분은 귀하의 청구서와 관련이 있습니다. 이 가이드는 흐름, 사용자에게 표시되는 요금제 사용 방식, 현재 통합 가능한 대상, 사용자 요금제가 귀하의 키를 대체해야 하는 시점, 그리고 Apidog에서 로그인 및 실패 경로를 테스트하는 방법을 다룹니다. 이벤트의 나머지 부분은 DevDay 2026 요약을 참조하십시오. 신원 확인과 권한 부여가 모호하다면 OAuth 대 OpenID를 먼저 읽어보십시오.
ChatGPT로 로그인 개요
| 항목 | OpenAI 문서 내용 |
|---|---|
| 신원 확인 범위 | openid profile email |
| 요금제 사용 범위 (오픈 소스 흐름) | offline_access resource.invoke chatgpt.tokens.use.direct, with resource=https://api.openai.com/v1 |
| 귀하의 앱이 받는 것 | ID 토큰; 요금제 사용 시, 액세스 토큰 및 새로고침 토큰 |
| 요금제 사용 자격 | Plus 및 Pro 사용자, 참여 앱에서 |
| 사용량이 계산되는 곳 | 요금제의 ChatGPT Work 및 Codex 사용량 |
| 앱별 제어 | 전체 주간 사용량의 일부로 주간 상한선; 상한선 이후의 크레딧은 기본적으로 비활성화됨 |
| 요금제 사용 토큰 | 액세스 토큰 1시간; 새로고침 토큰 30일, 새로고침 시마다 교체됨 |
| 개발자 접근 | 상업용 앱: 관심 양식을 통한 제한된 시험 사용. 오픈 소스 앱: 셀프 서비스 |
출처: ChatGPT로 로그인 문서, 토큰 참조 및 다른 앱에서 ChatGPT 요금제 사용에 대한 OpenAI의 도움말 문서.
귀하의 앱이 받는 것과 받지 않는 것
신원 확인은 기본값입니다. `openid profile email`을 요청하는 클라이언트는 ID 토큰을 받습니다. 웹사이트 가이드에 따르면, `profile`은 이름 및 프로필 사진과 같은 사용 가능한 클레임을 포함하며, `email`은 이메일 및 이메일 확인 클레임을 포함합니다. 신원 확인 범위는 ChatGPT 대화 또는 OpenAI API 리소스에 대한 접근 권한을 부여하지 않습니다.
계정은 이메일이 아닌, 확인된 `sub`와 발급자 및 클라이언트 ID를 기반으로 식별하십시오. OpenAI는 이메일 일치만으로는 소유권 증명이 아니라고 경고하므로, 기존 사용자에게 링크 확인을 요청하십시오.
요금제 사용은 별도의 승인입니다. 사용자가 추가 범위를 승인하면 토큰 응답은 적격한 응답 API 요청을 위한 액세스 토큰을 추가합니다. 신원 확인 전용 클라이언트는 `access_token`을 전혀 필요로 하지 않습니다. `id_token`이 유일하게 필요한 아티팩트입니다.
OAuth 흐름 작동 방식
웹사이트 흐름은 표준 PKCE를 사용한 권한 부여 코드 승인과 OIDC입니다. `https://auth.openai.com/.well-known/openid-configuration`에서 엔드포인트를 로드합니다. 문서에는 다음과 같은 운영 값이 나열되어 있습니다:
Issuer: https://auth.openai.com
Authorization endpoint: https://auth.openai.com/api/accounts/authorize
Token endpoint: https://auth.openai.com/api/accounts/oauth/token
JWKS URI: https://auth.openai.com/.well-known/jwks.json
- 귀하의 백엔드는 새로운 `state`, S256 챌린지가 있는 PKCE 검증자, 그리고 `nonce`를 생성합니다.
- 귀하의 클라이언트 ID, 정확한 리디렉션 URI 및 범위를 사용하여 브라우저를 권한 부여 엔드포인트로 리디렉션합니다.
- 사용자가 동의하면 OpenAI는 귀하의 콜백으로 코드를 반환합니다.
- 귀하의 백엔드는 `state`를 확인하고, 코드를 교환하며, ID 토큰의 서명, 발급자, 대상, 만료 및 nonce를 검증합니다.
- 로컬 계정을 찾거나 생성하거나 연결하고 자체 세션을 발행합니다.
공개 클라이언트는 비밀을 보내지 않습니다. `client_secret_basic`을 사용하는 기밀 클라이언트는 HTTP 기본 헤더에만 비밀을 보냅니다.
오픈 소스 도구는 다르게 등록됩니다. 오픈 소스 로그인 가이드는 `client_id=dynamic_agent_client`, 앱 이름으로 설정된 `agent_name_hint`, 그리고 호스트별 영구 `ext_agent_host_id`로 시작합니다. 콜백은 저장하고 재사용할 발급된 클라이언트 ID(예: `oaiapp_...`)를 반환합니다. 리디렉션은 `127.0.0.1` 루프백 URI이며 클라이언트 시크릿은 관련되지 않습니다.
사용자를 위한 요금제 사용 방식
사용자가 보는 내용과 귀하의 지원 문서에서 설명해야 할 내용은 다음과 같습니다:
- 적격 요청은 요금제에 따라 계산됩니다. 이는 사용자의 Plus 또는 Pro 요금제 내 ChatGPT Work 및 Codex 사용량을 기반으로 합니다.
- 각 앱에는 주간 상한선이 있습니다. 사용자는 이를 전체 주간 사용량의 백분율로 설정합니다 (문서의 설정 예시는 10%에서 100%까지). 이는 예약된 풀이 아니라 상한선이므로, 다른 곳에서 과도하게 사용하면 요금제가 먼저 소진될 수 있습니다.
- 크레딧은 선택 사항입니다. 한도 초과 후 크레딧으로 계속 사용하는 것은 기본적으로 비활성화되어 있으며, 앱의 상한선을 100%로 설정해야 합니다.
- Plus에는 공유 5시간 제한이 있습니다. 계정 및 세션 페이지에 따르면, 이는 요금제를 사용하는 모든 앱에 걸쳐 적용됩니다. Pro에는 적용되지 않습니다.
- 연결 해제는 향후 사용을 중단합니다. 이미 사용된 사용량을 되돌리지 않으며, OpenAI는 귀하의 앱에 통지하지 않습니다. 요청 또는 새로고침이 실패할 때 알 수 있습니다.
사용자는 이 모든 것을 ChatGPT 설정, 사용량(`chatgpt.com/settings/usage`)에서 관리하며, OpenAI의 UI 가이드라인은 **사용량 관리** 링크를 통해 해당 페이지로 연결하도록 요청합니다.
출시 시 누가 참여하며, 클라이언트 ID를 얻는 방법
OpenAI의 DevDay 요약에는 Cognition의 Devin, Notion, Vercel, T3, OpenClaw 및 Dactyl을 포함한 16개의 요금제 사용 파트너가 언급되어 있습니다. The New Stack은 그 외에 Amp, Warp, Kilo Code, OpenCode를 나열하며, Lovable은 곧 출시될 예정이라고 표시되어 있습니다. 만약 OpenClaw를 실행 중이라면, 두 목록 모두에 포함됩니다.
The New Stack이 보도한 바에 따르면, 샘 알트만이 무대에서 발표한 내용은 다음과 같습니다: "이제 사용자들이 시작하기 위해 토큰 비용을 부담할 필요가 없습니다."
참여 방법은 귀하가 제공하는 서비스에 따라 다릅니다:
- 상업용 또는 호스팅 앱: 로그인은 제한된 시험 사용입니다. 신원 확인만 원하든 요금제 사용(문서 URL에서는 요금제 사용을 "토큰 공유"라고 부름)도 원하든 상관없이 OpenAI의 관심 양식을 통해 대기자 명단에 가입하여 클라이언트 ID를 요청합니다.
- 오픈 소스 및 로컬 호스팅 도구: 요금제 사용은 위에서 언급한 셀프 서비스 흐름을 통해 모든 오픈 소스 파트너에게 열려 있습니다.
귀하의 API 요금 청구서에 대한 변경 사항
현재 귀하는 토큰당 비용을 지불하고 가격 책정을 통해 이를 회수합니다. 요금제 사용은 모델 비용을 사용자 구독으로 전환하므로, 귀하의 마진은 사용자가 AI를 얼마나 많이 사용하는지에 더 이상 의존하지 않습니다. 절충점은 제어입니다.
| 귀하의 API 키 | 사용자의 ChatGPT 요금제 | |
|---|---|---|
| 누가 지불하는가 | 귀하, 토큰당 | 사용자의 요금제 (선택 동의 시에만 크레딧) |
| 누가 사용할 수 있는가 | 모든 사용자 | chatgpt.tokens.use.direct를 허용한 Plus 및 Pro 사용자 |
| 제한 | 귀하의 비율 제한 계층 | 주간 요금제 사용량, 앱별 상한선, Plus의 5시간 창 |
| 요청 형태 | 전체 응답 API | store: false 및 stream: true 필수; temperature, max_output_tokens, 파일 검색 또는 코드 인터프리터 없음 |
| 일반적인 실패 | 계층을 초과할 때 429 | 429 subscription_sharing_usage_limit_exceeded, 또는 스트림 중간에 response.failed에서 해당 코드 |
| 대체 | 귀하가 설계 | 자동 없음: OpenAI는 청구를 전환하지 않음 |
| 무엇을 표시해야 하는가 | 귀하의 사용량 및 가격 | "ChatGPT 요금제 사용 중", 사용량 관리 링크, 귀하의 어떤 요금제가 이를 지원하는지 |
이 제한 사항은 미리 보기 제한 페이지에서 가져온 것입니다: 저장된 대화 상태 또는 호스팅된 도구가 필요한 기능은 현재 사용자 요금제로 실행되지 않습니다.
합리적인 기본값은 하이브리드입니다: Plus 및 Pro 사용자의 대화형 작업에는 요금제 사용을, 그 외 모든 사용자 및 백그라운드 작업, CI, 예약된 에이전트에는 귀하의 키를 사용합니다. 상한선에 도달하면 사용량 관리를 표시하고 보조 옵션으로 귀하의 크레딧을 제공하십시오. API 키 대 OAuth 비교는 일반적인 절충점을 다루고, AI 에이전트를 위한 OAuth는 사용자를 대신하여 안전하게 작동하는 방법을 다룹니다.
Apidog에서 로그인 흐름 및 실패 경로를 테스트하는 방법
Apidog는 ChatGPT를 사용하여 아무도 로그인시키지 않습니다. 이는 귀하의 OAuth 설정, 토큰 호출 및 오류 처리를 테스트합니다. Apidog를 다운로드하고 환경을 생성하십시오.
1. 클라이언트를 변수로 저장합니다. `SIWC_CLIENT_ID`, `SIWC_REDIRECT_URI`를 추가하고, 기밀 클라이언트의 경우 `SIWC_CLIENT_SECRET`를 민감한 값으로 추가하며, 요금제 사용을 위한 `ACCESS_TOKEN`을 추가합니다. 저장된 요청에 비밀이 노출되지 않도록 `{{SIWC_CLIENT_ID}}`와 같이 참조합니다.
2. 권한 부여 코드 흐름을 실행합니다. 인증 탭에서 PKCE가 있는 OAuth 2.0 권한 부여 코드를 선택하고, 위에서 언급된 엔드포인트를 입력하고, 범위를 `openid profile email`로 설정한 다음, 귀하의 클라이언트에 등록된 콜백 URL을 사용하십시오. Apidog OAuth 2.0 가이드는 각 필드를 자세히 설명합니다.
3. 얻은 ID 토큰에 대해 단언합니다. 토큰 교환을 토큰 엔드포인트(코드, 검증자, 리디렉션 URI, 클라이언트 ID)에 대한 자체 POST로 저장하고 사후 처리기를 추가합니다. 서명 및 nonce 검사는 여전히 백엔드에 속합니다.
const body = pm.response.json();
pm.test("token exchange returned an ID token", () => {
pm.expect(pm.response.code).to.eql(200);
pm.expect(body.id_token).to.be.a("string");
});
const decode = require("atob");
const part = body.id_token.split(".")[1].replace(/-/g, "+").replace(/_/g, "/");
const claims = JSON.parse(decode(part + "=".repeat((4 - (part.length % 4)) % 4)));
pm.test("ID token claims match this client", () => {
pm.expect(claims.iss).to.eql("https://auth.openai.com");
pm.expect(claims.aud).to.include(pm.environment.get("SIWC_CLIENT_ID"));
pm.expect(claims.sub).to.be.a("string").and.not.empty;
pm.expect(claims.exp * 1000).to.be.above(Date.now());
});
`name`, `email`, `picture`는 사용 가능할 때 반환되므로 단언하는 대신 로그로 기록하십시오. 요금제 사용의 경우, `body.scope`에 `chatgpt.tokens.use.direct`가 포함되어 있는지 단언하십시오.
4. 실패 경로를 모의(Mock)합니다. 실제 Plus 계정은 부적절한 고정값이므로, Apidog 모의 서버에서 다음을 반환하십시오.
- 요금제 사용 거부: `scope`에 `chatgpt.tokens.use.direct`가 없는 토큰 응답. 귀하의 앱은 로그인을 유지하고 요금제 사용을 활성화하거나 다른 결제 경로를 사용하도록 제안해야 합니다.
- 상한선 도달: `error.code`가 `subscription_sharing_usage_limit_exceeded`인 429, 그리고 스트림 중간에 `response.failed` 스트림 이벤트에서 동일한 코드. 귀하의 앱이 요금제 요청을 일시 중지하는지 단언하십시오.
- 자격 없음: 403 `subscription_sharing_user_not_eligible`. 재시도하거나 OAuth를 통해 반복하지 마십시오.
- 연결 해제됨: `invalid_grant`를 반환하는 새로고침, 또는 401 `subscription_sharing_invalid_user`. 토큰을 지우고 다시 로그인하도록 요청하십시오.
사례들을 테스트 시나리오로 연결하고 Apidog CLI를 사용하여 CI에서 실행하십시오. 오류 및 복구 페이지에 전체 목록이 있습니다.
5. 실제 호출을 확인합니다. 실제 요금제 토큰으로 문서의 스트리밍 요청을 보내고(Apidog에서 `Bearer {{ACCESS_TOKEN}}`으로) 스트림이 유일한 성공 신호인 `response.completed`로 끝나는지 확인하십시오.
curl --no-buffer https://api.openai.com/v1/responses \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6.1-sol",
"input": [{"role": "user", "content": "Say exactly: Hello, world!"}],
"store": false,
"stream": true
}'
자주 묻는 질문
무료 사용자도 ChatGPT로 로그인할 수 있나요? ChatGPT 사용자는 전 세계적으로 로그인할 수 있습니다. 다른 앱 내에서 요금제를 사용하려면 Plus 또는 Pro가 필요합니다.
제 앱이 사용자의 OpenAI API 키를 받나요? 아니요. 귀하의 앱은 ID 토큰과, 요금제 사용 시, 적격한 응답 API 요청을 위한 OAuth 액세스 토큰을 받습니다.
사용자가 상한선에 도달하면 어떻게 되나요? 요청이 `subscription_sharing_usage_limit_exceeded` 오류와 함께 실패합니다: HTTP 429 오류, 또는 스트리밍 시작 후 `response.failed` 이벤트. 일시 중지하고 사용량 관리로 연결하십시오.
Plus 사용자가 파트너 앱을 통해 GPT-6.1 Sol을 실행할 수 있나요? 문서 예시에서는 요금제 토큰으로 `gpt-6.1-sol`을 사용하지만, 제공하기 전에 해당 토큰으로 계정의 모델을 나열해야 합니다. 자세한 내용은 GPT-6.1 Sol은 무료인가요?에서 확인하십시오.
다음 단계
상업용 앱을 운영 중이라면 지금 대기자 명단에 가입하고, 기다리는 동안 모의 환경을 기반으로 상한선 및 연결 해제 처리를 구축하십시오. 요금제 사용을 귀하의 API 청구 외의 선택 사항으로 간주하고 대체품으로 여기지 마십시오. 클라이언트 ID가 도착하는 날, 유일한 새로운 변수가 실제 토큰이 되도록 토큰 단언 및 실패 시나리오를 Apidog에 저장하십시오.
