본문으로 건너뛰기

인증

Mastodon은 OAuth 2.0을 사용합니다. 대부분의 API 엔드포인트는 액세스 토큰이 필요합니다.

인증 흐름 개요

1. 앱 등록      → client_id / client_secret 획득
2. 사용자 인가 → 브라우저에서 인가 화면 열기 → 인가 코드 획득
3. 토큰 발급 → 인가 코드를 액세스 토큰으로 교환

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

리디렉션 URI로 urn:ietf:wg:oauth:2.0:oob를 전달하면 OOB(Out-of-Band) 방식으로 동작하여 인가 코드가 화면에 표시됩니다. 웹 또는 모바일 앱의 경우 콜백 URL을 대신 지정하세요.

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을 브라우저에서 열기

사용자가 권한을 허용하면 인가 코드가 반환됩니다.

3단계: 액세스 토큰 발급

final token = await client.oauth.obtainToken(
grantType: 'authorization_code',
clientId: clientId,
clientSecret: clientSecret,
redirectUri: 'urn:ietf:wg:oauth:2.0:oob',
code: authorizationCode, // 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 공식 문서를 참고하세요.