了解 API 授權與令牌快取
公司入口網站的設計包括從 Microsoft Graph 讀取已登入用戶的個人資料。 認證將使用者識別到入口網站,但 API 呼叫也需要具備適當權限的存取權杖。
本單元說明權限類型、範圍,以及 MSAL4J 權杖快取的示意模式。 它不會假設應用程式或已登入的工作階段正在執行。
API 權限和範圍
受保護的 API 會定義其功能與資料的權限。 例如,Microsoft Graph 在讀取個人檔案、閱讀行事曆和發送郵件方面有不同的權限。 應用程式僅請求其預定操作所需的權限。
Microsoft Entra ID 支援兩種權限類型:
| 權限類型 | 背景 | 同意 |
|---|---|---|
| 委派的權限 | 應用程式會代表已登入的使用者行動。 存取權限受授權權限及使用者存取權限的限制。 | 使用者或授權管理員可依權限與租戶政策授予同意。 |
| 應用程式權限 | 應用程式在沒有登入使用者的情況下,會自動運作,例如背景服務。 | 需取得行政人員同意。 |
入口網站會使用委User.Read派權限來讀取已登入使用者的個人資料。 這個權限並不代表能存取所有使用者的資料或無關資源(如行事曆)。
範圍描述了所請求的存取權限
在委派授權請求中,OAuth 2.0 範圍表達應用程式所請求的權限。 範圍可以同時識別資源與權限;例如,請求 https://graph.microsoft.com/Calendars.Read Microsoft Graph 的行事曆讀取權限。
範例使用單一範圍 User.Read。 對於 Microsoft Graph 範圍,資源識別碼可以省略,因此代表 https://graph.microsoft.com/User.Read。 欲了解更多資訊,請參閱 範圍與權限。
設定的 API 權限、請求範圍和同意是不同的。 在應用程式註冊中加入 API 權限本身並不代表授權或改變應用程式程式碼所請求的範圍。
存取權杖是其 API 專用的
存取權杖是針對特定資源設計的。 Microsoft Graph 的權杖不能和其他 API 的權杖互換,ID 權杖也不能取代 API 存取權杖。
MSAL4J 負責擷取並緩存代幣。 應用程式使用該令牌作為其預定資源,而非解析以假設登入使用者身份,或將其視為可重複使用的授權碼。
示意用無訊息提示權杖取得
對於後續的請求,網頁應用程式可以向 MSAL 索取令牌,而無需讓使用者經過另一次登入互動。 以下片段改編自參考範例 AuthHelper。 它說明了如何還原與工作階段相關聯的快取,並為已在該內容中具代表性的帳戶要求一個權杖。
final SilentParameters parameters = SilentParameters
.builder(Collections.singleton(Config.SCOPES), context.getAccount())
.build();
final ConfidentialClientApplication client = getConfidentialClientInstance();
client.tokenCache().deserialize(context.getTokenCache());
final IAuthenticationResult result = client.acquireTokenSilently(parameters).get();
SilentParameters 識別所請求的範圍與帳戶。 在此範例中,Config.SCOPES 包含 User.Read,而 context 提供與已驗證工作階段相關聯的帳戶和序列化快取。 這些是範例應用程式輔助工具,而非學習者必須取得的數值。
快取恢復後, acquireTokenSilently 嘗試在不需使用者操作的情況下滿足請求。 它可回傳可用的快取存取權杖,或在適用時使用快取的刷新權杖。 「靜音」不一定代表沒有網路請求發生。
此片段省略了周圍的快取持久性與異常處理。 若 MSAL 表示需要使用者互動,網頁應用程式會啟動新的授權請求並處理回撥。 它不會再次兌換舊的授權碼。 其他故障,如網路或設定錯誤,則需要適當的錯誤處理,而非無條件登入迴圈。
標記快取與會話資料包含敏感資訊。 完整的應用程式必須保護該資料,將其與正確的帳號與會話關聯,並適當持久化快取變更。
在 API 呼叫前解讀結果
成功取得權杖後,會產生一個 IAuthenticationResult,其中包含存取權杖,以及其有效期限和帳戶內容相關資訊。 對於 Microsoft Graph 請求,應用程式會將 Graph 存取權杖提供給其 HTTP 用戶端或 Graph 認證提供者。
MSAL4J 不會僅透過取得該憑證來讀取使用者的個人資料。 獨立的 API 請求負責執行資料操作。
Microsoft Graph 提供資源
Microsoft Graph 透過 https://graph.microsoft.com揭露 Microsoft 雲端資料與服務。 端點 /v1.0/me 代表已登入的使用者,並需要委派的使用者上下文。
下一單元將檢視對該端點的示範性請求,以及透過 Java Graph SDK 進行的等效請求。 Microsoft Graph 概述描述了更廣泛的 API。