반응형
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;
});
반응형
'소프트웨어 > Qt' 카테고리의 다른 글
Qt로 만든 프로그램 관리자 권한으로 실행 방법 (13) | 2025.05.08 |
---|---|
QTabBar 첫번째 버튼 고정 효과 적용하기 (0) | 2024.07.15 |
안드로이드 Qt 프로그래밍 (0) | 2019.08.22 |
Qt5.4 정적 빌드하기 (0) | 2019.04.30 |
[QT/Embedded] 우분투 Qt5 크로스 컴파일 (14/11/26 2차 수정) (0) | 2015.03.11 |