소프트웨어/Qt
Qt Network Authorization 모듈 최신 기능: 디바이스 인증부터 자동 토큰 갱신까지
루이스파파
2025. 5. 9. 22:39
반응형
1. 디바이스 인증(Device Authorization Grant)
📌 대상 기기: TV, IoT, HMI 등 입력 기능이 제한된 장치
📌 동작 원리:
- 장치가 인증 서버에 요청 →
user_code
와verification_url
발급 - 사용자는 다른 기기(스마트폰/PC)에서 URL 접속 후 코드 입력
- 장치는 주기적으로 서버에 토큰 요청(Polling)
// Qt 6.9 Device Flow 예제 QOAuth2DeviceAuthorizationFlow deviceFlow; deviceFlow.setAuthorizationUrl(QUrl("https://auth.example.com/device")); deviceFlow.setTokenUrl(QUrl("https://auth.example.com/token")); deviceFlow.setClientIdentifier("client_id"); connect(&deviceFlow, &QOAuth2DeviceAuthorizationFlow::authorizeWithUserCode, [](const QUrl &url, const QString &userCode) { qDebug() << "인증 URL:" << url << " | 코드:" << userCode; }); deviceFlow.grant(); // 인증 시작
---
### 2. **ID 토큰(OpenID Connect)**
**📌 기능**: 사용자 신원 정보 포함한 토큰 발급
**📌 제한 사항**:
- Qt 6.9에선 **토큰 획득만 지원** (검증은 외부 라이브러리 필요)
- OpenID Connect 표준의 일부 구현
```cpp
// ID 토큰 획득 예시
QOAuth2AuthorizationCodeFlow authFlow;
authFlow.setScope("openid profile"); // OpenID 범위 지정
connect(&authFlow, &QOAuth2AuthorizationCodeFlow::authorized, [](const QString &token) {
qDebug() << "ID 토큰:" << authFlow.idToken();
});
3. 범위 관리(Scope Management)
📌 핵심 기능:
requestedScopes()
: 애플리케이션이 요청한 권한grantedScopes()
: 사용자가 실제 승인한 권한- 차이 발생 시 앱 동작 조정 가능
if (authFlow.grantedScopes().contains("email")) {
// 이메일 접근 권한 있음
} else {
// 기본 권한만 사용
}
4. 자동 토큰 갱신
📌 설정 방법:
authFlow.setAutoRefresh(true); // 자동 갱신 활성화
authFlow.setRefreshLeadTime(60); // 만료 60초 전 갱신 시도
📌 신호 활용:
connect(&authFlow, &QOAuth2AuthorizationCodeFlow::accessTokenAboutToExpire,
[&]() {
authFlow.refreshTokens(); // 수동 갱신
});
통합 아키텍처
🚀 실전 활용 팁
- 네트워크 요청 커스터마이징:
authFlow.setNetworkRequestModifier([](QNetworkRequest *request) {
request->setRawHeader("X-Custom-Header", "value");
});
- 개발용 HTTPS 리다이렉트:
authFlow.setUseHttpRedirectServer(true); // localhost 서버 사용
- 에러 핸들링:
connect(&authFlow, &QAbstractOAuth::errorOccurred,
[](const QString &error, const QString &desc) {
qCritical() << "Error:" << error << "-" << desc;
});
반응형