Documentation
SDK client
Auth

L'authentification Secrecy

Secrecy auth est le service qui fournit à votre application un client Secrecy authentifié. L'utilisateur se connecte via le SSO Secrecy, et votre application récupère un SecrecyClient prêt à l'emploi. Vous ne stockez jamais de mot de passe et vous ne voyez jamais la clé maître de l'utilisateur : la page de connexion Secrecy déverrouille les clés d'identité de l'utilisateur, et seules ces clés sont chargées sur l'appareil de l'utilisateur à la connexion, tout ce qui suit peut donc chiffrer et déchiffrer localement.

Comment fonctionne Secrecy auth ?

L'authentification a lieu sur la page d'authentification hébergée par Secrecy. La fonction login y envoie l'utilisateur par une redirection de la page entière, et rapporte une session, un JWT et les paires de clés de l'utilisateur.

Secrecy étant un fournisseur d'authentification unique, l'utilisateur s'authentifie une seule fois avec une identité de confiance unique et aucun nouveau mot de passe n'a à être stocké par votre application.

Gérer l'authentification

Une fois l'utilisateur connecté, la session est conservée dans le navigateur. Un rechargement de page ne nécessite pas une nouvelle connexion : getSecrecyClient reconstruit le client à partir des identifiants stockés. La session peut être terminée à tout moment avec la méthode logout, qui efface également les clés stockées localement.


Tout dans le SDK Secrecy commence par un client authentifié. Cette page montre comment en obtenir un, et les options acceptées par les deux points d'entrée.

Votre App ID Secrecy est requis. Voir la page d'installation pour l'obtenir.


Connecter l'utilisateur

La fonction login ouvre le SSO Secrecy, persiste la session et les clés retournées, et résout un client prêt à l'emploi. La page est quittée avant que la promesse ne soit résolue.

auth.ts
import {
  getSecrecyClient,
  login,
  type SecrecyClient,
  setup,
} from '@secrecy/lib';
 
const loginUser = async (): Promise<SecrecyClient | null> => {
  try {
    const client = await login({
      appId: '<YOUR_APP_ID>',
      // champs optionnels :
      scopes: { email: true },
      path: window.location.pathname,
      backPath: document.referrer,
      redirect: true,
    });
 
    return client;
  } catch (error) {
    console.error(error);
    return null;
  }
};

Réutiliser le client stocké

Une fois les identifiants stockés par une première connexion, getSecrecyClient restitue le client sans redemander à l'utilisateur de se connecter. La fonction est synchrone, mais la bibliothèque de cryptographie doit d'abord être initialisée avec setup.

auth.ts
const getSecrecyClientFromStorage = async (): Promise<SecrecyClient | null> => {
  // Initialiser la bibliothèque de cryptographie avant d'utiliser les clés stockées
  await setup();
 
  // Retourne null tant qu'aucune session n'a été stockée
  return getSecrecyClient();
};

Options du client

getSecrecyClient et login prennent tous les deux un objet d'options.

secrecy.ts
// Retrieve a client already stored by a previous login
getSecrecyClient(opts?: {
  // Read the credentials from sessionStorage instead of localStorage
  session?: boolean;
  // Override the Secrecy urls (auth, account, api, data)
  secrecyUrls?: Partial<SecrecyUrls>;
}): SecrecyClient | null;
 
// Start an authentication flow
login(params: {
  appId?: string;
  // Expected user / organization. A mismatch forces a new login
  context?: { userId?: string; orgId?: string };
  // Full page navigation to the Secrecy authentication page
  redirect?: boolean;
  path?: string | null;
  backPath?: string;
  scopes?: { email: boolean };
  // Store the credentials in sessionStorage instead of localStorage
  session?: boolean;
  secrecyUrls?: Partial<SecrecyUrls>;
  // Ignore any cached client and always start a new login
  forceLogin?: boolean;
}): Promise<SecrecyClient | null>;

Lorsque redirect vaut true, login renvoie null au premier appel, car le navigateur est redirigé vers la page d'authentification Secrecy. Il renvoie un SecrecyClient lorsque l'utilisateur revient.