Cihaz kodu akışı

Microsoft Entra ID ile etkileşimli kimlik doğrulaması için bir web tarayıcısı gerekir. Ancak, Web tarayıcısı sağlamayan cihazlar ve işletim sistemleri söz konusu olduğunda, Cihaz kodu akışı kullanıcının etkileşimli olarak oturum açmak için başka bir cihaz (örneğin başka bir bilgisayar veya cep telefonu) kullanmasına olanak tanır. Uygulama, cihaz kodu akışını kullanarak belirteçleri özellikle bu cihazlar/işletim sistemi için tasarlanmış iki adımlı bir işlemle alır. Bu tür uygulamalara örnek olarak IoT üzerinde çalışan uygulamalar veya Command-Line araçları (CLI) verilebilir.

Tipik bir cihaz kodu akışı aşağıdaki adımları izler:

  1. Kullanıcı kimlik doğrulaması gerektiğinde, uygulama kullanıcı için bir kod sağlar. Kullanıcıdan, örneğin https://microsoft.com/deviceloginbir URL'ye gitmek ve kodu girmek için İnternet'e bağlı akıllı telefon gibi başka bir cihaz kullanması istenir. Böylece, web sayfası kullanıcıya onay istemleri ve gerekirse çok faktörlü kimlik doğrulaması içeren normal bir kimlik doğrulama deneyiminde yol gösterir.

  2. Kimlik doğrulaması başarılı olduğunda, komut satırı uygulaması gerekli belirteçleri bir arka kanal üzerinden alır ve ihtiyaç duyduğu web API çağrılarını gerçekleştirmek için kullanır.

Constraints

  • Cihaz Kodu Akışı yalnızca genel istemci uygulamaları için kullanılabilir
  • PublicClientApplication içinde iletilen yetki, aşağıdaki seçeneklerden biri olacak şekilde yapılandırılmalıdır:
    • Kiracı kimliğini temsil eden GUID veya kiracıyla ilişkilendirilmiş bir etki alanı olan https://login.microsoftonline.com/{tenant}/ formun tenant kiracısı.
    • Tüm iş ve okul hesapları (https://login.microsoftonline.com/organizations/)

Microsoft kişisel hesapları henüz Azure AD v2.0 uç noktası tarafından desteklenmemektedir (/common veya /consumers kiracılarını kullanamazsınız).

Kod parçacığı

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();

Ek bilgiler

Cihaz kodu akışı hakkında daha fazla bilgi edinmek istiyorsanız: