디바이스 코드 흐름

Microsoft Entra ID를 사용한 대화형 인증에는 웹 브라우저가 필요합니다. 그러나 웹 브라우저를 제공하지 않는 디바이스 및 운영 체제의 경우 디바이스 코드 흐름을 통해 사용자가 다른 디바이스(예: 다른 컴퓨터 또는 휴대폰)를 사용하여 대화형으로 로그인할 수 있습니다. 애플리케이션은 디바이스 코드 흐름을 사용하여 이러한 디바이스/OS용으로 특별히 설계된 2단계 프로세스를 통해 토큰을 가져옵니다. 이러한 애플리케이션의 예로는 IoT 또는 CLI(Command-Line 도구)에서 실행되는 애플리케이션이 있습니다.

일반적인 디바이스 코드 흐름은 다음 단계를 따릅니다.

  1. 사용자 인증이 필요할 때마다 앱이 사용자에게 코드를 제공합니다. 사용자에게 https://microsoft.com/devicelogin인터넷에 연결된 스마트폰과 같은 다른 디바이스를 사용하여 URL로 이동하여 코드를 입력하라는 메시지가 표시됩니다. 사용자가 코드를 입력하면 웹 페이지는 동의 프롬프트, 다단계 인증(필요한 경우) 등을 포함하는 일반적인 인증 환경으로 사용자를 안내합니다.

  2. 인증에 성공하면 명령줄 앱은 백 채널을 통해 필요한 토큰을 수신하고 이를 사용하여 필요한 웹 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();

추가 정보

디바이스 코드 흐름에 대해 자세히 알아보려는 경우: