共用方式為


可呼叫 Web API 的傳統型應用程式:呼叫 Web API

適用於:具有白色複選標記符號的 綠色圓圈。 Workforce 租使用者 具有灰色 X 符號的白色圓圈。 外部租使用者(深入瞭解

現在您已有令牌,您可以存取受保護的 Web API。

呼叫 Web API

MSAL.NET 中的 AuthenticationResult 屬性

獲取權杖的方法會回傳 AuthenticationResult。 若是非同步方法,會傳回 Task<AuthenticationResult>

在 MSAL.NET 中,會出現 AuthenticationResult

  • AccessToken 適用於存取資源的 Web API。 此參數是字串,通常是 Base-64 編碼的 JWT。 用戶端絕不應該查看存取權杖內部。 此格式不保證會維持穩定,並可針對資源將其加密。 撰寫的程式碼相依於用戶端上的存取權杖內容,是最常造成錯誤和用戶端邏輯破碎的來源之一。 如需詳細資訊,請參閱存取權杖
  • IdToken,對象為使用者。 此參數是編碼的 JWT。 如需詳細資訊,請參閱識別碼權杖
  • ExpiresOn 告知權杖到期的日期和時間。
  • TenantId 包含找到使用者時其所在的租用戶。 對於 Microsoft Entra B2B 情境中的來賓使用者,租戶 ID 是來賓租戶,而不是唯一租戶。 當使用者傳遞權杖時,AuthenticationResult 也會包含此使用者的相關資訊。 對於在沒有使用者的應用程式中要求代幣的機密客戶流程,該使用者資訊為 null。
  • 簽發令牌的對象 Scopes
  • 使用者的唯一識別碼。

IAccount

MSAL.NET 會透過IAccount介面定義帳戶的概念。 此重大變更提供了正確的語意。 同一個使用者可擁有數個位於不同 Microsoft Entra 目錄的帳戶。 此外,在來賓情境下,MSAL.NET 因提供主帳戶資訊,而能夠提供更佳的資訊。 下圖顯示 IAccount 介面的結構。

IAccount 介面結構

AccountId 類別會使用下表所示的屬性來識別特定租用戶中的帳戶。

屬性 說明
TenantId 以字串形式表示的 GUID,是帳戶所在租戶的識別碼。
ObjectId 以字串表示的 GUID,這是租戶中帳戶所有者的使用者識別碼。
Identifier 帳戶的唯一識別碼。 IdentifierObjectIdTenantId 的串連,並會以逗號分隔。 兩者並非 Base-64 編碼的。

IAccount 介面會呈現單一帳戶的相關資訊。 相同的使用者可以存在於不同的租用戶中,這表示使用者可以有多個帳戶。 其成員會顯示在下表中。

屬性 說明
Username 包含 UserPrincipalName (UPN) 格式中可顯示值的字串,例如 john.doe@contoso.com。 與 HomeAccountId 和 HomeAccountId.Identifier 不同(它們不會是 Null),此字串可以是 Null。 此屬性會取代舊版 MSAL.NET 版本中 DisplayableIdIUser 屬性。
Environment 包含此帳戶身分識別提供者的字串,例如 login.microsoftonline.com。 此屬性取代了 IUserIdentityProvider 屬性,但 IdentityProvider 不僅有關於雲端環境的資訊,還包括租用戶相關的資訊。 在這裡,此值僅限於主機。
HomeAccountId 使用者主帳戶的帳戶識別碼。 此屬性可在 Microsoft Entra 組織中唯一地識別使用者。

使用權杖呼叫受保護的 API

MSAL 在 AuthenticationResult 中傳回 result 之後,請先將傳回的內容新增至 HTTP 授權標頭,再進行呼叫以存取受保護的 Web API。

httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);

// Call the web API.
HttpResponseMessage response = await _httpClient.GetAsync(apiUri);
...

下一步