メインコンテンツまでスキップ

認証

Mastodon は OAuth 2.0 を採用しています。ほとんどの API エンドポイントにはアクセストークンが必要です。

認証フロー概要

1. アプリ登録     → client_id / client_secret を取得
2. ユーザー認可 → ブラウザで認可画面を表示 → 認可コード取得
3. トークン取得 → 認可コードをアクセストークンに交換

Step 1: アプリの登録

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!;

redirectUrisurn:ietf:wg:oauth:2.0:oob を指定すると、OOB(Out-of-Band)フローとなり、認可コードが画面に表示されます。Web アプリやモバイルアプリでは、コールバック URL を指定します。

Step 2: ユーザー認可

認可 URL をブラウザで開き、ユーザーに許可を求めます。この部分はプラットフォーム依存のため、本ライブラリのスコープ外です。

// 認可 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',
},
);
// → この URL をブラウザで開く

ユーザーが許可すると、認可コードが返されます。

Step 3: アクセストークンの取得

final token = await client.oauth.obtainToken(
grantType: 'authorization_code',
clientId: clientId,
clientSecret: clientSecret,
redirectUri: 'urn:ietf:wg:oauth:2.0:oob',
code: authorizationCode, // Step 2 で取得した認可コード
);

print(token.accessToken); // API 呼び出しに使用するトークン

取得したトークンで新しいクライアントを初期化します。

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

トークンの失効

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

クライアントクレデンシャル

ユーザー操作なしでアプリ専用トークンを取得する場合:

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

このトークンでは公開情報のみアクセスできます。

サーバーメタデータの取得

サーバーがサポートするスコープやエンドポイント情報を事前に取得できます。

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

スコープ一覧

スコープ説明
readすべての読み取り操作
writeすべての書き込み操作
pushWeb Push 通知の受信
followフォロー関係の変更(read:follows + write:follows のエイリアス)
admin:read管理者向け読み取り操作
admin:write管理者向け書き込み操作

より細かいスコープ(read:accounts, write:statuses 等)も利用可能です。 詳細は Mastodon 公式ドキュメント を参照してください。