Megosztás a következőn keresztül:


Java-alkalmazások hitelesítése az Azure szolgáltatásokhoz helyi fejlesztéshez közvetített hitelesítés használatával

A közvetített hitelesítés összegyűjti a felhasználói hitelesítő adatokat a rendszerhitelesítési közvetítő használatával egy alkalmazás hitelesítéséhez. A rendszerhitelesítési közvetítő egy olyan alkalmazás, amely egy felhasználó számítógépén fut, amely kezeli az összes csatlakoztatott fiók hitelesítési kézfogásait és tokenkarbantartását.

A közvetített hitelesítés a következő előnyöket nyújtja:

  • Enables Single Sign-On (SSO): Lehetővé teszi az alkalmazások számára, hogy egyszerűsítsék a felhasználók hitelesítését Microsoft Entra ID, és megvédjék Microsoft Entra ID frissítési jogkivonatokat a kiszivárgástól és a visszaéléstől.
  • Fokozott biztonság: A közvetítővel számos biztonsági fejlesztés érhető el anélkül, hogy frissítenie kellene az alkalmazáslogikát.
  • Továbbfejlesztett funkciótámogatás: A közvetítő segítségével a fejlesztők hozzáférhetnek a gazdag operációs rendszer és a szolgáltatás képességeihez.
  • Rendszerintegráció: Azokat az alkalmazásokat, amelyek a közvetítő beépülő modult használják a beépített fiókválasztóval, lehetővé teszik, hogy a felhasználó gyorsan válasszon ki egy meglévő fiókot ahelyett, hogy újra és újra ugyanazokat a hitelesítő adatokat újra és újra megismétli.
  • Token Protection: Biztosítja, hogy a frissítési jogkivonatok eszközhöz kötöttek legyenek, és lehetővé teszi az alkalmazások számára az eszközhöz kötött hozzáférési jogkivonatok beszerzését. Lásd: Token Protection.

Windows egy Web Account Manager (WAM). A WAM lehetővé teszi az olyan identitásszolgáltatók számára, mint a Microsoft Entra ID, hogy natív módon integrálódjanak az operációs rendszerbe, és biztonságos bejelentkezési szolgáltatásokat biztosítsanak az alkalmazások számára. A közvetített hitelesítés lehetővé teszi az alkalmazás számára, hogy végrehajtsa az interaktív bejelentkezési hitelesítő adatok által engedélyezett összes műveletet.

A személyes Microsoft-fiókok, valamint a munkahelyi vagy iskolai fiókok támogatottak. A támogatott Windows verziók esetében az alapértelmezett böngészőalapú felhasználói felület gördülékenyebb hitelesítési felületre vált, hasonlóan a beépített Windows-alkalmazásokhoz.

Az alkalmazás konfigurálása közvetítőalapú hitelesítéshez

Ha engedélyezni szeretné a közvetítőalapú hitelesítést az alkalmazásban, kövesse az alábbi lépéseket:

  1. A Azure portálon lépjen a Microsoft Entra ID lapra, és válassza a bal oldali menüben a App registrations lehetőséget.

  2. Válassza ki az alkalmazás regisztrációját, majd válassza a Hitelesítésilehetőséget.

  3. Adja hozzá a megfelelő átirányítási URI-t az alkalmazásregisztrációhoz egy platformkonfiguráción keresztül:

    1. A Platformkonfigurációk területen válassza a + Platform hozzáadása lehetőséget.

    2. A Platformok konfigurálása területen válassza ki az alkalmazástípushoz (platformhoz) tartozó csempét a beállítások konfigurálásához, például mobil- és asztali alkalmazásokhoz.

    3. Az egyéni átirányítási URI-kban adja meg a következő átirányítási URI-t:

      ms-appx-web://Microsoft.AAD.BrokerPlugin/{your_client_id}

      Cserélje le {your_client_id} az alkalmazás (ügyfél) azonosítójára az alkalmazásregisztráció Áttekintés paneljén.

    4. Válassza a Konfigurálás lehetőséget.

    További információ: Átirányítási URI hozzáadása alkalmazásregisztrációhoz.

  4. A Hitelesítés panel Speciális beállítások csoportjában válassza az Igen lehetőséget a nyilvános ügyfélfolyamatok engedélyezéséhez.

  5. Válassza a Mentés lehetőséget a módosítások alkalmazásához.

  6. Ha engedélyezni szeretné az alkalmazást adott erőforrásokhoz, lépjen a szóban forgó erőforrásra, válassza a API-engedélyek lehetőséget, és engedélyezze a Microsoft Graph és egyéb elérni kívánt erőforrásokat.

    Fontos

    Önnek is az ügyfélrendszer adminisztrátorának kell lennie ahhoz, hogy az első bejelentkezéskor hozzájárulását adja az alkalmazás használatához.

Szerepkörök hozzárendelése

Az alkalmazáskód közvetítőalapú hitelesítéssel történő sikeres futtatásához adjon felhasználói fiókengedélyeket Azure szerepköralapú hozzáférés-vezérlés (RBAC) használatával. Rendeljen hozzá egy megfelelő szerepkört a megfelelő Azure szolgáltatás felhasználói fiókjához. Például:

  • Azure Blob Storage: Rendelje hozzá a Storage fiókadat-közreműködő szerepkört.
  • Azure Key Vault: Rendelje hozzá a Key Vault titkos kódfelelős szerepkört.

Ha egy alkalmazás meg van adva, user_impersonation Access Azure Storage API-engedélyekkel kell rendelkeznie (az előző szakasz 6. lépése). Ez az API-engedély lehetővé teszi, hogy az alkalmazás hozzáférjen Azure storage-hoz a bejelentkezett felhasználó nevében, miután a bejelentkezés során megadta a hozzájárulást.

A kód implementálása

A Azure Identitástár a közvetítőalapú hitelesítést a InteractiveBrowserCredential használatával támogatja. Az azure-identity-broker könyvtár biztosítja InteractiveBrowserBrokerCredentialBuilder, amely képes InteractiveBrowserCredential használni a rendszerhitelesítési közvetítőt. Ha például közvetítőalapú hitelesítést szeretne használni egy Java konzolalkalmazásban a SecretClient Azure Key Vault hitelesítéséhez, kövesse az alábbi lépéseket:

  1. Adja hozzá a azure-identity-broker függőséget a pom.xml fájlhoz:

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity-broker</artifactId>
    </dependency>
    
  2. Adjon meg egy hivatkozást arra a szülőablakra, amelyen a fiókválasztó párbeszédpanelnek meg kell jelennie. Példákért lásd: Ablakkezelő beszerzése.

  3. Hozzon létre egy InteractiveBrowserCredential példányt a InteractiveBrowserBrokerCredentialBuilder használatával.

    import com.azure.identity.InteractiveBrowserCredential;
    import com.azure.identity.broker.InteractiveBrowserBrokerCredentialBuilder;
    import com.azure.security.keyvault.secrets.SecretClient;
    import com.azure.security.keyvault.secrets.SecretClientBuilder;
    import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
    
    long windowHandle = getWindowHandle(); // See examples below
    
    InteractiveBrowserCredential credential = new InteractiveBrowserBrokerCredentialBuilder()
        .setWindowHandle(windowHandle)
        .useDefaultBrokerAccount()
        .build();
    
    SecretClient client = new SecretClientBuilder()
        .vaultUrl("https://<your-key-vault-name>.vault.azure.net")
        .credential(credential)
        .buildClient();
    
    KeyVaultSecret secret = client.getSecret("MySecret");
    System.out.println("Retrieved secret: " + secret.getName());
    

Az előző példában a useDefaultBrokerAccount úgy dönt, hogy részt vesz egy csendes, közvetített hitelesítési folyamatban az alapértelmezett rendszerfiókkal. Így a felhasználónak nem kell ismételten ugyanazt a fiókot kiválasztania. Ha a csendes, közvetített hitelesítés sikertelen, InteractiveBrowserCredential visszaesik az interaktív, közvetítőalapú hitelesítésre.

Az alábbi képernyőképen az alternatív interaktív, közvetítőalapú hitelesítési felület látható:

A Windows bejelentkezési felület képernyőképe, amikor egy közvetítővel engedélyezett InteractiveBrowserCredential-példányt használ egy felhasználó hitelesítésére.

Ablakfogópont lekérése

Ha interaktív hitelesítést használ InteractiveBrowserCredential, egy szülőablak fogantyúra van szüksége ahhoz, hogy a hitelesítési párbeszédpanel megfelelően jelenjen meg a kérés küldő ablak fölött.

JavaFX-alkalmazás

JavaFX-alkalmazások esetén használja a JNA-t (Java natív hozzáférés) az ablakkezelő lekéréséhez:

import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;

public long getWindowHandle(Stage stage) {
    WinDef.HWND hwnd = User32.INSTANCE.FindWindow(null, stage.getTitle());
    return Pointer.nativeValue(hwnd.getPointer());
}

Konzolalkalmazás

Windows konzolalkalmazás esetében a JNA használatával szerezze meg a konzolablak kezelőjét.

import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.WinDef;

WinDef.HWND hwnd = Kernel32.INSTANCE.GetConsoleWindow();
long windowHandle = Pointer.nativeValue(hwnd.getPointer());