使用 Azure Active Directory 帳戶將登入新增至 Spring Web 應用程式

本文說明如何開發支援 Azure Active Directory (Azure AD) 帳戶登入的 Spring Web 應用程式。 完成本文中的所有步驟之後,Web 應用程式會在匿名存取時重新導向至 Azure AD 登入頁面。 下列螢幕擷取畫面顯示 Azure AD 登入頁面:

應用程式 [登入] 對話方塊的螢幕擷取畫面。

必要條件

完成本文中的步驟需要下列必要條件:

重要事項

需要 Spring Boot 2.5 版或更高版本才能完成本文中的步驟。

使用 Spring Initialzr 建立應用程式

  1. 瀏覽至 https://start.spring.io/

  2. 指定您想要使用 Java 產生 Maven 專案、輸入應用程式的群組成品名稱。

  3. 新增Spring WebAzure Active DirectoryOAuth2 用戶端相依性

  4. 在頁面底部,選取 [產生] 按鈕。

    具有基本選項的 Spring Initializr 螢幕擷取畫面。

  5. 出現提示時,將專案下載至本機電腦上的路徑。

建立 Azure Active Directory 執行個體

建立 Active Directory 執行個體

如果您是現有實例的系統管理員,您可以略過此程式。

  1. 登入 https://portal.azure.com

  2. 選取 [所有服務],然後選取 [ 身分識別],然後選取 [ Azure Active Directory]。

  3. 輸入您的 [組織名稱] 和您的 [初始網域名稱]。 複製目錄的完整 URL。 您將在本教學課程稍後使用 URL 來新增使用者帳戶。 (例如:azuresampledirectory.onmicrosoft.com)。

    複製目錄的完整 URL。 您將在本教學課程稍後使用 URL 來新增使用者帳戶。 (例如: azuresampledirectory.onmicrosoft.com .) 。

    完成後,請選取 [ 建立]。 需要幾分鐘的時間才能建立新資源。

    Azure Active Directory [建立租使用者] 畫面 [設定] 區段的螢幕擷取畫面。

  4. 完成時,選取顯示的連結以存取新的目錄。

    [建立租使用者] 成功訊息的螢幕擷取畫面。

  5. 複製 [租用戶識別碼]。 您將在本教學課程稍後使用識別碼值來設定 application.properties 檔案。

    已醒目提示 [租使用者識別碼] 的 Azure Active Directory 租使用者畫面螢幕擷取畫面。

為 Spring Boot 應用程式新增應用程式註冊

  1. 從入口網站的功能表選取 [應用程式註冊],然後選取 [註冊應用程式]。

  2. 指定應用程式,然後選取 [註冊]。

  3. 當應用程式註冊的頁面出現時,請複製您的應用程式 (用戶端) 識別碼目錄 (租使用者) 識別碼。 您稍後會在本教學課程中使用這些值來設定 application.properties 檔案。

    應用程式螢幕擷取畫面,其中已醒目提示 [應用程式 (用戶端) 識別碼] 和 [目錄 (租使用者) 識別碼]。

  4. 選取左側流覽窗格中的 [ 憑證 & 秘密 ]。 然後選取 [新增用戶端密碼]。

    應用程式 [憑證 & 秘密] 畫面的螢幕擷取畫面,其中已醒目提示 [新增用戶端密碼]。

  5. 新增 [說明],然後在 [到期] 清單中選取持續時間。 選取 [新增]。 系統會自動填入金鑰的值。

  6. 複製並儲存用戶端密碼的值,以便稍後在本教學課程中設定 application.properties 檔案。 (您無法稍後擷取此值。)

    醒目提示新用戶端密碼的應用程式螢幕擷取畫面。

  7. 從應用程式註冊的主頁面中,選取 [驗證],然後選取 [新增平台]。 然後選取 [Web 應用程式]。

    [設定平臺] 區段的應用程式 [驗證] 畫面螢幕擷取畫面,其中已醒目提示和 Web 平臺。

  8. 輸入 http://localhost:8080/login/oauth2/code/ 作為新的 重新導向 URI,然後選取 [ 設定]。

    應用程式驗證畫面的螢幕擷取畫面,其中已醒目提示 [設定 Web] 區段,並醒目提示 [重新導向 URI]。

  9. 如果您已修改 pom.xml 檔案以使用早于 3.0.0 的 Azure AD 入門版本:在 [隱含授與和混合式流程] 下,選取 [識別碼 權杖] (用於隱含和混合式流程) ,然後選取 [ 儲存]。

    已選取 [識別碼權杖] 的應用程式驗證畫面螢幕擷取畫面。

將使用者帳戶新增至您的目錄,並將該帳戶新增至 appRole

  1. 從 Active Directory 的 [概觀] 頁面中,選取 [使用者],再選取 [新增使用者]。

  2. 當 [使用者] 面板顯示時,輸入 [使用者名稱] 和 [名稱]。 然後選取 [建立]。

    [新增使用者] 對話方塊的螢幕擷取畫面。

    注意

    當您輸入使用者名稱時,必須指定本教學課程稍早的目錄 URL。 例如:

    test-user@azuresampledirectory.onmicrosoft.com

  3. 從應用程式註冊的主頁面上,選取 [ 應用程式角色],然後選取 [ 建立應用程式角色]。 提供表單欄位的值,選取 [您要啟用此應用程式角色嗎?],然後選取 [ 套用]。

    顯示 [建立應用程式角色] 窗格的應用程式 [應用程式角色] 畫面螢幕擷取畫面。

  4. 從 Azure AD 目錄的 [ 概觀 ] 頁面中,選取 [企業應用程式]。

    Azure Active Directory [企業應用程式] 畫面的螢幕擷取畫面。

  5. 選取 [所有應用程式],然後選取您在上一個步驟中新增應用程式角色的應用程式。

    顯示 [所有應用程式] 清單的 [企業應用程式] 畫面螢幕擷取畫面。

  6. 選取 [使用者和群組],然後選取 [新增使用者/群組]。

  7. 在 [使用者] 底下,選取 [未選取]。 選取您稍早建立的使用者,選取 [ 選取],然後選取 [ 指派]。 如果您稍早建立了多個應用程式角色,請選取角色。

    應用程式 [新增指派] 畫面的螢幕擷取畫面,其中顯示 [使用者] 窗格。

  8. 返回至 [使用者] 面板,選取您的測試使用者,然後選取 [重設密碼],然後複製密碼。 稍後在本教學課程中登入應用程式時,您將使用密碼。

    醒目提示 [暫時密碼] 欄位的使用者螢幕擷取畫面。

設定及編譯您的應用程式

  1. 從您稍早在本教學課程中建立並下載的專案封存,將檔案解壓縮到目錄中。

  2. 流覽至專案中 的 src/main/resources 資料夾,然後在文字編輯器中開啟 application.properties 檔案。

  3. 使用您稍早建立的值來指定應用程式註冊的設定。 例如:

    # Enable related features.
    spring.cloud.azure.active-directory.enabled=true
    # Specifies your Active Directory ID:
    spring.cloud.azure.active-directory.profile.tenant-id=22222222-2222-2222-2222-222222222222
    # Specifies your App Registration's Application ID:
    spring.cloud.azure.active-directory.credential.client-id=11111111-1111-1111-1111-1111111111111111
    # Specifies your App Registration's secret key:
    spring.cloud.azure.active-directory.credential.client-secret=AbCdEfGhIjKlMnOpQrStUvWxYz==
    

    其中:

    參數 Description
    spring.cloud.azure.active-directory.enabled 啟用 spring-cloud-azure-starter-active-directory 所提供的功能
    spring.cloud.azure.active-directory.profile.tenant-id 包含稍早 Active Directory 的目錄識別碼
    spring.cloud.azure.active-directory.credential.client-id 包含您稍早完成應用程式註冊所得到的應用程式識別碼
    spring.cloud.azure.active-directory.credential.client-secret 包含您稍早完成應用程式註冊金鑰所得到的
  4. 儲存並關閉 application.properties 檔案。

  5. 在應用程式的 Java 來源資料夾中建立名為 controller 的資料夾。 例如: src/main/java/com/wingtiptoys/security/controller

  6. 在 controller 資料夾中建立名為 HelloController.java 的新 Java 檔案,然後在文字編輯器中加以開啟。

  7. 輸入下列程式碼,然後儲存並關閉檔案:

    package com.wingtiptoys.security;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.security.access.prepost.PreAuthorize;
    
    @RestController
    public class HelloController {
         @GetMapping("Admin")
         @ResponseBody
         @PreAuthorize("hasAuthority('APPROLE_Admin')")
         public String Admin() {
             return "Admin message";
         }
    }
    

建置及測試您的應用程式

  1. 開啟命令提示字元,並將目錄切換到應用程式的 pom.xml 檔案所在的資料夾。

  2. 使用 Maven 建置 Spring Boot 應用程式並加以執行。 例如:

    mvn clean package
    mvn spring-boot:run
    

    Maven 組建輸出的螢幕擷取畫面。

  3. 在 Maven 建置並啟動您的應用程式之後,請在網頁瀏覽器中開啟 http://localhost:8080/Admin 。 系統應該會提示您輸入使用者名稱和密碼。

    應用程式 [登入] 對話方塊的螢幕擷取畫面。

    注意

    如果這是新使用者帳戶的第一次登入,系統可能會提示您變更密碼。

    應用程式 [更新密碼] 對話方塊的螢幕擷取畫面。

  4. 成功登入之後,您應該會看到控制器中的範例「管理員訊息」文字。

    應用程式管理員訊息的螢幕擷取畫面。

總結

在本教學課程中,您已使用 Azure Active Directory 入門版建立新的 JAVA Web 應用程式、設定新的 Azure AD 租使用者、在租使用者中註冊新的應用程式,然後將您的應用程式設定為使用 Spring 注釋和類別來保護 Web 應用程式。

另請參閱

後續步驟

若要深入了解 Spring 和 Azure,請繼續閱讀「Azure 上的 Spring」文件中心中的資訊。