警告
此內容適用於較舊的 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 中間件進行保護。
圖表
通訊協定流程
- 用戶流覽至 Web 應用程式。
- 應用程式會將 JavaScript 前端(表示層)傳回瀏覽器。
- 使用者會起始登入,例如按兩下登入連結。 瀏覽器會將 GET 傳送至 Azure AD 授權端點,以要求標識元令牌。 此要求會在查詢參數中包含應用程式標識碼和回復 URL。
- Azure AD 會驗證回復 URL 是否與在 Azure 入口網站中設定的註冊回復 URL 相符。
- 用戶在登入頁面上登入。
- 如果驗證成功,Azure AD 會建立標識符令牌,並將它當做 URL 片段 (#) 傳回至應用程式的回復 URL。 對於生產應用程式,此回復 URL 應該是 HTTPS。 傳回的令牌包含有關使用者和 Azure AD 的宣告,這些宣告是應用程式為了驗證令牌所需的。
- 在瀏覽器中執行的 JavaScript 用戶端程式代碼會從回應中擷取令牌,以用於保護應用程式的 Web API 後端呼叫。
- 瀏覽器會使用授權標頭中的標識碼令牌呼叫應用程式的 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),就會在使用者的目錄中註冊,並在登入期間由使用者提供任何必要的同意。