使用群組和群組宣告保護 Java WebSphere 應用程式
本文說明如何建立 Java WebSphere 應用程式,以使用 適用於 Java 的 Microsoft 驗證連結庫 (MSAL) 登入使用者。 應用程式也會根據Microsoft Entra ID 安全組成員資格來限制對頁面的存取。
下圖顯示應用程式的拓撲:
用戶端應用程式使用 MSAL for Java (MSAL4J) 將使用者登入 Microsoft Entra ID 租使用者,並從 Microsoft Entra ID 取得標識符 令牌 。 標識元令牌會證明使用者已使用此租用戶進行驗證。 應用程式會根據使用者的驗證狀態和群組成員資格來保護其路由。
如需涵蓋此案例的影片,請參閱 使用應用程式角色、安全組、範圍和目錄角色在應用程式中實作授權。
必要條件
- JDK 第 8 版或更高版本
- Maven 3
- Microsoft Entra ID 租用戶。 如需詳細資訊,請參閱 如何取得Microsoft Entra ID 租使用者。
- 您自己Microsoft Entra ID 租使用者中的用戶帳戶。
- 兩個安全組
GroupAdmin
和GroupMember
,包含您想要測試的使用者。
建議
- 一些熟悉 Java/Jakarta Servlets。
- 一些熟悉 Linux/OSX 終端機。
- jwt.ms 檢查令牌。
- Fiddler 用於監視您的網路活動和疑難解答。
- 請遵循Microsoft Entra ID 部落格,隨時掌握最新的發展。
設定範例
下列各節說明如何設定範例應用程式。
複製或下載範例存放庫
若要複製範例,請開啟Bash視窗,並使用下列命令:
git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 3-java-servlet-web-app/3-Authorization-II/groups
或者,流覽至 ms-identity-msal-java-samples 存放庫,然後將它下載為 .zip 檔案,並將其解壓縮至您的硬碟。
重要
若要避免 Windows 上的檔案路徑長度限制,請將存放庫複製到硬碟根目錄附近的目錄中。
向Microsoft Entra ID 租用戶註冊範例應用程式
此範例中有一個專案。 下列各節說明如何使用 Azure 入口網站 註冊應用程式。
選擇要在其中建立應用程式的Microsoft Entra ID 租使用者
若要選擇您的租使用者,請使用下列步驟:
登入 Azure 入口網站。
如果您的帳戶存在於多個Microsoft Entra ID 租使用者中,請在 Azure 入口網站 的角落選取您的配置檔,然後選取 [切換目錄] 將會話變更為所需的Microsoft Entra ID 租使用者。
註冊應用程式 (java-servlet-webapp-groups)
首先,依照快速入門:使用 Microsoft 身分識別平台 註冊應用程式中的指示,在 Azure 入口網站 中註冊新的應用程式。
然後,使用下列步驟來完成註冊:
流覽至 適用於開發人員的 Microsoft 身分識別平台 應用程式註冊 頁面。
選取新增註冊。
在出現的 [ 註冊應用程式] 頁面中 ,輸入下列應用程式註冊資訊:
- 在 [ 名稱] 區段中,輸入有意義的應用程式名稱,以顯示給應用程式的使用者 ,例如
java-servlet-webapp-groups
。 - 在 [支援的帳戶類型] 底下,選取 [僅在此組織目錄中的帳戶]。
- 在 [ 重新導向 URI] 區段中,選取 下拉式方塊中的 [Web ],然後輸入下列重新導向 URI:
http://localhost:8080/msal4j-servlet-groups/auth/redirect
。
- 在 [ 名稱] 區段中,輸入有意義的應用程式名稱,以顯示給應用程式的使用者 ,例如
選取 [暫存器] 以建立應用程式。
在應用程式的註冊頁面上,尋找並複製 應用程式 (用戶端) 識別碼 值,以供稍後使用。 您會在應用程式的組態檔或檔案中使用此值。
選取儲存以儲存變更。
在應用程式的註冊頁面上,選取 瀏覽窗格中的 [憑證和秘密 ],以開啟您可以產生秘密並上傳憑證的頁面。
在用戶端密碼區段底下,選取新增用戶端密碼。
輸入描述 - 例如, 應用程式秘密。
選取其中一個可用的持續時間: 在1年、 2年內或 永不過期。
選取 [新增]。 產生的值隨即顯示。
複製並儲存產生的值,以供後續步驟使用。 您需要此值才能用於程式代碼的組態檔。 此值不會再次顯示,而且您無法透過任何其他方式加以擷取。 因此,請務必先從 Azure 入口網站 儲存它,再流覽至任何其他畫面或窗格。
在應用程式的註冊頁面上,從瀏覽窗格中選取 [API 許可權 ],以開啟頁面,以新增對應用程式所需 API 的存取權。
選取新增權限。
確認已選取 [Microsoft API] 索引標籤。
在 [常用的 Microsoft API] 區段中,選取 [Microsoft Graph]。
在 [ 委派的許可權] 區段中,從清單中選取 [User.Read ] 和 [GroupMember.Read.All ]。 如有需要請使用搜尋方塊。
選取新增權限。
GroupMember.Read.All
需要管理員同意,因此請選取 [授與/撤銷 {tenant} 的管理員同意],然後在系統詢問您是否要授與租使用者中所有帳戶要求的同意時選取 [是 ]。 您必須是Microsoft Entra ID 租使用者管理員,才能執行此動作。
設定應用程式 (java-servlet-webapp-groups) 以使用您的應用程式註冊
使用下列步驟來設定應用程式:
注意
在下列步驟中,ClientID
與 或 AppId
相同Application ID
。
在 IDE 中開啟專案。
開啟 ./src/main/resources/authentication.properties 檔案。
尋找字串
{enter-your-tenant-id-here}
。 如果您使用此組織目錄中的 [帳戶] 選項註冊應用程式,請將現有的值取代為 Microsoft Entra 租使用者識別碼。尋找字串
{enter-your-client-id-here}
,並將現有的值取代為從 Azure 入口網站 複製的應用程式識別碼或clientId
java-servlet-webapp-groups
應用程式。尋找字串
{enter-your-client-secret-here}
,並將現有的值取代為您在建立java-servlet-webapp-groups
應用程式期間儲存的值,並在 Azure 入口網站 中。
設定安全性群組
您可以取得下列選項,說明如何進一步設定應用程式以接收群組宣告:
在包含巢狀群組的 Microsoft Entra ID 租使用者中,接收已登入使用者指派給的所有群組。 如需詳細資訊,請參閱設定您的應用程式以接收已登入使用者指派給的所有群組,包括巢狀群組一節。
從已篩選的一組群組接收群組宣告值,您的應用程式會用來處理這些群組。 如需詳細資訊,請參閱設定應用程式以從使用者可能指派的已篩選群組集合接收群組宣告值一節。 此選項不適用於 Microsoft Entra ID Free Edition。
注意
若要取得內部部署群組的 samAccountName
或 而非On Premises Group Security Identifier
群組標識符,請參閱使用從 Active Directory 同步處理群組屬性的必要條件一節,請參閱使用 Microsoft Entra ID 設定應用程式的群組宣告。
設定您的應用程式以接收已登入使用者指派的所有群組,包括巢狀群組
若要設定您的應用程式,請使用下列步驟:
在應用程式的註冊頁面上,選取 瀏覽窗格中的 [令牌 組態],以開啟頁面,您可以在其中設定向應用程式發出的宣告提供的令牌。
選取 [新增群組宣告 ] 以開啟 [ 編輯群組宣告 ] 畫面。
選取 [安全組] 或 [所有群組] 選項(包括通訊組清單,但不包含指派給應用程式的群組) 選項。 選擇這兩個選項會否定 [安全組] 選項的效果。
在 [ 標識符] 區段底下,選取 [ 群組標識符]。 此選取專案會導致Microsoft Entra ID ,將使用者指派給的群組對象 標識碼傳送至應用程式登入用戶之後所接收標識元 令牌 的群組宣告中。
將您的應用程式設定為從使用者可能指派給的已篩選群組集合接收群組宣告值
當下列情況成立時,此選項很有用:
- 您的應用程式對登入使用者可能指派的一組選取群組感興趣。
- 您的應用程式對租使用者中指派給的每個安全組並不感興趣。
這個選項可協助您的應用程式避免 超額 問題。
注意
此功能不適用於 Microsoft Entra ID Free Edition。
當您使用此選項時,無法使用巢狀群組指派。
若要在應用程式中啟用此選項,請使用下列步驟:
在應用程式的註冊頁面上,選取 瀏覽窗格中的 [令牌 組態],以開啟頁面,您可以在其中設定向應用程式發出的宣告提供的令牌。
選取 [新增群組宣告 ] 以開啟 [ 編輯群組宣告 ] 畫面。
選取 指派給應用程式的群組。
選擇其他選項 ,例如安全組或所有群組(包括指派給應用程式的通訊組清單,但不包括指派給應用程式的群組) -- 否定應用程式從選擇使用此選項所衍生的好處。
在 [ 標識符] 區段底下,選取 [ 群組標識符]。 此選取結果會導致Microsoft Entra ID,傳送使用者指派給群組的物件標識碼,以在標識元令牌的群組宣告中。
如果您使用 [公開 API] 選項來公開 Web API,則您也可以選擇 [存取] 區段底下的 [群組標識符] 選項。 此選項會導致在存取令牌的群組宣告中,Microsoft Entra ID 傳送使用者指派給群組的物件識別符。
在應用程式的註冊頁面上,選取瀏覽窗格中的 [概觀] 以開啟應用程式概觀畫面。
選取具有本機目錄中受控應用程式中應用程式名稱的超連結。 此欄位標題可能會截斷─ 例如
Managed application in ...
。 當您選取此連結時,您會流覽至 與您建立應用程式租使用者中應用程式服務主體相關聯的 [企業應用程式概觀 ] 頁面。 您可以使用瀏覽器的 [上一頁] 按鈕,巡覽回應用程式註冊頁面。選取 瀏覽窗格上的 [使用者和群組 ],以開啟頁面,您可以在其中將使用者和群組指派給應用程式。
選取 [新增使用者]。
從結果畫面選取 [使用者和群組 ]。
選擇您要指派給此應用程式的群組。
選取 [ 選取 ] 以完成選取群組。
選取 [ 指派 ] 以完成群組指派程式。
當使用者登入您的應用程式是一或多個指派群組的成員時,您的應用程式現在會在群組宣告中接收這些選取的群組。
選取 瀏覽窗格上的 [屬性 ],以開啟列出應用程式基本屬性的頁面。將 [ 需要使用者指派?] 旗標設定為 [ 是]。
重要
當您將 [需要使用者指派嗎? ] 設定為 [是] 時,Microsoft Entra ID 會檢查 [使用者和群組] 窗格中只有指派給應用程式的使用者能夠登入您的應用程式。 您可以直接指派使用者,或指派他們所屬的安全組來指派使用者。
設定應用程式 (java-servlet-webapp-groups) 以辨識群組標識符
使用下列步驟來設定應用程式:
重要
在 [令牌組態] 頁面上,如果您選擇 groupID 以外的任何選項,例如 DNSDomain\sAMAccountName - 您應該在下列步驟中輸入組名,例如 , contoso.com\Test Group
而不是物件標識符:
開啟 ./src/main/resources/authentication.properties 檔案。
尋找字串
{enter-your-admins-group-id-here}
,並以您從 Azure 入口網站 複製的GroupAdmin
群組對象識別碼取代現有的值。 也請從佔位元元值中移除大括弧。尋找字串
{enter-your-users-group-id-here}
,並將現有的值取代為您從 Azure 入口網站 複製的群組對象識別碼GroupMember
。 也請從佔位元元值中移除大括弧。
建置範例
若要使用 Maven 建置範例,請流覽至包含 範例pom.xml 檔案的目錄,然後執行下列命令:
mvn clean package
此命令會產生 您可以在各種應用程式伺服器上執行的 .war 檔案。
執行範例
這些指示假設您已安裝 WebSphere 並設定伺服器。 您可以使用在 Azure 虛擬機器 上部署 WebSphere 應用程式伺服器(傳統)叢集進行基本伺服器設定的指引。
在部署至 WebSphere 之前,請使用下列步驟在範例本身進行一些組態變更,然後建置或重建套件:
瀏覽至應用程式的 authentication.properties 檔案,並將 的值
app.homePage
變更為您打算使用的伺服器 URL 和埠號碼,如下列範例所示:# app.homePage is by default set to dev server address and app context path on the server # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net app.homePage=https://<server-url>:<port-number>/msal4j-servlet-auth/
儲存此檔案之後,請使用下列命令重建您的應用程式:
mvn clean package
程式代碼完成建置之後,請將 .war 檔案複製到目標伺服器的文件系統。
您也需要在 Azure 應用程式註冊中進行相同的變更,您可以在 Azure 入口網站 中將它設定為 [驗證] 索引標籤上的 [重新導向 URI] 值。
流覽至 適用於開發人員的 Microsoft 身分識別平台 應用程式註冊 頁面。
使用搜尋方塊來搜尋您的應用程式註冊 ,例如
java-servlet-webapp-authentication
。選取應用程式名稱以開啟您的應用程式註冊。
從選單中選擇 驗證。
在 [Web - 重新導向 URI] 區段中,選取 [新增 URI]。
填寫應用程式的 URI,並 附加 /auth/redirect - 例如
https://<server-url>:<port-number>/auth/redirect
。選取儲存。
使用下列步驟,使用 WebSphere 的整合式解決方案控制台來部署範例:
在 [應用程式] 索引標籤上,選取 [新增應用程式],然後選取 [新增企業應用程式]。
選擇您建置的 .war 檔案,然後選取 [下一步],直到您進入 Web 模組安裝步驟的對應內容根目錄為止。 其他預設設定應該沒問題。
針對內容根目錄,請將它設定為與您在範例組態/Azure 應用程式註冊中設定的 [重新導向 URI] 中的埠號碼之後相同的值。 也就是說,如果重新導向 URI 是
http://<server-url>:9080/msal4j-servlet-auth/
,則內容根目錄應該是msal4j-servlet-auth
。選取 [完成]。
應用程式完成安裝之後,請移至 [應用程式] 索引標籤的 [WebSphere 企業應用程式] 區段。
從應用程式清單中選取您安裝的 .war 檔案,然後選取 [開始部署]。
完成部署之後,流覽至
http://<server-url>:9080/{whatever you set as the context root}
,您應該可以看到應用程式。
探索範例
使用下列步驟來探索範例:
- 請注意畫面中央顯示的已登入或註銷狀態。
- 選取角落中的上下文相關按鈕。 當您第一次執行應用程式時,此按鈕會 讀取 [登入 ]。
- 在下一個頁面上,遵循指示,並使用 Microsoft Entra ID 租使用者中的帳戶登入。
- 在同意畫面上,請注意所要求的範圍。
- 請注意,上下文相關按鈕現在會顯示 [註銷 ] 並顯示您的用戶名稱。
- 選取 [ 標識符令牌詳細數據 ],以查看一些標識符令牌已譯碼的宣告。
- 選取 [ 群組 ] 以查看登入使用者之安全組成員資格的任何資訊。
- 選取 [僅限系統管理員] 或 [一般使用者] 來存取群組宣告受保護的端點。
- 如果您的登入用戶位於群組中
GroupAdmin
,用戶可以輸入這兩個頁面。 - 如果您的登入使用者位於群組中
GroupMember
,則使用者只能輸入 [ 一般使用者 ] 頁面。 - 如果您的登入使用者不是這兩個群組,則用戶無法存取這兩個頁面的其中一個。
- 如果您的登入用戶位於群組中
- 使用角落中的按鈕註銷。
- 註銷之後,選取 [ 標識符令牌詳細數據 ],觀察應用程式在使用者未獲授權時顯示
401: unauthorized
錯誤,而不是標識符令牌宣告。
關於程式碼
此範例會使用 MSAL for Java (MSAL4J) 來登入使用者,並取得可能包含群組宣告的標識符令牌。 如果標識符令牌中的排放群組太多,此範例會使用 Microsoft Graph SDK for Java ,從 Microsoft Graph 取得群組成員資格數據。 根據使用者所屬的群組,登入的使用者可以存取任何一個、一個或兩個受保護頁面, Admins Only
以及 Regular Users
。
如果您想要復寫此範例的行為,您必須使用 Maven 將 MSAL4J 和 Microsoft Graph SDK 新增至您的專案。 您可以在 src/main/java/com/microsoft/azuresamples/msal4j 資料夾中複製pom.xml檔案和協助程式和 authservlet 資料夾的內容。 您也需要 authentication.properties 檔案。 這些類別和檔案包含一般程式代碼,您可以在各種應用程式中使用。 您也可以複製範例的其餘部分,但會特別建置其他類別和檔案,以解決此範例的目標。
目錄
下表顯示範例項目資料夾的內容:
檔案/資料夾 | 描述 |
---|---|
src/main/java/com/microsoft/azuresamples/msal4j/groupswebapp/ | 此目錄包含定義應用程式後端商業規則的類別。 |
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ | 此目錄包含用於登入和註銷端點的類別。 |
____Servlet.java | 所有可用的端點都定義於以____Servlet.java結尾的類別.java類別中。 |
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ | 驗證的協助程序類別。 |
AuthenticationFilter.java | 將未經驗證的要求重新導向至受保護的端點至 401 頁面。 |
src/main/resources/authentication.properties | Microsoft Entra 識別碼和程序設定。 |
src/main/webapp/ | 此目錄包含 UI - JSP 範本 |
CHANGELOG.md | 範例的變更清單。 |
CONTRIBUTING.md | 參與範例的指導方針。 |
許可證 | 範例的授權。 |
處理令牌中的群組宣告,包括處理超額
下列各節說明應用程式如何處理群組宣告。
群組宣告
登入使用者所屬安全組的物件標識碼會在令牌的群組宣告中傳回,如下列範例所示:
{
...
"groups": [
"0bbe91cc-b69e-414d-85a6-a043d6752215",
"48931dac-3736-45e7-83e8-015e6dfd6f7c",]
...
}
群組超額宣告
為了確保令牌大小不會超過 HTTP 標頭大小限制,Microsoft 身分識別平台 限制其包含在群組宣告中的物件標識碼數目。
SAML 令牌的超額限製為150,JWT令牌為200,而單頁應用程式則為6。 如果使用者屬於超過超額限制的群組成員,則 Microsoft 身分識別平台 不會在令牌中的群組宣告中發出群組標識符。 相反地,它會在令牌中包含超額宣告,指示應用程式查詢 Microsoft Graph API 以擷取使用者的群組成員資格,如下列範例所示:
{
...
"_claim_names": {
"groups": "src1"
},
{
"_claim_sources": {
"src1": {
"endpoint":"[Graph Url to get this user's group membership from]"
}
}
...
}
在此範例中建立超額案例以進行測試
若要建立超額案例,您可以使用下列步驟:
您可以使用 AppCreationScripts 資料夾中提供的 BulkCreateGroups.ps1 檔案來建立大量群組,並將使用者指派給他們。 此檔案有助於在開發期間測試超額案例。 請記得變更 BulkCreateGroups.ps1 腳本中所提供的使用者
objectId
。當您執行此範例並發生超額時,您會在使用者登入之後,在首頁中看到
_claim_names
。我們強烈建議您盡可能使用群組篩選功能,以避免發生群組超額。 如需詳細資訊,請參閱設定應用程式以從使用者可能指派的已篩選群組集合接收群組宣告值一節。
如果您無法避免發生群組超額,建議您使用下列步驟來處理令牌中的群組宣告:
- 檢查宣告
_claim_names
,其中一個值是 群組。 此宣告表示超額。 - 如果找到,請呼叫 中指定的
_claim_sources
端點以擷取使用者的群組。 - 如果找不到,請查看 使用者群組的群組 宣告。
- 檢查宣告
注意
處理超額需要呼叫 Microsoft Graph 才能讀取已登入使用者的群組成員資格,因此您的應用程式必須具有 getMemberObjects 函式的 GroupMember.Read.All 許可權才能順利執行。
如需 Microsoft Graph 程式設計的詳細資訊,請參閱適用於開發人員的 Microsoft Graph 簡介影片。
ConfidentialClientApplication
ConfidentialClientApplication
實例會在 AuthHelper.java 檔案中建立,如下列範例所示。 此對象有助於製作Microsoft Entra 授權 URL,也有助於交換存取令牌的驗證令牌。
// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
.builder(CLIENT_ID, secret)
.authority(AUTHORITY)
.build();
下列參數用於具現化:
- 應用程式的用戶端識別碼。
- 客戶端密碼,這是機密用戶端應用程式的需求。
- Microsoft Entra 識別符授權單位,其中包含您的Microsoft Entra 租使用者標識符。
在此範例中,這些值會使用 Config.java 檔案中的屬性讀取器,從 authentication.properties 檔案讀取。
逐步解說
下列步驟提供應用程式的功能的逐步解說:
登入程式的第一個步驟是將要求傳送至
/authorize
您Microsoft Entra ID 租使用者的端點。 MSAL4JConfidentialClientApplication
實例可用來建構授權要求 URL。 應用程式會將瀏覽器重新導向至此 URL,也就是使用者登入的位置。final ConfidentialClientApplication client = getConfidentialClientInstance(); AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES)) .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build(); final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString(); contextAdapter.redirectUser(authorizeUrl);
下列清單描述此程式碼的功能:
AuthorizationRequestUrlParameters
:必須設定的參數,才能建置 AuthorizationRequestUrl。REDIRECT_URI
:其中Microsoft Entra 會在收集使用者認證之後重新導向瀏覽器,以及驗證碼。 它必須符合 Azure 入口網站 中Microsoft Entra ID 應用程式註冊中的重新導向 URI。SCOPES
: 範圍 是應用程式要求的許可權。- 一般而言,三個範圍
openid profile offline_access
足以接收標識符令牌回應。 - 您可以在 authentication.properties 檔案中找到應用程式所要求的完整範圍清單。 您可以新增更多範圍,例如
User.Read
。
- 一般而言,三個範圍
使用者會看到 Microsoft Entra ID 發出的登入提示。 如果登入嘗試成功,則會將使用者的瀏覽器重新導向至應用程式的重新導向端點。 對這個端點的有效要求包含 授權碼。
然後,實例
ConfidentialClientApplication
會針對標識符令牌交換此授權碼,並從 entra ID Microsoft存取令牌。// First, validate the state, then parse any error codes in response, then extract the authCode. Then: // build the auth code params: final AuthorizationCodeParameters authParams = AuthorizationCodeParameters .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build(); // Get a client instance and leverage it to acquire the token: final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance(); final IAuthenticationResult result = client.acquireToken(authParams).get();
下列清單描述此程式碼的功能:
AuthorizationCodeParameters
:必須設定的參數,才能交換標識符和/或存取令牌的授權碼。authCode
:在重新導向端點收到的授權碼。REDIRECT_URI
:必須再次傳遞上一個步驟中使用的重新導向 URI。SCOPES
:必須再次傳遞上一個步驟中使用的範圍。
如果
acquireToken
成功,則會擷取權杖宣告。 如果 nonce 檢查通過,結果會放在context
- 實例IdentityContextData
中,並儲存至會話。 然後,應用程式可以透過IdentityContextAdapterServlet
實例從會話具現化IdentityContextData
,只要需要存取它,如下列程式代碼所示:// parse IdToken claims from the IAuthenticationResult: // (the next step - validateNonce - requires parsed claims) context.setIdTokenClaims(result.idToken()); // if nonce is invalid, stop immediately! this could be a token replay! // if validation fails, throws exception and cancels auth: validateNonce(context); // set user to authenticated: context.setAuthResult(result, client.tokenCache().serialize()); // handle groups overage if it has occurred. handleGroupsOverage(contextAdapter);
在上一個步驟之後,您可以使用 的
IdentityContextData
實例來擷context.getGroups()
取群組成員資格。如果使用者是太多群組的成員 -- 超過 200 -
context.getGroups()
如果 不是呼叫 ,則呼叫handleGroupsOverage()
可能會是空的。 同時傳回true
,context.getGroupsOverage()
表示發生超額,而且取得完整群組清單需要呼叫 Microsoft Graph。handleGroupsOverage()
請參閱 AuthHelper.java 中的方法,以查看當有超額時,此應用程式context.setGroups()
如何使用。
保護路由
請參閱 AuthenticationFilter.java ,以瞭解範例應用程式如何篩選路由的存取權。 在 authentication.properties 檔案中app.protect.authenticated
,屬性包含只有已驗證使用者可以存取的逗號分隔路由,如下列範例所示:
# for example, /token_details requires any user to be signed in and does not require special groups claim
app.protect.authenticated=/token_details
底下 app.protect.groups
逗號分隔規則集中所列的任何路由,也會對未驗證的已驗證用戶進行限制,如下列範例所示。 不過,這些路由也包含以空格分隔的群組成員資格清單。 只有屬於至少一個對應群組的使用者才能在驗證之後存取這些路由。
# define short names for group IDs here for the app. This is useful in the next property (app.protect.groups).
# EXCLUDE the curly braces, they are in this file only as delimiters.
# example:
# app.groups=groupA abcdef-qrstuvw-xyz groupB abcdef-qrstuv-wxyz
app.groups=admin {enter-your-admins-group-id-here}, user {enter-your-users-group-id-here}
# A route and its corresponding group(s) that can view it, <space-separated>; the start of the next route & its group(s) is delimited by a <comma-and-space-separator>
# this says: /admins_only can be accessed by admin group, /regular_user can be accessed by admin group and user group
app.protect.groups=/admin_only admin, /regular_user admin user
範圍
範圍會告訴Microsoft Entra標識符應用程式所要求的存取層級。
根據要求的範圍,Microsoft Entra ID 會在登入時向用戶顯示同意對話。 如果使用者同意一或多個範圍並取得令牌,則 scopes-consented-to 會編碼為產生的 access_token
。
如需應用程式要求的範圍,請參閱 authentication.properties。 根據預設,應用程式會將範圍值設定為 GroupMember.Read.All
。 如果應用程式需要呼叫 Graph 以取得使用者的群組成員資格,則需要此特定Microsoft Graph API 範圍。
其他相關資訊
- 適用於 Java 的 Microsoft 驗證程式庫 (MSAL)
- Microsoft 身分識別平台 (適用於開發人員的Microsoft項目識別碼)
- 快速入門:使用 Microsoft 身分識別平台來註冊應用程式
- 瞭解Microsoft Entra ID 應用程式同意體驗
- 瞭解使用者和系統管理員同意
- MSAL 程式代碼範例