(Em edição: Última atualização em 02/10/2026 às 12:39 JST) A OpenAI anunciou no DevDay 2026 em 29 de setembro.Entrar com o ChatGPT (SIWC) Anunciamos oficialmente. Gostaria de verificar pessoalmente e escrever um artigo sobre isso, mas não tenho tempo agora. Portanto, estou publicando abaixo o rascunho que o próprio ChatGPT preparou. Se encontrar algum erro, por favor, me avise no X.
O SIWC foi lançado pela OpenAI. Recurso de provedor OpenID Connect / servidor de autorização OAuthNo entanto, na realidade, as duas funcionalidades seguintes pertencem à mesma marca:
- Login de identidade
Utilizando uma conta ChatGPT, um método quase padrão Código de autorização OpenID Connect + PKCE. - dificuldades de planejamento do ChatGPT
O limite de uso incluído nos contratos ChatGPT, como Plus/Pro, pode ser utilizado em aplicativos externos de código aberto ou compatíveis. Um mecanismo para usar a API de Respostas, expondo-a a um Token de Acesso OAuth..
Este último é bastante distinto. Trata-se mais de uma extensão de "fazer login com o ChatGPT".Identidade do assinante do ChatGPT + direito de inferência delegada Este é um mecanismo para transmitir informações a aplicativos externos usando OAuth. A própria OpenAI afirma explicitamente que a identidade e o uso do plano são permissões separadas. 1
A OpenAI começou a implementar seu recurso de Identidade em alguns sites/plugins parceiros em 23 de setembro de 2026 e anunciou oficialmente sua implementação, incluindo o uso do plano ChatGPT, no DevDay 2026, em 29 de setembro.
Login de identidade
A parte de identidade é praticamente o padrão OpenID Connect.
O documento de descoberta de produção da OpenAI está, na verdade, disponível publicamente. 2.
Os metadados principais são os seguintes:
| 項目 | 値 |
|---|---|
| Emissora | https://auth.openai.com |
| Ponto final de autorização | https://auth.openai.com/api/accounts/authorize |
| Ponto final do token | https://auth.openai.com/api/accounts/oauth/token |
| Ponto de extremidade do UserInfo | https://auth.openai.com/api/accounts/oauth/userinfo |
| Ponto final de revogação | https://auth.openai.com/api/accounts/oauth/revoke |
| JWKS | https://auth.openai.com/.well-known/jwks.json |
| tipo_de_resposta | code Somente |
| tipo de concessão | authorization_code, refresh_token |
| PKCE | S256 |
| tipo de assunto | public |
| Assinatura de token de ID | RS256 |
| autenticação de ponto de extremidade de token | client_secret_basic, client_secret_post, none |
Em outras palavras, a forma básica é,
OIDC
└─ OAuth 2.0 Authorization Code
└─ PKCE S256
で す.
Ao usar apenas a identidade em um site, a solicitação de autorização é quase idêntica a um OIDC típico no exemplo da própria OpenAI.
GET https://auth.openai.com/api/accounts/authorize?
client_id=oaiapp_...
&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback
&response_type=code
&scope=openid%20profile%20email
&state=...
&nonce=...
&code_challenge=...
&code_challenge_method=S256
Escopo é
openid
profile
email
で す.
profile Então, nome/foto etc.email Em seguida, solicitaremos um endereço de e-mail e uma confirmação de verificação por e-mail. email_verified É fornecida uma lista de reivindicações OIDC padrão, incluindo as seguintes.3
Verificação de Token de ID
A Parte Confiante (RP) verificará o Token de ID usando JWKS como de costume.
A OpenAI afirma explicitamente,
iss
aud
exp
nonce
sub
signature
Eles estão solicitando que você verifique isso.
aud é RP client_id,iss は
https://auth.openai.com
で す. 4
Com relação à chave de identidade em RP, a OpenAI afirma:
issuer + client_id + sub
Recomendamos que você o guarde.
Também é importante,
Não vincule automaticamente contas existentes usando apenas o e-mail.
Esse é o ponto. A correspondência de e-mails não é considerada prova de propriedade da conta. Isso está correto.
O tipo de assunto no Discovery é:
"subject_types_supported": ["public"]
(fonte) https://auth.openai.com/.well-known/openid-configuration
Portanto, atualmente não estamos anunciando estudos em pares.
A autenticação somente de identidade não utiliza tokens de acesso.
Este é um projeto bastante interessante.
Em um SIWC típico de um site, o OpenAI é suportado.
Para autenticação somente de identidade, o artefato necessário é
id_tokenNão solicite um token de acesso ou token de atualização da OpenAI.
Diz-se que5.
O endpoint UserInfo foi descoberto, mas o exemplo padrão de login web do SIWC não pressupõe a presença do UserInfo. Ainda não verifiquei, então não sei o que acontece se você acessá-lo com um token de acesso. Entendo a necessidade de evitar retornar um token de acesso em casos que exigem apenas identidade (mas ele precisa ser retornado porque a RFC 6749 exige isso). Acho que seria melhor para o Grupo de Trabalho OAuth criar um novo tipo de concessão. No entanto, atualmente, parece que ele é retornado porque precisa ser retornado (← isso precisa ser confirmado). Então, onde o token de acesso é usado? Explicarei isso mais tarde.
Cliente público / Cliente confidencial
Eu tenho ambos.
Cliente público
A autenticação por token no endpoint é:
none
Então, vamos usar a PKCE.
POST /api/accounts/oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=...
&redirect_uri=...
&client_id=...
&code_verifier=...
Cliente confidencial
Exemplos atualmente documentados incluem:
client_secret_basic
で す.
Além disso, mantém o PKCE mesmo com um cliente confidencial.6.
A própria descoberta
client_secret_basic
client_secret_post
none
Esses três métodos são anunciados.7.
Utilização do plano ChatGPT: Utilização de modelos OpenAI com uma assinatura.
Problemas para obter um token de acesso ao plano ChatGPT
Agora, como mencionado no início, o login com o ChatGPT tem "dificuldades de planejamento do ChatGPTExiste um recurso chamado "API de Respostas da OpenAI". Ele permite que aplicativos externos deleguem permissões para chamar a API de Respostas da OpenAI a partir do plano ChatGPT do usuário, utilizando OAuth. Com isso, o aplicativo externo (cliente) pode especificar um modelo da OpenAI e realizar diversas ações (como ler a web usando ferramentas, ler e gravar arquivos, processar informações e exibir os resultados).
fluxograma TD A["Aplicação"] B["API de Respostas"] C["Modelo"] D["Busca na Web"] E["Arquivos"] F["Código"] G["Computador"] H["Servidor MCP"] A --> B B --> C C --> D C --> E C --> F C --> G C --> H
Então
API de Respostas = Primitivas básicas de execução de agentes usando modelos OpenAI
Seria melhor entender dessa forma.
Para realizar essa delegação, é necessário um token de acesso. No SIWC, o cliente utiliza o seguinte na solicitação de autenticação:scopeVocê o obtém solicitando-o.8.
openid
profile
email
offline_access
resource.invoke
chatgpt.tokens.use.direct
Além disso,
resource=https://api.openai.com/v1
Isso também deve ser incluído na Solicitação de Autorização e na Solicitação de Token.
Isto está em forma RFC 8707 Indicadores de recursos para OAuth 2.0 9 Sim. RFC 8707 é resourceEsse mecanismo permite especificar o servidor de recursos de destino usando um URI absoluto.
Portanto, conceitualmente,
OpenAI Authorization Server
auth.openai.com
│
│ Access Token
▼
External OSS app
│
│ Bearer AT
▼
OpenAI Resource Server
api.openai.com/v1
と な り ま す.
Token de acesso aud Também
"aud": "https://api.openai.com/v1"
で す10Este não é um endpoint de informações do usuário.
Exemplo de um token de acesso
A carga útil publicada pela OpenAI está estruturada conceitualmente da seguinte forma.
{
"sub": "...",
"aud": "https://api.openai.com/v1",
"client_id": "oaiapp_...",
"scope":
"chatgpt.tokens.use.direct email offline_access openid profile resource.invoke",
"https://api.openai.com/auth": {
"per_user_salt": "...",
"encrypted_auth_metadata": "..."
},
"iss": "https://auth.openai.com",
"iat": 1790032532,
"exp": 1790036132,
"jti": "...",
"nbf": 1790032532
}
Em outras palavras, o Token de Acesso também é um JWT.
A expectativa de vida é,
- Token de acesso: 1 時間
- Token de atualização: 30 日
- Rotação do token de atualização a cada atualização
- O novo Token de Atualização terá novamente uma validade de 30 dias.
で す.
A documentação atual não utiliza restrições de remetente como o DPoP, e a API de Respostas usa o padrão normal.
Authorization: Bearer <ACCESS_TOKEN>
Vou enviar assim mesmo.11.
Consumindo uma assinatura do ChatGPT com a API de Respostas
Por exemplo,
POST https://api.openai.com/v1/responses
Authorization: Bearer <SIWC_ACCESS_TOKEN>
Content-Type: application/json
{
"model": "...",
"input": [...],
"store": false,
"stream": true
}
で す.
A OpenAI está atualmente fornecendo informações sobre a utilização do plano SIWC.
store: false
stream: true
Isso é necessário. 12.
Em outras palavras, não se trata simplesmente de substituir uma chave de API comum por um token OAuth.
Algumas funcionalidades da API de Respostas também são limitadas; por exemplo, na versão prévia atual,
background- persistente
conversation previous_response_idsobre HTTP- Hospedagem de MCP/conectores
- geração de imagem
- Pesquisa de arquivos
- Intérprete de código
- uso nativo de computador
Esses serviços não estão disponíveis.13
portanto Uma assinatura de API implementada usando OAuth.Também é ligeiramente diferente.
extensões proprietárias da SIWC
Quarto método de registro de cliente: dynamic_agent_client
Com o OAuth padrão, você pode pré-registrar o cliente ou usar o endpoint de registro dinâmico de cliente (RFC 7591). No contexto do OpenID, usar a Federação OpenID também é uma opção atualmente.
O fluxo de código aberto (OSS) da SIWC é diferente de ambos.
Na solicitação de autorização inicial,
client_id=dynamic_agent_client
Isso utiliza um pseudo-cliente especial.
Além disso,
agent_name_hint
ext_agent_host_id
Adicione-o.14
por exemplo:
GET https://auth.openai.com/api/accounts/authorize?
client_id=dynamic_agent_client
&agent_name_hint=OpenClaw
&ext_agent_host_id=urn:uuid:...
&response_type=code
&redirect_uri=http://127.0.0.1:1455/auth/callback
&scope=openid profile email
offline_access
resource.invoke
chatgpt.tokens.use.direct
&resource=https://api.openai.com/v1
&state=...
&nonce=...
&code_challenge=...
&code_challenge_method=S256
E o retorno de chamada é,
?code=...
&state=...
&client_id=oaiapp_xxxxx
EO client_id oficial é fornecido aqui.15Resumindo, é como realizar o cadastro do cliente ao mesmo tempo que a solicitação de autorização.
Em seguida, o endpoint do token será
dynamic_agent_client
Em vez disso, esta recém-publicada
oaiapp_xxxxx
Eu vou enviar.
Isso é claramente diferente da RFC 7591 Dynamic Client Area.
A RFC 7591 normalmente afirma,
POST registration_endpoint
↓
client_id
client_secret...
で す.
O fluxo SIWC OSS é,
sequenceDiagram autonumber participante C como Cliente/Agente OSS participante B como Navegador participante AS como Endpoint de Autorização OpenAI participante U como Usuário C->>C: Gerar estado, nonce, verificador_de_código / desafio_de_código C->>B: Abrir URL de autorização B->>AS: GET /api/accounts/authorize client_id=dynamic_agent_client tipo_de_resposta=código redirect_uri=http://127.0.0.1:PORTA/callback escopo=openid perfil e-mail ... desafio_de_código=... code_challenge_method=S256 AS->>U: Autenticar usuário U-->>AS: Autenticação concluída AS->>U: Mostrar consentimento/registro do aplicativo U-->>AS: Aprovar Nota sobre AS: Criar/registrar um cliente concreto e emita client_id = oaiapp_... AS-->>B: Redirecionamento HTTP para redirect_uri ?code=CÓDIGO_DE_AUTENTICAÇÃO &estado=ESTADO &client_id=oaiapp_... B-->>C: GET /callback cliente=CÓDIGO_DE_AUTENTICAÇÃO estado=ESTADO client_id=oaiapp_... Nota sobre C: Armazene oaiapp_... client_id emitido Use-o para a solicitação de token. não é cliente de agente dinâmico
で す.
Portanto,
Registro dinâmico mediado pelo usuário incorporado em uma solicitação de autorização.
Essa é a interpretação correta.
RFC 7591Seria melhor não chamar isso de Registro Dinâmico de Cliente Compatível.
ext_agent_host_id
Essa também é uma extensão interessante da OpenAI.
Além do cliente OSS,
agent host
Existe um conceito chamado isso.
Por exemplo,
fluxograma TD A["Um registro de cliente SIWC"] B["client_id"] A --> B B --> C["Laptop"] B --> D["VM"] C --> E["ext_agent_host_id A"] D --> F["ext_agent_host_id B"]
Este é o modelo.16.
Atualmente, a OpenAI utiliza IDs de host.
Recomendação
urn:ietf:params:oauth:jwk-thumbprint:...
RFC 9278 JWK Thumbprint URI
em vez de
urn:uuid:<uuid>
または
did:key:...
Eles reconhecem isso.17
No entanto, o que é extremamente importante neste momento é,
A OpenAI não verifica a posse da chave privada, mesmo quando se utiliza a impressão digital JWK.
Essa é a questão.18
Portanto,
JWK thumbprint host ID
≠ proof-of-possession
≠ DPoP
≠ client authentication
で す.
Atualmente, trata-se simplesmente de um identificador de host estável.
Como aplicativo nativo, ele segue rigorosamente a RFC 8252.
Em software livre para desktop/cliente,
http://127.0.0.1:{port}/auth/callback
É usado.
localhost Não use o literal de IP. 127.0.0.1 Esta é uma solicitação. Somente o número da porta pode ser alterado a cada login.19.
Isso está de acordo com o redirecionamento da interface de loopback na RFC 8252.RFC 8252Ele próprio,
http://127.0.0.1:{port}/...
Isso define e exige o uso de PKCE em aplicativos nativos.
Retornando ao login e id_token_hint
Após o cadastro, da próxima vez em diante,
client_id=<issued oaiapp_...>
ext_agent_host_id=...
id_token_hint=<previous ID Token>
login_hint=user@example.com
Você pode usá-lo.
Curiosamente, a OpenAI anteriormente Mesmo que o token de identificação tenha expirado... id_token_hint Pode ser usado comoEstá claramente declarado.20.
こ れ はOpenID Connect Core 1.0Não é que esteja fora do escopo.
O próprio núcleo OIDC,
id_token_hintEsta é uma dica que indica a sessão autenticada atual ou anterior.
E se foi emitido pelo OP,exp Recomendamos aceitar sessões recentes, mesmo que o prazo tenha expirado.
Portanto, esta parte é uma implementação OIDC bastante típica.
Existem algumas inconsistências nos metadados de descoberta.
Do ponto de vista da padronização, esta é atualmente a área de maior preocupação.
Documento de descoberta:
"scopes_supported": [
"openid",
"profile",
"email",
"offline_access"
]
Em
resource.invoke
chatgpt.tokens.use.direct
Não existe. OpenAI
No entanto, a documentação oficial da SIWC afirma claramente:
offline_access
resource.invoke
chatgpt.tokens.use.direct
Estamos solicitando21.
Isso não é necessariamente uma falha fatal em termos de especificações.
A capacidade de utilização do plano SIWC não pode ser descoberta apenas a partir dos metadados do Discovery.
Portanto, seria melhor adicioná-lo.
Da mesma forma,
resource=https://api.openai.com/v1
Estamos utilizando-o conforme a RFC 8707, mas não há metadados específicos do SIWC para descoberta da capacidade de uso do plano.
Portanto, a situação atual é,
OIDC discovery
+
out-of-band OpenAI SIWC profile documentation
Você precisa ler os dois.
No caso do plugin ChatGPT, o OAuth é duplicado.
A integração com o plugin ChatGPT possui uma estrutura ainda mais interessante.
De acordo com a explicação da OpenAI,
ChatGPT
│
│ outer OAuth
▼
Plugin / external application
│
│ inner SIWC/OIDC
▼
OpenAI Authorization Server
で す22.
Transação externa
ChatGPT → Plugin:
/oauth/authorize
?response_type=code
&client_id=CHATGPT_CONNECTOR_CLIENT_ID
&redirect_uri=...
&scope=...
&state=...
&code_challenge=...
&code_challenge_method=S256
&resource=...
&login_hint=...
&target_flow=chatgpt_siwc
transação interna
Plugin → OpenAI:
openid profile email
SIWC por
O plugin verifica o token de identificação da OpenAI para identificar a conta local e, em seguida, reinicia o OAuth externo.23.
Portanto,
O SIWC não substitui o servidor de autorização OAuth do próprio plugin.
Isso é importante.
Será incluído como uma camada interna da Federação de Identidades.
Identidade e autorização são intencionalmente separadas.
Em resumo:
fluxograma TD A["Conta OpenAI / ChatGPT"] A -->|"Autenticação OIDC openid profile email"| B["Aplicativo"] B -->|"Sessão própria do aplicativo"| C["Sessão local"] B -->|"Autorização opcional chatgpt.tokens.use.direct resource.invoke"| D["Token de acesso OAuth"] D -->|"Token de portador"| E["API de respostas OpenAI"]
O simples login com identificação não é suficiente.
- Conversas ChatGPT
- memória
- arquivos
- dados de faturamento
- Chave API
Estas não serão cruzadas. Central de Ajuda OpenAI
ま た chatgpt.tokens.use.direct Sem ele, você não pode realizar uma inferência usando um plano ChatGPT, mesmo que tenha obtido um token de ID válido. Desenvolvedores OpenAI
Essa separação é bastante importante do ponto de vista do design.
Do ponto de vista da segurança
Resumindo o perfil atual do ponto de vista da segurança OAuth/OIDC,
| 項目 | SIWC |
|---|---|
| Código de autorização | ○ |
| PKCE S256 | ○ / Essencialmente necessário |
state | ○ |
OIDC nonce | ○ |
| URI de redirecionamento exata | ○ |
| Aplicativo nativo navegador externo | ○ |
| Redirecionamento de loopback | ○ |
| Vídeo revigorante | ○ |
Estilo RFC 8707 resource | ○ |
| AT com restrição de remetente | Não encontrado nos documentos |
| DPoP | Não encontrado nos documentos |
| mTLS | Não encontrado nos documentos |
| PAR | Não do ponto de vista do perigo. |
| JAR | request não suportado |
Emparelhados sub | Nenhum, somente público |
| Registro dinâmico | Método original da OpenAI |
Além disso, no uso da tecnologia,
"request_uri_parameter_supported": false,
"request_parameter_supported": false
Portanto, atualmente não utilizamos métodos do tipo objeto JAR/request. https://auth.openai.com/.well-known/openid-configuration Isso pode ser visto na imagem.
Pontos de design de particular interesse
Se dependesse de mim, do ponto de vista da padronização, eu analisaria particularmente os quatro pontos a seguir.
① Separação de "Autenticação" e "Direito à IA"
Este é um bom projeto.
authentication != authorization != subscription entitlement
Isso é relativamente claro.
② A assinatura do ChatGPT se torna Acesso a Recursos OAuth
chatgpt.tokens.use.direct Isso não é apenas um escopo de API, mas na realidade,
"Este cliente pode utilizar todo o espaço de assinatura reservado para este assinante do ChatGPT."
Essa é a delegação.
A partir dos "dados do usuário/ação da API" que o OAuth tradicional pressupunha,delegação de direitos econômicos O significado de "escopo" foi ampliado.
Isso é bastante interessante do ponto de vista dos Pagamentos Agentic e da autoridade delegada.
③ O cadastro do cliente é vinculado ao usuário.
Emitido no fluxo OSS client_id Mas
user + selected workspace
Está fadado a24
Isso é convencional
client_id = software application/deployment
Isso é bem diferente do modelo OAuth.
Pelo contrário
client_id ≈ user-authorized agent registration
で す.
④ Adicione a identidade do host ao OAuth.
Além disso,
client
user
workspace
host
Nós os tratamos separadamente.
Isso se tornará importante no futuro da IA de agentes.
Principal
Agent
Client
Runtime
Device/Host
Essa estrutura é bastante semelhante à separação de identidades.
Por outro lado, existem alguns pontos que me preocupam.
Esta é a parte relevante do projeto do protocolo.
User
│
│ owns
▼
ChatGPT subscription
│
│ delegates entitlement
▼
Client
│
│ runs on
▼
Agent Host
│
│ Bearer AT
▼
Responses Resource Server
No entanto, atualmente,
ext_agent_host_id
Embora exista, a posse da chave privada do host não é verificada.
Portanto, a identificação atual do hospedeiro é,
identification
E,
cryptographic binding
não é25.
Além disso, o token de acesso é do tipo Bearer.
Se se referir a trabalho de alto valor, então, no futuro,
JKT / DPoP / attested key
Acho que há muito espaço para integração em locais como este. É basicamente uma implementação de FAPI.
ま と め
Fazer login com o ChatGPT é bastante simples para um OIDC.
OIDC Authorization Code
+ PKCE S256
+ nonce
+ public sub
+ standard ID Token validation
Além disso, o perfil único da OpenAI é:
dynamic_agent_client
agent_name_hint
ext_agent_host_id
resource.invoke
chatgpt.tokens.use.direct
Adicionar,
ChatGPT subscription entitlement
↓ OAuth delegation
Responses API
Estamos percebendo isso.
O que é particularmente importante é que esta não é simplesmente uma "versão ChatGPT do 'Entrar com o Google'".Provedor de identidade + autorização de direitos do assinante + sistema de registro de agente/cliente/host Esta é a combinação.
Em termos de padronização,RFC 8707 / RFC 8252 Embora dependa fortemente do OpenID Connect Core, ele estende apenas o registro dinâmico de clientes e a vinculação agente-host com suas próprias extensões personalizadas.Organizar dessa forma facilita a compreensão.
nota de rodapé
- OpenAI: Uma retrospectiva do DevDay 2026
- Documento de Descoberta OIDC da OpenAI
- Desenvolvedores OpenAI
- Desenvolvedores da OpenAI: Em seu site
- Para login padrão somente com identificação, o artefato necessário é o id_token. Não é necessário um access_token ou refresh_token da OpenAI; eles não fazem parte do contrato padrão do cliente somente com identificação. Desenvolvedores OpenAI
- Desenvolvedores da OpenAI – Faça login com o ChatGPT – No seu site
- OpenAI
- Desenvolvedores da OpenAI: Registros e login
- RFC 8707: Indicadores de Recursos para OAuth 2.0 | Editor de RFC
- Desenvolvedores OpenAI
- Desenvolvedores da OpenAI – Login com ChatGPT – Modelos e inferência
- Desenvolvedores da OpenAI – Login com ChatGPT – Modelos e inferência
- Desenvolvedores da OpenAI – Faça login com o ChatGPT – Limitações da versão prévia
- Desenvolvedores da OpenAI: Registro e login
- Desenvolvedores da OpenAI – Faça login com o ChatGPT – Cadastro e login
- Desenvolvedores da OpenAI - Faça login com o ChatGPT - Visão geral
- Desenvolvedores OpenAI
- Desenvolvedores da OpenAI – Iniciar sessão com o ChatGPT – Visão geral
- Desenvolvedores da OpenAI – Login com ChatGPT – Cadastro e login
- OpenAI Developers-SIWC - Registro e login
- Desenvolvedores da OpenAI – Login com ChatGPT – Cadastro e login
- Desenvolvedores da OpenAI – No seu plugin ChatGPT
- Desenvolvedores da OpenAI – Faça login com o ChatGPT – No seu plugin do ChatGPT
- Desenvolvedores da OpenAI – Login com ChatGPT – Visão geral
- Desenvolvedores da OpenAI: SIWC – Visão geral
