플러터:인증(OAuth2)
보이기
- 플러터:개요
- 플러터:실행
- 플러터:개념 잡기
- 권한 사용
- 위젯
- 플러터:DB연결
- 플러터:Firebase(미완)
- 플러터:MySQL(미완)
- 디자인
- 플러터:배포
- 플러터:참고자료
- 플러터:위젯
- 플러터:라이브러리
- Firebase는 Google/Apple/GitHub 등 주요 소셜 로그인만 공식 지원함.
- 이 문서에선 일반적인 표준 OAuth2 규격을 100% 준수(Authorization Code + PKCE)하는 경우의 로그인을 구현함.(flutter_appauth 사용)
- Django(OAuth2 Provider)·Auth0·Keycloak 등 OAuth2 표준을 준수하는 서버라면 모두 동일한 방식으로 연동 가능함.
- 네이버, 카카오, 디스코드 등의 인증은 OAuth2와 유사하지만 표준을 완전히 따르지 않기 때문에 직접 구현해야 하는데, 네이버, 카카오는 일반 OAuth2의 규격과 조금 다름. 아래 패키지를 이용하면 앱투앱 로그인도 간편하게 이루어짐.
- 카카오:
kakao_flutter_sdk(공식) - 네이버:
flutter_naver_login - 디스코드:
discord_oauth2
- Authorization Code Flow with PKCE
- Authorization Endpoint:
/authorize - Token Endpoint:
/token - Client ID / Redirect URI
| 할 일 | 설명 | 비고 |
|---|---|---|
pubspec.yaml에 패키지 추가
|
dependencies:
flutter_appauth: ^5.0.0
| |
| Redirect URI 등록 | [스킴 지정하는 법에 대해선 따로 찾아보아야 할듯.] | Flutter 앱은 보통 스킴 기반 URI를 사용함. |
import 'package:flutter_appauth/flutter_appauth.dart';
final appAuth = FlutterAppAuth();
Future<void> login() async {
final result = await appAuth.authorizeAndExchangeCode(
AuthorizationTokenRequest(
"your_client_id",
"com.example.app:/oauth",
serviceConfiguration: AuthorizationServiceConfiguration(
authorizationEndpoint: "https://your-server.com/o/authorize/",
tokenEndpoint: "https://your-server.com/o/token/",
),
scopes: ['openid', 'profile', 'email'],
),
);
print("Access Token: ${result?.accessToken}");
}
final refreshed = await appAuth.token(
TokenRequest(
"your_client_id",
"com.example.app:/oauth",
refreshToken: result.refreshToken,
serviceConfiguration: AuthorizationServiceConfiguration(
authorizationEndpoint: "https://your-server.com/o/authorize/",
tokenEndpoint: "https://your-server.com/o/token/",
),
),
);
OAUTH2_PROVIDER = {
"ACCESS_TOKEN_EXPIRE_SECONDS": 3600,
"PKCE_REQUIRED": True,
}
- Client type: Public
- Authorization grant type: Authorization code
- Redirect URIs:
com.example.app:/oauth
- OAuth2 서버에서 Client 등록 (Redirect URI 포함)
- Flutter에서
flutter_appauth를 이용해 로그인 - OAuth 서버가 Authorization Code 발급
- Flutter가 Authorization Code → Access Token 교환
- 필요 시 Refresh Token으로 갱신