Mire d'autorisation đ
La mire d'autorisation, OAuth2, permet aux applications du partenaire d'accéder aux ressources appartenant à une association.
Workflow
Afin de lier votre client_id
avec une association, il vous faut passer par 4 Ă©tapes:
- Présenter HelloAsso
- Initier la mire de connexion dans une pop-up
- Récupérer l'
authorization_code
issue de la liaison - L'Ă©changer contre un
access_token
et unrefresh_token
afin de faire vos appels sur les données de l'asso.
A noter que lors d'une mire de connexion, vous liez votre client_id
à l'entité "association" et non à la personnes qui a initié la mire.
1. Présenter HelloAsso
Lorsque vous implĂ©mentez une connexion Ă HelloAsso via lâAPI dans un outil pour les associations, il est essentiel que celles-ci puissent identifier HelloAsso et son modĂšle Ă©conomique, afin quâelles puissent communiquer sur ce sujet Ă leurs publics et ainsi, Ă©viter toute incomprĂ©hension ou friction.
Texte à intégrer dans le parcours de l'association pour sa connexion avec HelloAsso
HelloAsso aide les associations à collecter des paiements en ligne et propose ses services gratuitement. Elle prend à sa charge tous les frais de transaction pour que vous puissiez bénéficier de la totalité des sommes versées par vos publics, sans frais. Les contributions volontaires laissées par ces derniers sont leur unique source de revenus.
2. Enregistrement de votre domaine de redirection
Afin de sécuriser le processus de mire d'autorisation, vous ne pouvez l'initier que depuis le domaine que vous avez configuré pour votre clé.
Utilisez le end-point Ă votre disposition pour modifier votre domaine.
3. Initier la mire de connexion
Pour obtenir un authorization_code
, vous devez initier une mire de connexion dans une pop-up lorsque l'utilisateur clique sur le bouton de connexion.
L'url de la pop-up doit ĂȘtre la suivante:
https://auth.helloasso.com/authorize
Vous devez Ă©galement ajouter les paramĂštres d'URL suivants:
Nom du paramĂštre | Description | Exemple | Obligatoire |
---|---|---|---|
client_id | Votre client id. | Obligatoire | |
redirect_uri | L'URL sur laquelle l'utilisateur sera redirigĂ© aprĂšs la connexion. (succĂšs ou Ă©chec), elle doit ĂȘtre url encode. (exemple : https%3A%2F%2Fwww.url.com%0A ) | https://partenaire.com/success | Obligatoire |
code_challenge | Voir ci-dessous. | Obligatoire | |
code_challenge_method | MĂ©thode Ă utilisĂ©e. Doit ĂȘtre: S256 | S256 | Obligatoire |
state | Une chaĂźne de texte de moins de 500 caractĂšres. Cette valeur vous sera renvoyĂ©e Ă l'identique lors du callback. Elle peut ĂȘtre utilisĂ© pour vĂ©rifier l'authenticitĂ© de la connexion et Ă©viter des appels frauduleux ou pour encoder tout autres donnĂ©es. |
URL de redirection
L'URL de redirection doit ĂȘtre en https
obligatoirement.
Le domaine de lâURL de redirection doit ĂȘtre le mĂȘme que celui configurĂ© pour votre client API.
Enregistrement de votre domaine de redirection
Utilisez le end-point Ă votre disposition pour modifier votre domaine vous mĂȘme.
Code challenge
PKCE (Proof Key for Code Exchange) est une mesure de sécurité pour l'octroi de l'autorisation.
Etant un standard, il existe sur internet nombre de librairies open-source qui permettent de générer un code challenge PKCE.
Si vous souhaitez le faire vous mĂȘme voici la marche Ă suivre:
- Vous devez générer une chaine de texte aléatoire de 43 à 128 caractÚres, parmi les caractÚres suivants :
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.\_~
- Vous devez ensuite générer le Code Challenge :
- hachez-la chaßne de texte précédemment obtenu avec la fonction de hachage SHA-256
- encodez-la en base64
- encodez-la par URL
Gardez la chaßne générée précieusement, elle sera utile pour échanger l'authorization_code contre un access_token.
Tester votre générateur de code challenge
Si vous souhaitez tester votre générateur de challenge de code, vous pouvez le faire ici
avec cet outil en ligne : https://tonyxu-io.github.io/pkce-generator/
Exemple
https://auth.helloasso.com/authorize?client_id=9fdc22226bf24ff99b875f4a7c503715&redirect_uri=YOUR_REDIRECT_URI&code_challenge=YOUR_CODE_CHALLENGE&code_challenge_method=S256&state=abc
4. Récupérer l'authorization_code
Dans la popup, l'utilisateur a la possibilité de sélectionner l'association qu'il souhaite lier.
S'il n'en a pas déjà une, il peut la créer une directement depuis la popup en cliquant sur "Vous n'avez pas encore de compte ?", suite de son inscription il sera redirigé sur la mire d'autorisation pour terminer le processus de liaison.
Lorsque l'utilisateur termine le processus, il sera redirigé sur la redirect_uri
défini précédemment.
Nous ajoutons un paramĂštre d'URL
code
ayant pour valeur l'authorization_code
state
si celui-ci a été renseigné
Dans le cas ou une erreur est apparue, le code erreur sera transmis dans l'URL Ă©galement.
Exemple
https://www.partenaire.com/success?code=xipPrCkrZ7DkAx9pzGYafMn39Zbfgc978j2cvHfmDaRGutn6zQKH4fE6ZXqVwVqHW35RYAbtSWGx95i3AQci52hQZ4pzF7ARC&state=abc
Validité de l'authorization_code
Attention, l'authorization_code n'est valable que 5min.
5. Ăchanger un authorization_code contre un access et refresh token
Enfin pour réaliser vos appels, vous pouvez maintenant échanger l'authorization_code
contre un access_token
en procĂ©dant Ă un appel POST sur lâURL:
https://api.helloasso.com/oauth2/token
RĂŽle de l'access_token issue de la liaison
L'
access_token
issue de la liaison aura le rĂŽle organisation_admin sur l'association avec laquelle vous avez fait la liaison.
Header
Key | Value |
---|---|
content-type | application/x-www-form-urlencoded |
Body
Key | Value | Obligatoire |
---|---|---|
client_id | Votre client ID | Obligatoire |
client_secret | Votre client secret | Obligatoire |
grant_type | "authorization_code" | Obligatoire |
code | L'authorization_code reçu précédemment. | Obligatoire |
code_verifier | La chaßne de caractÚre que vous avez généré aléatoirement, avant encodage. | Obligatoire |
redirect_uri | L'url configurĂ© prĂ©cĂ©demment (quand elle Ă©tait dans l'URL elle devait ĂȘtre url_encode, ici elle ne doit pas l'ĂȘtre) |
Resultat (JSON)
Key | Description |
---|---|
access_token | Le token d'accĂšs Ă utiliser pour vos futures appels. |
refresh_token | Le token permettant de rafraichir le token d'accÚs aprÚs que celui-ci soit expiré. |
token_type | "bearer" |
expires_in | La durée de validité du token d'accÚs en seconde. |
organization_slug | Le nom standardisé de l'association liée. |
Stockage du slug de l'association
C'est dans le résultat de cet appel que vous pouvez trouver le slug de l'association qui vient de ce lier.
Attention cependant: une association peut, exceptionnellement, changer de slug, pensez-donc à implémenter la réception de la notification de changement de slug.
Exemple
curl --location 'https://api.helloasso.com/oauth2/token' \
--header 'content-type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxx' \
--data-urlencode 'client_secret=xxxxxxxxxxxxxxxxxxxxxxxxxxx' \
--data-urlencode 'code=4xmNv7JZCb5zvzMknW3uQVeWPSDFN16f1h9ed1v9z1VqWa4n7b7uCdAaCPPMDsJxqt7ASmc3tgR35yZ7udzNdpmfh' \
--data-urlencode 'redirect_uri=https://www.partenaire.com/success' \
--data-urlencode 'code_verifier=8F2g_j-HYRQPBpaJCmSFKGGuW~2PRHB3xb.TxpRLDbwrlhB4F'
Temps de validité des tokens
Nous vous recommandons de suivre les guidelines dâimplĂ©mentation du protocole OAuth, notamment sur la rotation automatique des access tokens (TTL: 30min) avec le refresh token (TTL: 30 jours) afin que la session utilisateur ne soit pas interrompue.
Les access_token
et refresh_token
issu d'une liaison avec la mire ne remplacent pas ceux que vous pouvez gĂ©nĂ©rĂ© avec votre clĂ© API partenaire. Ils doivent uniquement servir Ă rĂ©cupĂ©rer des informations concernant lâassociation qui vient de se lier.
Le fait d'enregistrer ces tokens ainsi que leur date dâĂ©mission dans votre base de donnĂ©es vous permettra de connaĂźtre leur date dâexpiration : 30 minutes pour lâaccess_token
et 30 jours pour le refresh_token
.
Si, au bout de trente jours, vous nâavez pas renouvelĂ© ces tokens (voir la section « RafraĂźchir un token »), ils expireront et la liaison avec lâassociation sera brisĂ©e. Il est donc nĂ©cessaire de prĂ©voir un mĂ©canisme automatique et rĂ©gulier pour rafraĂźchir ces tokens.
Vous pouvez Ă©tablir autant de liaisons que vous le souhaitez, et donc disposer de plusieurs tokens.
Updated 5 months ago