<@U04UQ68083H> je suis en train d'implementé un lo...
# ory-copilot
s
@chilly-king-10285 je suis en train d'implementé un login avec le SDK @ory/client et j'arrive pas à ajouter un header custom à ma requete que je voudrais récupérer dans mon webhook après pour différencier mes applications qui se connecter :
Copy code
this.client = new FrontendApi(
  new Configuration({
    basePath: KRATOS_BASE_PATH,
  }),
);
Copy code
public async getLogoutUrl(
  returnToUri: string = ROUTES.HOME.path,
): Promise<string | undefined> {
  try {
    const sessionCookie = this.getSessionCookie();
    const { data } = await this.client.createBrowserLogoutFlow({
      cookie: HYDRA_COOKIE + "=" + sessionCookie,
      returnTo: generateUrl(returnToUri).toString(),
    });

    return data.logout_url;
  } catch {
    return undefined;
  }
}
C'est quoi la meilleur choses à faire ? Me connecter à une autre application ou ajouter un header
b
A message from kapa.ai
Pour ajouter un header personnalisé à une requête effectuée avec le SDK @ory/client (par exemple, lors de l’appel à createBrowserLogoutFlow ou à d’autres endpoints), la documentation officielle et les exemples de code fournis par Ory n’exposent pas directement une option pour injecter des headers personnalisés via les méthodes du SDK. Les options disponibles dans Configuration concernent principalement l’URL de base, les credentials, etc. Dans le cas d’un besoin d’identification d’application côté webhook (par exemple, pour différencier les applications clientes dans un token_hook ou un autre webhook), la pratique recommandée par Ory est d’utiliser l’authentification du webhook via un header ou un cookie, mais cela concerne la requête sortante d’Ory vers votre webhook, pas la requête entrante du SDK vers Ory. Voici un exemple de configuration d’un token_hook avec authentification par header :
Copy code
bash ory patch oauth2-config --project <project-id> --workspace <workspace-id> \ --add '/oauth2/token_hook/url="<https://my-example.app/token-hook>"' \ --add '/oauth2/token_hook/auth/type="api_key"' \ --add '/oauth2/token_hook/auth/config/in="header"' \ --add '/oauth2/token_hook/auth/config/name="X-API-Key"' \ --add '/oauth2/token_hook/auth/config/value="MY API KEY"' \ --format yaml
[Customizing claims with OAuth2 webhooks](https://www.ory.sh/docs/hydra/guides/claims-at-refresh) Pour différencier vos applications clientes dans le webhook : - Utilisez l’identifiant du client OAuth2 (
client_id
) qui est déjà inclus dans le payload envoyé au webhook par Ory. Ce champ est prévu pour identifier l’application qui effectue la connexion. - Exemple de payload reçu par le webhook :
Copy code
json   {     "session": { ... },     "request": {       "client_id": "app-client",       ...     }   }
Vous pouvez donc différencier vos applications côté webhook en utilisant ce champ, sans avoir besoin d’ajouter un header personnalisé à la requête SDK [Customizing claims with OAuth2 webhooks](https://www.ory.sh/docs/hydra/guides/claims-at-refresh). Si vous souhaitez absolument ajouter un header custom à la requête SDK : - Le SDK @ory/client ne propose pas d’option native pour injecter des headers personnalisés dans les appels (sauf pour certains cas comme l’API key d’administration). - Pour contourner cette limitation, il faudrait soit : - Modifier le SDK (non recommandé). - Utiliser un proxy HTTP entre votre application et Ory pour injecter le header. - Ou, si vous contrôlez l’appel HTTP sous-jacent (par exemple, en utilisant axios ou fetch directement), vous pouvez alors ajouter vos headers, mais vous perdez l’abstraction du SDK. Conclusion : La meilleure pratique est d’utiliser le champ
client_id
dans le payload du webhook pour différencier vos applications. Ajouter un header custom via le SDK n’est pas supporté nativement et n’est généralement pas nécessaire pour ce cas d’usage. N’hésitez pas à préciser votre besoin si vous souhaitez un exemple d’implémentation côté webhook pour filtrer selon le
client_id
.
s
Ok et comment je peux récupérer mon client id dans
Copy code
function(ctx) {
  oryUuid: ctx.identity.id,
  email: ctx.identity.traits.email,
  redirectTo: ctx,
  headers: ctx.request_headers
}
pour le webhook?
@chilly-king-10285 Ok et comment je peux récupérer mon client id ou mon client name dans
Copy code
function(ctx) {
  oryUuid: ctx.identity.id,
  email: ctx.identity.traits.email,
  redirectTo: ctx,
  headers: ctx.request_headers
}
pour le webhook?
b
A message from kapa.ai
Dans le contexte des webhooks Ory configurés avec Jsonnet, les objets accessibles dans le template dépendent du type de flow et du contexte d’exécution. Selon la documentation, pour les webhooks liés aux flows d’identité (par exemple, registration, login, etc.), le template Jsonnet reçoit un objet ctx contenant notamment : - ctx.identity (l’identité de l’utilisateur) - ctx.flow (le flow en cours) - ctx.request_headers (les headers de la requête) - ctx.request_method, ctx.request_url, etc. Cependant, la documentation ne mentionne pas la présence directe du client_id ou du client_name OAuth2 dans l’objet ctx pour ces webhooks d’identité. Ces informations sont disponibles dans les webhooks OAuth2/Hydra (token_hook, etc.), mais pas dans les webhooks d’identité classiques. Voici un exemple de ce qui est accessible :
Copy code
jsonnet function(ctx) {   userId: ctx.identity.id,   customData: ctx.flow.transient_payload.custom_data,   traits: {     email: ctx.identity.traits.email,     name: ctx.identity.traits.name,     newsletterConsent: ctx.identity.traits.consent.newsletter,   }, }
[Customizing request body with Jsonnet](https://www.ory.sh/docs/guides/integrate-with-ory-cloud-through-webhooks#jsonnet-templating) Résumé : - Si vous utilisez un webhook d’identité (ex : registration, login), le client_id/client_name OAuth2 n’est pas disponible dans ctx selon la documentation. - Si vous utilisez un webhook OAuth2 (token_hook), le client_id est inclus dans le payload envoyé par Ory, mais ce n’est pas un template Jsonnet, c’est un POST JSON classique [Customizing claims with OAuth2 webhooks](https://www.ory.sh/docs/hydra/guides/claims-at-refresh). Conclusion : Je suis désolé, mais d’après les sources disponibles, il n’est pas possible de récupérer le client_id ou le client_name OAuth2 dans un template Jsonnet de webhook d’identité. Ces informations sont uniquement disponibles dans les webhooks OAuth2/Hydra, où elles sont envoyées dans le payload JSON, mais pas exposées dans ctx pour Jsonnet. Si vous avez besoin de cette information dans un webhook d’identité, il faudrait la transmettre d’une autre manière (par exemple, via un champ custom dans le flow ou dans les headers si vous contrôlez l’appel).
s
@chilly-king-10285 Ok et du coup comment je peux lui transmettre via via un champ custom dans le flow ou dans les headers si vous contrôlez l’appel
Copy code
this.client = new FrontendApi(
  new Configuration({
    basePath: KRATOS_BASE_PATH,
  }),
);
Copy code
const { data } = await this.client.createBrowserLogoutFlow({
  cookie: HYDRA_COOKIE + "=" + sessionCookie,
  returnTo: generateUrl(returnToUri).toString(),
});
b
A message from kapa.ai
Pour transmettre une information personnalisée (comme un
client_id
) à un webhook Ory lors d’un flow d’identité (registration, login, etc.), la documentation officielle recommande d’utiliser le champ optionnel
transient_payload
lors de la soumission du flow. Ce champ permet de transmettre des données temporaires qui seront accessibles dans le contexte (
ctx.flow.transient_payload
) du webhook Jsonnet, mais qui ne seront pas persistées dans l’identité. Exemple d’utilisation lors d’un flow de registration :
Copy code
js const { data } = await this.client.updateRegistrationFlow({   flow: flowId,   updateRegistrationFlowBody: {     method: "password",     csrf_token: "your-csrf-token",     "traits.email": "<mailto:email@example.com|email@example.com>",     password: "verystrongpassword",     transient_payload: {       client_id: "votre_client_id_personnalisé"     }   } });
Dans votre template Jsonnet du webhook, vous pourrez alors accéder à cette valeur :
Copy code
js function(ctx) {   clientId: ctx.flow.transient_payload.client_id,   // autres champs... }
Limite : Pour les méthodes comme
createBrowserLogoutFlow
, la documentation ne mentionne pas la possibilité de passer un champ
transient_payload
ou d’ajouter des headers personnalisés via le SDK @ory/client. Cette capacité est documentée uniquement pour les flows de registration, login, etc. Si vous avez besoin de transmettre des données personnalisées lors du logout, la documentation ne fournit pas de solution directe pour ce cas d’usage, et il n’est pas possible d’ajouter un header custom via le SDK selon les sources disponibles. Résumé : - Pour registration/login/settings : utilisez
transient_payload
dans le body de la requête pour transmettre des données personnalisées, récupérables dans le webhook Jsonnet via
ctx.flow.transient_payload
[Submit registration flow](https://www.ory.sh/docs/kratos/bring-your-own-ui/custom-ui-basic-integration#submit-registration-flow). - Pour logout : il n’existe pas de mécanisme documenté pour transmettre un champ custom ou un header via le SDK. Si vous avez besoin de ce comportement pour le logout, il n’est pas supporté nativement selon la documentation actuelle.