https://<name>.auth.didit.mepara uma aplicação em produção,https://<name>.sandbox.auth.didit.mepara uma aplicação sandbox,- ou o seu domínio personalizado, depois de estar ativo.
DIDIT_AUTH_ISSUER com o seu emissor, sem barra final, e DIDIT_APPLICATION_ID com o ID da sua aplicação: os tokens incluem-no como aud. A sua chave publicável codifica o emissor: depois de pk_live_ ou pk_test_, está o emissor em base64url sem padding.
Quando o seu domínio personalizado ficar ativo, substitui o host predefinido como emissor. Os novos tokens indicam-no em
iss, a descoberta aponta jwks_uri para ele, e a sua chave publicável muda. Os tokens de acesso emitidos com o host predefinido falham em GET /session/ até serem atualizados. Atualize DIDIT_AUTH_ISSUER quando ativar o domínio, ou aceite os dois emissores até os tokens antigos expirarem, em até 5 minutos.Descoberta e chaves
O emissor suporta:
- Tipo de resposta
codee modo de respostaquery. - Tipos de concessão
authorization_codeerefresh_token. - Método PKCE
S256apenas. Os clientes são públicos: não existe segredo do cliente, eclient_idé o ID da sua aplicação. - Algoritmo de assinatura
ES256(chaves P-256). - Âmbitos
openid,email,phone,profileeoffline_access.
prompt=none não é suportado. Use GET /session/ para ler e verificar uma sessão.
Cache e rotação
Ambos os documentos respondem comCache-Control: public, max-age=300, pelo que pode mantê-los em cache durante 5 minutos, tal como as caches partilhadas. Permitem 1200 pedidos por minuto e 12 000 por hora por endereço IP, limites muito superiores aos dos endpoints de início de sessão, porque muitas instâncias de backend costumam partilhar o mesmo endereço.
- Cada chave tem um
kid; os novos IDs de chave começam pork_. Cada token indica a sua chave no cabeçalhokid. - As chaves rodam a cada 30 dias. A Didit publica a chave seguinte um dia antes de começar a assinar, e mantém a chave anterior publicada durante um dia depois de deixar de assinar. Um JWKS mantido em cache durante 5 minutos permite, por isso, continuar a verificar assinaturas durante uma rotação.
- Coloque as chaves em cache por
kid. Quando um token indicar umkidque não tem, vá buscar de novo o JWKS, no máximo uma vez por minuto, e rejeite o token se a chave continuar em falta. - Quando a Didit revoga uma chave comprometida, remove-a imediatamente do JWKS, e
GET /session/rejeita todos os tokens assinados por essa chave. Uma chave de substituição começa a assinar de imediato, sem o dia de publicação antecipada. Um JWKS em cache até 5 minutos antes continua a aceitar a chave revogada e ainda não conhece a substituta, pelo que os novos tokens podem falhar a verificação offline até a cache ser atualizada.
Iniciar sessão
Abra a página alojada, que é oauthorization_endpoint:
Os guias de início rápido criam este pedido por si.
Trocar o código
O callback recebecode e state. Verifique state e, depois, troque o código em até 60 segundos. Cada código funciona uma única vez. O corpo pode ser JSON ou codificado no formato de formulário.
expires_in indica os segundos que o token de acesso ainda tem de validade. Quando desativa várias sessões, esta troca termina as outras sessões da pessoa.
Afirmações do token de acesso
O token de acesso é um JWT com o cabeçalhoalg: ES256 e typ: at+jwt. Tem uma duração máxima de 5 minutos e nunca dura mais do que a sua sessão.
O token de ID tem o cabeçalho
typ: JWT. Contém as mesmas afirmações, exceto client_id, e ainda auth_time e email_verified, bem como email, name e phone_number quando têm valor. Apenas o token de ID da troca do código contém nonce, quando o início de sessão o tinha: verifique-o aí, porque os tokens de ID das atualizações nunca o contêm. Um token de ID nunca é aceite como token de acesso.
Verifique um token no seu servidor
Verifique todos estes pontos antes de confiar numa afirmação:algéES256etypéat+jwt. Rejeite qualquer outro algoritmo, incluindonone.- O
kidestá no JWKS da sua aplicação, e a assinatura é validada. issé igual ao emissor configurado, eaudé igual ao ID da sua aplicação.expeiatsão válidos, admitindo até 60 segundos de diferença de relógio, esub,sidejtiestão presentes.acténull. O token de acesso de um agente de IA é assinado com a mesma chave e tem o mesmotyp,isseaud; sóacto distingue. Rejeite-o, a não ser que o endpoint aceite agentes: nesse caso, permita apenas o queact.scopesconcede.GET /session/rejeita sempre o token de um agente.
GET /session/.
Verifique a sessão
sub, sid, application_id, vendor_data, amr, mfa_verified, email, email_verified, phone, verified_identity, verified, expires_at, post_logout_redirect_uri e organizations. Cada entrada de organização tem organization_id, organization__name, role e custom_role.
Esta verificação é mais rigorosa do que a verificação offline. Falha também quando a sessão foi revogada, ficou inativa ou ultrapassou a sua duração máxima, quando a pessoa foi bloqueada ou o seu e-mail deixou de estar verificado, quando a sessão deixa de cumprir a sua política de MFA (por exemplo, depois de a pessoa adicionar uma aplicação de autenticação ou de se tornar administradora de uma organização), ou quando o token foi substituído por uma atualização. Uma falha devolve 401 {"detail": "invalid_token"} com WWW-Authenticate: Bearer.
GET /session/ permite 30 pedidos por minuto e 300 por hora por endereço IP, limite que partilha com DELETE /session/. Verifique os tokens offline em cada pedido e reserve esta chamada para os momentos que a exigem. Cada chamada bem-sucedida conta como atividade e, por isso, reinicia o idle_timeout da sessão.
Um e-mail verificado não é uma verificação de identidade. Para isso, leia verified: aqui é null quando não existe, enquanto os tokens contêm {}.
Tokens de atualização
- O token de atualização é uma cadeia aleatória, válida até a sessão terminar.
- A reutilização termina a sessão. Quando um token de atualização já usado volta a chegar, a Didit interpreta-o como sinal de roubo: revoga a sessão e devolve
400 {"error": "invalid_grant"}. Os tokens da sessão também deixam de funcionar, incluindo os da atualização anterior: o respetivo token de atualização falha e o seu token de acesso falha de imediato emGET /session/, embora continue a ser validado offline até expirar, no máximo em 5 minutos. - Execute uma só atualização de cada vez para uma sessão, em todos os separadores, dispositivos e instâncias do servidor, e substitua os três tokens em conjunto.
- Se uma atualização falhar com
400ou não obtiver resposta, volte a iniciar sessão. Não tente de novo às cegas: uma nova tentativa depois de uma atualização bem-sucedida constitui uma reutilização. - Um
503 {"error": "temporarily_unavailable"}significa que a atualização não aconteceu e que o seu token de atualização continua a funcionar. Tente novamente com espera progressiva. - A Didit responde com um
429antes de a atualização ser executada, por isso tente novamente apósRetry-After. O endpoint de tokens permite 30 pedidos por minuto e 300 por hora por endereço IP. Além disso, cadaPOSTeDELETEda sua aplicação partilha baldes de proteção contra bots: 60 pedidos por minuto por endereço IP nesses endpoints e 30 por minuto por dispositivo. Para a aplicação inteira, as atualizações têm um balde de 6.000 por minuto, e cada outroPOSTeDELETE(incluindo os de navegadores e passos de início de sessão) tem um de 3.000 por minuto, pelo que as atualizações nunca consomem os seus pedidos de início de sessão. - Com tokens de acesso de 5 minutos, 300 atualizações por hora cobrem cerca de 25 pessoas que permanecem ativas. Se o seu servidor atualizar os tokens de muitas pessoas a partir do mesmo endereço, atualize apenas quando um pedido precisar de um novo token, e faça a atualização no navegador ou na aplicação sempre que for possível.
Terminar sessão
DELETE /session/ com o token de acesso atual da pessoa termina a sessão e devolve 204. O respetivo token de atualização deixa de funcionar, e os seus tokens de acesso falham de imediato em GET /session/; os tokens que verifica offline continuam válidos até expirarem. Depois, envie a pessoa para o seu post_logout_redirect_uri, se tiver definido um.
Terminar sessão exige um token de acesso que GET /session/ aceitaria: um que não tenha expirado e não tenha sido substituído por uma renovação. Um 401 significa que a sessão não terminou. Renove o token e, depois, termine a sessão com o novo token de acesso; se a renovação falhar com 400, a sessão já não pode ser utilizada.
Uma sessão termina também quando:
- ultrapassa
session_lifetime(predefinido: 30 dias) ouidle_timeout(predefinido: 1 dia), - a pessoa inicia sessão novamente quando as sessões múltiplas estão desativadas,
- a pessoa redefine a palavra-passe com
revoke_on_password_changeativo, - a sua equipa revoga a sessão ou bloqueia a pessoa na consola,
- um token de atualização já utilizado é enviado novamente.
Durações
Guardar credenciais consoante a finalidade
- Guarde as chaves de API de verificação e os tokens da consola no seu servidor.
- Guarde os tokens de acesso do navegador em memória sempre que possível. Em aplicações renderizadas no servidor, use cookies seguros HttpOnly e proteja os pedidos autenticados por cookies contra CSRF.
- Guarde os tokens de atualização de dispositivos móveis em armazenamento protegido pela plataforma. Limpe o estado local após terminar a sessão.
- Nunca coloque tokens em URLs ou registos.