Microsoft Entra ID를 사용한 대화형 인증에는 웹 브라우저가 필요합니다. 그러나 웹 브라우저를 제공하지 않는 디바이스 및 운영 체제의 경우 디바이스 코드 흐름을 통해 사용자가 다른 디바이스(예: 다른 컴퓨터 또는 휴대폰)를 사용하여 대화형으로 로그인할 수 있습니다. 애플리케이션은 디바이스 코드 흐름을 사용하여 이러한 디바이스/OS용으로 특별히 설계된 2단계 프로세스를 통해 토큰을 가져옵니다. 이러한 애플리케이션의 예로는 IoT 또는 CLI(Command-Line 도구)에서 실행되는 애플리케이션이 있습니다.
일반적인 디바이스 코드 흐름은 다음 단계를 따릅니다.
사용자 인증이 필요할 때마다 앱이 사용자에게 코드를 제공합니다. 사용자에게
https://microsoft.com/devicelogin인터넷에 연결된 스마트폰과 같은 다른 디바이스를 사용하여 URL로 이동하여 코드를 입력하라는 메시지가 표시됩니다. 사용자가 코드를 입력하면 웹 페이지는 동의 프롬프트, 다단계 인증(필요한 경우) 등을 포함하는 일반적인 인증 환경으로 사용자를 안내합니다.인증에 성공하면 명령줄 앱은 백 채널을 통해 필요한 토큰을 수신하고 이를 사용하여 필요한 웹 API 호출을 수행합니다.
Constraints
- 디바이스 코드 흐름은 공용 클라이언트 애플리케이션에만 사용할 수 있습니다.
- 전달된
PublicClientApplication권한은 아래 옵션 중 하나로 구성해야 합니다.-
https://login.microsoftonline.com/{tenant}/형식의 테넌트이며, 여기서tenant는 테넌트 ID를 나타내는 GUID이거나 테넌트에 연결된 도메인입니다. - 모든 회사 및 학교 계정(
https://login.microsoftonline.com/organizations/)
-
Microsoft 개인 계정은 Azure AD v2.0 엔드포인트에서는 아직 지원되지 않습니다(
/common또는/consumers테넌트는 사용할 수 없습니다).
코드 조각
PublicClientApplication app = PublicClientApplication.builder(PUBLIC_CLIENT_ID)
.authority(AUTHORITY)
.build();
Consumer<DeviceCode> deviceCodeConsumer = (DeviceCode deviceCode) -> {
System.out.println(deviceCode.message());
};
CompletableFuture<IAuthenticationResult> future = app.acquireToken(
DeviceCodeFlowParameters.builder(scope, deviceCodeConsumer).build());
future.handle((res, ex) -> {
if(ex != null) {
System.out.println("message - " + ex.getMessage());
return "Unknown!";
}
System.out.println("Access Token - " + res.accessToken());
System.out.println("ID Token - " + res.idToken());
return res;
});
future.join();
추가 정보
디바이스 코드 흐름에 대해 자세히 알아보려는 경우: