패키지, 저장소 및 앱 카테고리 검색

패키지 상세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 개

소스 저장소

이 패키지를 사용하는 프로젝트

아직 데이터가 없습니다.