警告
此內容適用於較舊的 Azure AD v1.0 端點。 針對新專案使用 Microsoft身分識別平臺。
Web API 應用程式是需要從 Web API 取得資源的 Web 應用程式。 在此案例中,Web 應用程式可用來驗證和呼叫 Web API 的身分識別類型有兩種:
- 應用程式身分識別 - 此案例會使用 OAuth 2.0 用戶端認證授與來驗證作為應用程式並存取 Web API。 使用應用程式身分識別時,Web API 只能偵測 Web 應用程式正在呼叫它,因為 Web API 不會收到使用者的任何資訊。 如果應用程式收到使用者的相關信息,它將會透過應用程式通訊協定傳送,且不會由 Azure AD 簽署。 Web API 信任 Web 應用程式驗證使用者。 基於這個理由,此模式稱為受信任的子系統。
- 委派的使用者身分識別 - 此案例可以透過兩種方式來完成:OpenID Connect 和 OAuth 2.0 授權碼授與機密用戶端。 Web 應用程式會取得使用者的存取令牌,這向 Web API 證明使用者已成功向 Web 應用程式驗證,而 Web 應用程式能夠取得委派的使用者身分識別來呼叫 Web API。 此存取令牌會在要求中傳送至 Web API,以授權使用者並傳回所需的資源。
下列流程會討論應用程式身分識別和委派的使用者身分識別類型。 他們之間的主要差異在於委派的使用者身分識別必須先取得授權碼,使用者才能登入並取得 Web API 的存取權。
圖表
通訊協定流程
使用 OAuth 2.0 用戶端認證授與的應用程式身分識別
- 使用者在 Web 應用程式中登入 Azure AD(如需詳細資訊,請參閱 Web 應用程式 一節)。
- Web 應用程式需要取得存取令牌,才能向 Web API 進行驗證並擷取所需的資源。 它會向 Azure AD 的令牌端點提出要求,並提供認證、應用程式識別碼和 Web API 的應用程式識別碼 URI。
- Azure AD 會驗證應用程式,並傳回用來呼叫 Web API 的 JWT 存取令牌。
- 透過 HTTPS,Web 應用程式會使用傳回的 JWT 存取令牌,將具有「持有人」指定之 JWT 字串新增至 Web API 的要求授權標頭。 接著,Web API 會驗證 JWT 令牌,如果驗證成功,則會傳回所需的資源。
使用 OpenID Connect 進行使用者身分識別授權委派
- 使用者使用 Azure AD 登入 Web 應用程式(請參閱上面的網頁瀏覽器至 Web 應用程式一節)。 如果 Web 應用程式的使用者尚未同意允許 Web 應用程式代表其呼叫 Web API,使用者就必須同意。 應用程式會顯示它所需的許可權,如果其中任何一個是系統管理員層級的許可權,目錄中的一般使用者將無法同意。 此同意程式僅適用於多租使用者應用程式,而非單一租使用者應用程式,因為應用程式已經擁有必要的許可權。 當使用者登入時,Web 應用程式會收到標識元令牌,其中包含使用者的相關信息,以及授權碼。
- 使用 Azure AD 發出的授權碼,Web 應用程式會將要求傳送至 Azure AD 的令牌端點,其中包含授權碼、用戶端應用程式的詳細數據(應用程式識別碼和重新導向 URI),以及所需的資源(Web API 的應用程式識別碼 URI)。
- Azure AD 會驗證 Web 應用程式和 Web API 的授權碼和相關信息。 驗證成功后,Azure AD 會傳回兩個令牌:JWT 存取令牌和 JWT 重新整理令牌。
- 透過 HTTPS,Web 應用程式會使用傳回的 JWT 存取令牌,將具有「持有人」指定之 JWT 字串新增至 Web API 的要求授權標頭。 接著,Web API 會驗證 JWT 令牌,如果驗證成功,則會傳回所需的資源。
使用 OAuth 2.0 授權碼授與委派的使用者身分識別
- 用戶已經登入 Web 應用程式,其驗證機制與 Azure AD 無關。
- Web 應用程式需要授權碼才能取得存取令牌,因此它會透過瀏覽器向 Azure AD 的授權端點發出要求,並在成功驗證後提供 Web 應用程式的應用程式識別碼和重新導向 URI。 使用者登入 Azure AD。
- 如果 Web 應用程式的使用者尚未同意允許 Web 應用程式代表其呼叫 Web API,使用者就必須同意。 應用程式會顯示它所需的許可權,如果其中任何一個是系統管理員層級的許可權,目錄中的一般使用者將無法同意。 此同意同時適用於單一和多租用戶應用程式。 在單一租戶案例中,系統管理員可以執行管理員同意來代表其使用者。 這可以透過 Azure 入口網站 中的
Grant Permissions按鈕來完成。 - 使用者同意之後,Web 應用程式會收到需要取得存取令牌的授權碼。
- 使用 Azure AD 發出的授權碼,Web 應用程式會將要求傳送至 Azure AD 的令牌端點,其中包含授權碼、用戶端應用程式的詳細數據(應用程式識別碼和重新導向 URI),以及所需的資源(Web API 的應用程式識別碼 URI)。
- Azure AD 會驗證 Web 應用程式和 Web API 的授權碼和相關信息。 驗證成功后,Azure AD 會傳回兩個令牌:JWT 存取令牌和 JWT 重新整理令牌。
- 透過 HTTPS,Web 應用程式會使用傳回的 JWT 存取令牌,將具有「持有人」指定之 JWT 字串新增至 Web API 的要求授權標頭。 接著,Web API 會驗證 JWT 令牌,如果驗證成功,則會傳回所需的資源。
程式代碼範例
請參閱 Web 應用程式至 Web API 案例的程式代碼範例。 而且,經常回來查看 -- 經常新增範例。 Web 應用程式與 Web API 接口。
應用程式註冊
若要向 Azure AD v1.0 端點註冊應用程式,請參閱 註冊應用程式。
- 單一租使用者 - 針對應用程式身分識別和委派的使用者身分識別案例,Web 應用程式和 Web API 都必須在 Azure AD 中的相同目錄中註冊。 Web API 可以設定為公開一組許可權,用來限制 Web 應用程式的對其資源的存取。 如果使用委派的使用者身分識別類型,Web 應用程式必須從 Azure 入口網站中 [ 許可權至其他應用程式 的許可權] 下拉功能表中選取所需的許可權。 如果使用應用程式識別類型,則不需要此步驟。
- 多租戶 - 首先,網站應用程式已設定為指出其運作所需的許可權。 當目的地目錄中的使用者或系統管理員同意應用程式時,此必要許可權清單會顯示在對話框中,讓應用程式可供其組織使用。 某些應用程式只需要用戶層級許可權,組織中的任何使用者都可以同意。 其他應用程式需要系統管理員層級的許可權,組織中的用戶無法同意該許可權。 只有目錄管理員可以同意需要此層級許可權的應用程式。 當使用者或系統管理員同意時,Web 應用程式和 Web API 都會在其目錄中註冊。
憑證到期
當 Web 應用程式使用其授權碼來取得 JWT 存取令牌時,也會收到 JWT 重新整理令牌。 當存取令牌過期時,重新整理令牌可以用來重新驗證使用者,而不需要他們再次登入。 接著,此重新整理令牌會用來驗證使用者,從而產生新的存取令牌和重新整理令牌。