共用方式為


單頁應用程式

警告

此內容適用於較舊的 Azure AD v1.0 端點。 針對新專案使用 Microsoft身分識別平臺

單頁應用程式 (SPA) 通常會結構化為在瀏覽器中執行的 JavaScript 表示層(前端),以及在伺服器上執行的 Web API 後端,並實作應用程式的商業規則。若要深入瞭解隱含授權授與,並協助您判斷它是否適合您的應用程式案例,請參閱 瞭解 Azure Active Directory 中的 OAuth2 隱含授與流程

在此案例中,當使用者登入時,JavaScript 前端會使用 Active Directory Authentication Library for JavaScript (ADAL.JS) 和隱含授權授與,以從 Azure AD 取得標識符令牌 (id_token)。 令牌會被快取,且當用戶端呼叫「Web API」後端時,會將令牌附加至要求中作為持有人令牌。該後端透過使用 OWIN 中間件進行保護。

圖表

單頁應用程式圖表

通訊協定流程

  1. 用戶流覽至 Web 應用程式。
  2. 應用程式會將 JavaScript 前端(表示層)傳回瀏覽器。
  3. 使用者會起始登入,例如按兩下登入連結。 瀏覽器會將 GET 傳送至 Azure AD 授權端點,以要求標識元令牌。 此要求會在查詢參數中包含應用程式標識碼和回復 URL。
  4. Azure AD 會驗證回復 URL 是否與在 Azure 入口網站中設定的註冊回復 URL 相符。
  5. 用戶在登入頁面上登入。
  6. 如果驗證成功,Azure AD 會建立標識符令牌,並將它當做 URL 片段 (#) 傳回至應用程式的回復 URL。 對於生產應用程式,此回復 URL 應該是 HTTPS。 傳回的令牌包含有關使用者和 Azure AD 的宣告,這些宣告是應用程式為了驗證令牌所需的。
  7. 在瀏覽器中執行的 JavaScript 用戶端程式代碼會從回應中擷取令牌,以用於保護應用程式的 Web API 後端呼叫。
  8. 瀏覽器會使用授權標頭中的標識碼令牌呼叫應用程式的 Web API 後端。 如果資源與用戶端標識碼相同,Azure AD 驗證服務會發出一個 ID 令牌,此令牌可作為持有人令牌使用(在此案例中,由於 Web API 是應用程式自己的後端,這一條件成立)。

程式代碼範例

請參閱 的單頁應用程式案例程式代碼範例。 請務必經常回頭查看,因為經常新增範例。

應用程式註冊

  • 單一租使用者 - 如果您要為組織建置應用程式,則必須使用 Azure 入口網站在公司的目錄中註冊該應用程式。
  • 多租戶 - 如果您正在建置一個可以讓組織外部使用者使用的應用程式,該應用程式必須在您的公司目錄中註冊,此外,還必須在每個將使用該應用程式的組織的目錄中註冊。 若要在他們的目錄中提供您的應用程式,您可以包含客戶的註冊程式,讓他們同意您的應用程式。 當他們註冊您的應用程式時,他們會看到一個對話框,顯示應用程式所需的許可權,然後選擇同意的選項。 根據必要的許可權,其他組織中的系統管理員可能需要授與同意。 當使用者或系統管理員同意時,應用程式會在其目錄中註冊。

註冊應用程式之後,必須將它設定為使用 OAuth 2.0 隱含授與通訊協定。 根據預設,應用程式會停用此通訊協定。 若要為您的應用程式啟用 OAuth2 隱含授與通訊協定,請從 Azure 入口網站編輯其應用程式指令清單,並將 「oauth2AllowImplicitFlow」 值設定為 true。 如需詳細資訊,請參閱應用程式資訊清單

憑證到期

使用 ADAL.js 有助於:

  • 重新整理過期的令牌
  • 要求存取令牌以呼叫 Web API 資源

成功驗證之後,Azure AD 會在使用者的瀏覽器中寫入 Cookie,以建立會話。 請注意,使用者與 Azure AD 之間存在會話(不在使用者與 Web 應用程式之間)。 當令牌過期時,ADAL.js 使用此會話以無訊息方式取得另一個令牌。 ADAL.js 使用隱藏的 iFrame,使用 OAuth 隱含授與通訊協議來傳送和接收要求。 ADAL.js 也可以使用這個相同的機制,以無訊息方式取得應用程式呼叫的其他 Web API 資源的存取令牌,只要這些資源支援跨原始來源資源分享 (CORS),就會在使用者的目錄中註冊,並在登入期間由使用者提供任何必要的同意。

後續步驟