パッケージ、リポジトリ、アプリカテゴリを検索

パッケージ詳細v0.2.9

oauth_dio

トークンストレージとdioのインターセプターを備えたカスタマイズ可能なOAuthクライアント

AndroidiOSWebmacOSWindowsLinux
30日間ダウンロード
537
いいね数
58
Pub ポイント
150

パッケージをインストール

flutter pub add oauth_dio

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

oauth_dio は、Dart および Flutter アプリケーション向けのカスタマイズ可能な OAuth クライアントであり、Dio HTTP クライアントに基づいて構築されています。シームレスなトークン管理、自動トークン更新、認証フローを処理するためのインターセプターを提供します。このパッケージはセキュアなトークンストレージをサポートし、既存の Dio 設定とスムーズに統合されます。複数のプラットフォームで OAuth2 または同様の認証プロトコルを必要とするアプリに最適です。

用途

  • OAuth2 ログインフローの統合
  • 有効期限が切れたトークンを自動的に更新する
  • ベアラートークンを使用したAPIリクエストのセキュリティ保護
  • HTTP コールにおける認証ヘッダーの処理
  • 認証を使用した安全な REST クライアントの構築

主な機能

  • トークンのストレージと取得
  • 自動トークンのリフレッシュ
  • Dioベースのインターセプター
  • カスタマイズ可能な OAuth 設定
  • クロスプラットフォーム対応

適している対象

  • Dio を使用する Flutter アプリ
  • OAuth2認証を使用するアプリケーション
  • セキュアなトークン処理が必要な開発者
  • 一貫した認証を必要とするマルチプラットフォームアプリ
  • 認証のための最小限のボイラープレートを求めるプロジェクト

注意事項

  • Dio の設定が必要です
  • 適切なトークンストレージのセットアップが必要です
  • 複雑なフローにはカスタムロジックが必要になる場合があります
  • 外部のOAuthプロバイダーに依存しています
  • OAuth2スタイルのフローに限定

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

oauth_dio

A customizable oauth client with token storage and interceptors for dio.

Getting Started

Instantiate a new OAuth Client:

// myclient.dart
import 'package:oauth_dio/oauth_dio.dart';

final oauth = OAuth(
      tokenUrl: '<YOUR TOKEN URL>',
      clientId: '<YOUR CLIENT ID>',
      clientSecret: '<YOUR SECRET>');

Obtaining an access token using username and password:

OAuthToken token = oauth.requestTokenAndSave(
  PasswordGrant(
    username: '<YOUR USERNAME>',
    password: '<YOUR PASSWORD>'
  )
).then((token) {
    print(token.accessToken);
});

Updating access token using a refresh token:

OAuthToken token = oauth.requestTokenAndSave(
  RefreshTokenGrant(
    refreshToken: '<YOUR REFRESH TOKEN>'
  )
).then((token) {
    print(token.accessToken);
});

Configuring Dio to send access tokens:

Instantiate a new OAuth Client with a permanent storage, by default oauth is configured with memory storage.

In this example we will use the flutter_secure_storage plugin to store the token on the device's keychain.

// myclient.dart
import 'package:oauth_dio/oauth_dio.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';


class OAuthSecureStorage extends OAuthStorage {
  final FlutterSecureStorage storage = const FlutterSecureStorage();
  final accessTokenKey = 'accessToken';
  final refreshTokenKey = 'refreshToken';
  final tokenExpirationKey = 'tokenExpiration';

  @override
  Future<OAuthToken> fetch() async {
    final expiration = await storage.read(key: tokenExpirationKey);

    return OAuthToken(
        accessToken: await storage.read(key: accessTokenKey),
        refreshToken: await storage.read(key: refreshTokenKey),
        expiration: DateTime.tryParse(expiration.toString()));
  }

  @override
  Future<OAuthToken> save(OAuthToken token) async {
    await storage.write(key: accessTokenKey, value: token.accessToken);
    await storage.write(key: refreshTokenKey, value: token.refreshToken);
    await storage.write(key: tokenExpirationKey, value: token.expiration.toString());

    return token;
  }

  @override
  Future<void> clear() async {
    await storage.delete(key: accessTokenKey);
    await storage.delete(key: refreshTokenKey);
    await storage.delete(key: tokenExpirationKey);
  }
}

final oauth = OAuth(
    tokenUrl: '<YOUR TOKEN URL>',
    clientId: '<YOUR CLIENT ID>',
    clientSecret: '<YOUR SECRET>',
    storage: OAuthSecureStorage()
);

final authenticatedDio = Dio();
authenticatedDio.interceptors.add(BearerInterceptor(oauth));


authenticatedDio.get('/my/protected/resource').then((response) {
    print(response.data);
})

Custom grant types

Use the abstract class OAuthGrantType to implement a custom grant type.

import 'package:oauth_dio/oauth_dio.dart';

class TicketGrant extends OAuthGrantType {
  String accessToken;

  TicketGrant({
    this.accessToken
  })

  @override
  RequestOptions handle (RequestOptions request) {
    request.data = "grant_type=ticket&access_token=$accessToken";
    return request;
  }
}

// Request token using ticket grant
oauth.requestTokenAndSave(
  TicketGrant(
    accessToken: 'foobar'
  )
)

Feedback

Please feel free to give me any feedback helping support this package!

カテゴリー

依存関係

依存関係一覧 1 件

ソースリポジトリ

このパッケージを使用しているプロジェクト

データはまだありません。