Zum Hauptinhalt springen

OAuth und MiAuth

Misskey bietet Apps zwei Möglichkeiten, ein Zugriffstoken zu erhalten.

OAuth 2.0MiAuth
Unterstützte ServerMisskey v2023.9.0 oder höherEinschließlich älterer Server
client_id-SeiteErforderlich (HTTPS)Nicht erforderlich
Rücksprungziel des BrowsersAuf der client_id-Seite angegebene redirect_uriyourscheme:// (nur das Schema)
KonfigurationsklasseMisskeyOAuthConfigMisskeyMiAuthConfig

Beide Verfahren öffnen einen externen Browser und kehren über ein benutzerdefiniertes URL-Schema zur App zurück. Daher ist für beide die Plattformkonfiguration erforderlich.

Ob ein Server OAuth unterstützt, können Sie mit MisskeyOAuthClient().getOAuthServerInfo(host) prüfen. Bei nicht unterstützten Servern wird null zurückgegeben. In diesem Fall lösen authenticate und loginWithOAuth eine OAuthNotSupportedException aus, sodass Sie zu MiAuth wechseln können.

Konfiguration​

MisskeyOAuthConfig​

ArgumentBeschreibung
hostHost des Misskey-Servers (Beispiel: misskey.io)
clientIdURL der client_id-Seite
redirectUriAuf der client_id-Seite angegebene redirect URI (Beispiel: yourscheme://oauth/callback)
scopeDurch Leerzeichen getrennte Scopes (Beispiel: read:account write:notes)
callbackSchemeBenutzerdefiniertes Schema der App. Erforderlich, wird aber nur verwendet, wenn redirectUri eine http(s)-Zwischenseite ist. Andernfalls wird das Schema von redirectUri verwendet.

MisskeyMiAuthConfig​

ArgumentBeschreibung
hostHost des Misskey-Servers
appNameDer dem Benutzer angezeigte App-Name
callbackSchemeBenutzerdefiniertes Schema der App. Misskey leitet den Browser zu yourscheme:// weiter.
permissionsAnzufordernde Berechtigungen (Beispiel: ['read:account', 'write:notes']). Optional
iconUrlURL des dem Benutzer angezeigten App-Symbols. Optional

Ohne Token-Speicherung​

MisskeyOAuthClient und MisskeyMiAuthClient führen die Authentifizierung aus und geben ein Token zurück. Das Token wird nicht gespeichert.

OAuth​

import 'package:misskey_auth/misskey_auth.dart';

final oauthClient = MisskeyOAuthClient();
final token = await oauthClient.authenticate(
MisskeyOAuthConfig(
host: 'misskey.io',
clientId: 'https://yourpage/yourapp/',
redirectUri: 'yourscheme://oauth/callback',
scope: 'read:account write:notes',
callbackScheme: 'yourscheme',
),
);
print(token?.accessToken);

MiAuth​

import 'package:misskey_auth/misskey_auth.dart';

final miClient = MisskeyMiAuthClient();
final result = await miClient.authenticate(
MisskeyMiAuthConfig(
host: 'misskey.io',
appName: 'Your App',
callbackScheme: 'yourscheme',
permissions: ['read:account', 'write:notes'],
iconUrl: 'https://example.com/icon.png', // Optional
),
);
print(result.token);
print(result.user); // Benutzerinformationen, falls vom Server zurückgegeben

Mit Token-Speicherung​

MisskeyAuthManager führt die Authentifizierung aus und speichert Token mit TokenStore. MisskeyAuthManager.defaultInstance() verwendet SecureTokenStore. Bei jeder Anmeldung wird ein AccountKey zurückgegeben, der das Konto identifiziert.

OAuth​

import 'package:misskey_auth/misskey_auth.dart';

final auth = MisskeyAuthManager.defaultInstance();
final key = await auth.loginWithOAuth(
MisskeyOAuthConfig(
host: 'misskey.io',
clientId: 'https://yourpage/yourapp/',
redirectUri: 'yourscheme://oauth/callback',
scope: 'read:account write:notes',
callbackScheme: 'yourscheme',
),
setActive: true,
);
final current = await auth.currentToken();

Nach der OAuth-Authentifizierung ruft MisskeyAuthManager mit dem neuen Token /api/i auf, um die Konto-ID abzurufen.

MiAuth​

import 'package:misskey_auth/misskey_auth.dart';

final auth = MisskeyAuthManager.defaultInstance();
final key = await auth.loginWithMiAuth(
MisskeyMiAuthConfig(
host: 'misskey.io',
appName: 'Your App',
callbackScheme: 'yourscheme',
permissions: ['read:account', 'write:notes'],
iconUrl: 'https://example.com/icon.png',
),
setActive: true, // Zusätzlich zur Speicherung dieses Konto aktivieren
);
final current = await auth.currentToken();

MiAuth gibt zusammen mit dem Token Benutzerinformationen zurück. MisskeyAuthManager verwendet deren id als Konto-ID.

Beide Verfahren in einer App unterstützen​

  • Wenn Sie in Info.plist und AndroidManifest.xml ein einzelnes Schema wie yourscheme registrieren, können OAuth und MiAuth es gemeinsam verwenden.
  • MiAuth kehrt nur zum Schema (yourscheme://) zurück. Für MiAuth müssen Sie keinen Pfad wie yourscheme://oauth/callback einrichten.
  • Behalten Sie unter Android den intent-filter nur für das Schema aus der Plattformkonfiguration bei. Bei einem durch host oder path eingeschränkten Filter erreicht der MiAuth-Callback die App nicht.