Aller au contenu principal

Authentification

Mastodon utilise OAuth 2.0. La plupart des endpoints API nécessitent un token d'accès.

Vue d'ensemble du flux d'authentification

1. Enregistrer l'app   → Obtenir client_id / client_secret
2. Autorisation → Ouvrir l'écran d'autorisation dans le navigateur → Obtenir le code d'autorisation
3. Obtenir le token → Échanger le code d'autorisation contre un token d'accès

Étape 1 : Enregistrer votre application

final app = await client.apps.create(
clientName: 'My App',
redirectUris: ['urn:ietf:wg:oauth:2.0:oob'],
scopes: 'read write push',
);

final clientId = app.clientId!;
final clientSecret = app.clientSecret!;

Passer urn:ietf:wg:oauth:2.0:oob comme URI de redirection active le flux OOB (Out-of-Band), qui affiche le code d'autorisation à l'écran. Pour les applications web ou mobiles, spécifiez une URL de callback à la place.

Étape 2 : Autorisation de l'utilisateur

Ouvrez l'URL d'autorisation dans un navigateur pour inviter l'utilisateur à accorder les permissions. Cette étape dépend de la plateforme et sort du cadre de cette bibliothèque.

// Building the authorization URL
final authorizeUrl = Uri.parse('${baseUrl}/oauth/authorize').replace(
queryParameters: {
'client_id': clientId,
'redirect_uri': 'urn:ietf:wg:oauth:2.0:oob',
'response_type': 'code',
'scope': 'read write push',
},
);
// → Open this URL in a browser

Une fois que l'utilisateur a accordé les permissions, un code d'autorisation est retourné.

Étape 3 : Obtenir le token d'accès

final token = await client.oauth.obtainToken(
grantType: 'authorization_code',
clientId: clientId,
clientSecret: clientSecret,
redirectUri: 'urn:ietf:wg:oauth:2.0:oob',
code: authorizationCode, // The code from Step 2
);

print(token.accessToken); // Token for API calls

Initialisez un nouveau client avec le token obtenu :

final authenticatedClient = MastodonClient(
baseUrl: 'https://mastodon.social',
accessToken: token.accessToken,
);

Révoquer un token

await client.oauth.revokeToken(
clientId: clientId,
clientSecret: clientSecret,
token: accessToken,
);

Identifiants client (client credentials)

Pour obtenir un token applicatif sans interaction utilisateur :

final token = await client.oauth.obtainToken(
grantType: 'client_credentials',
clientId: clientId,
clientSecret: clientSecret,
redirectUri: 'urn:ietf:wg:oauth:2.0:oob',
scope: 'read',
);

Ce token ne peut accéder qu'aux informations publiques.

Métadonnées du serveur

Vous pouvez récupérer à l'avance les scopes et endpoints supportés par le serveur :

final metadata = await client.oauth.fetchServerMetadata();
print(metadata.scopesSupported);

Scopes

ScopeDescription
readToutes les opérations de lecture
writeToutes les opérations d'écriture
pushRecevoir des notifications Web Push
followModifier les relations d'abonnement (alias pour read:follows + write:follows)
admin:readOpérations de lecture administrateur
admin:writeOpérations d'écriture administrateur

Des scopes plus granulaires tels que read:accounts et write:statuses sont également disponibles. Consultez la documentation officielle Mastodon pour plus de détails.