登入使用者的 Web 應用程式:程式代碼設定
瞭解如何為登入使用者的 Web 應用程式設定程式碼。
支援 Web 應用程式的 Microsoft 連結庫
下列 Microsoft 連結庫可用來保護 Web 應用程式(和 Web API):
語言/ 架構 | 項目開啟 GitHub |
套件 | 取得 啟動 |
登入使用者 | 存取 Web API | 正式推出 (GA) 或 公開預覽1 |
---|---|---|---|---|---|---|
.NET | MSAL.NET | Microsoft.Identity.Client | — | GA | ||
.NET | Microsoft.IdentityModel | Microsoft.IdentityModel | — | 2 | 2 | GA |
ASP.NET Core | ASP.NET Core | Microsoft.AspNetCore.Authentication | 快速入門 | GA | ||
ASP.NET Core | Microsoft.Identity.Web | Microsoft.Identity.Web | 快速入門 | GA | ||
Java | MSAL4J | msal4j | 快速入門 | GA | ||
Spring | spring-cloud-azure-starter-active-directory | spring-cloud-azure-starter-active-directory | 教學課程 | GA | ||
Node.js | MSAL 節點 | msal-node | 快速入門 | GA | ||
Python | MSAL Python | msal | GA | |||
Python | identity | identity | 快速入門 | -- |
(1)在線服務的通用授權條款適用於公開預覽中的連結庫。
(2) Microsoft.IdentityModel 連結庫只會驗證權杖 - 它無法要求識別碼或存取令牌。
選取對應至您感興趣的平臺的索引標籤:
本文中的代碼段和下列代碼段是從 ASP.NET Core Web 應用程式累加教學課程第 1 章擷取。
您可能想要參閱本教學課程以取得完整的實作詳細數據。
組態檔
使用 Microsoft 身分識別平台 登入使用者的 Web 應用程式會透過組態檔進行設定。 這些檔案必須指定下列值:
- 例如,如果您想要讓應用程式在國家雲端中執行,則為雲端 實例 。 不同的選項包括:
- Azure 公用雲端的
https://login.microsoftonline.com/
https://login.microsoftonline.us/
適用於 Azure 美國政府https://login.microsoftonline.de/
適用於 Microsoft Entra 德國https://login.partner.microsoftonline.cn/common
由 21Vianet 營運的 Microsoft Entra China
- Azure 公用雲端的
- 租使用者標識碼中的物件。 選項會根據您的應用程式是單一租使用者或多租使用者而有所不同。
- 從 Azure 入口網站 取得的租使用者 GUID,以登入組織中的使用者。 您也可以使用功能變數名稱。
organizations
以在任何公司或學校帳戶中登入使用者common
使用任何公司或學校帳戶或 Microsoft 個人帳戶登入使用者consumers
僅使用 Microsoft 個人帳戶登入使用者
- 從Azure 入口網站 複製的應用程式用戶端標識碼
您可能也會看到授權單位的參考、實例的串連和租用戶標識碼值。
在 ASP.NET Core 中,這些設定位於 [Microsoft Entra ID] 區段中的 appsettings.json 檔案中。
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "[Enter the tenantId here]",
// Client ID (application ID) obtained from the Azure portal
"ClientId": "[Enter the Client Id here]",
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-oidc"
}
}
在 ASP.NET Core 中,另一個檔案 (properties\launch 設定.json) 包含應用程式和各種配置檔的 URL (applicationUrl
) 和 TLS/SSL 埠 (sslPort
)。
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:3110/",
"sslPort": 44321
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"webApp": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:3110/"
}
}
}
在 Azure 入口網站 中,您在應用程式的 [驗證] 頁面上註冊的重新導向 URI 必須符合這些 URL。 針對上述兩個組態檔,它們會是 https://localhost:44321/signin-oidc
。 原因是 ,applicationUrl
http://localhost:3110
但sslPort
已指定 (44321
)。 CallbackPath
是 /signin-oidc
,如 中所 appsettings.json
定義。
同樣地,註銷 URI 會設定為 https://localhost:44321/signout-oidc
。
注意
SignedOutCallbackPath 應該設定為入口網站或應用程式,以避免在處理事件時發生衝突。
初始化程序代碼
初始化程式代碼差異為平臺相依性。 針對 ASP.NET Core 和 ASP.NET,登入使用者會委派給 OpenID 連線 中間件。 ASP.NET 或 ASP.NET Core 範本會產生 Azure AD v1.0 端點的 Web 應用程式。 需要一些設定,才能將其調整為 Microsoft 身分識別平台。
在 ASP.NET Core Web 應用程式 (和 Web API) 中,應用程式會受到保護,因為您在 Authorize
控制器或控制器動作上有屬性。 此屬性會檢查使用者是否已通過驗證。 在 .NET 6 版本之前,程式代碼初始化是在 Startup.cs 檔案中。 使用 .NET 6 的新 ASP.NET Core 專案不再包含 Startup.cs 檔案。 其位置是 Program.cs 檔案。 本教學課程的其餘部分與 .NET 5 或更低版本有關。
注意
如果您想要直接開始使用適用於 Microsoft 身分識別平台 的新 ASP.NET Core 範本,利用 Microsoft.Identity.Web,您可以下載包含 .NET 5.0 專案範本的預覽 NuGet 套件。 然後,安裝之後,您可以直接具現化 ASP.NET Core Web 應用程式 (MVC 或 Blazor)。 如需詳細資訊,請參閱 Microsoft.Identity.Web Web 應用程式項目範本 。 這是最簡單的方法,因為它會為您執行下列步驟。
如果您想要在 Visual Studio 中使用目前的預設 ASP.NET Core Web 專案啟動專案,或是使用 dotnet new mvc --auth SingleOrg
或 dotnet new webapp --auth SingleOrg
,您會看到如下所示的程式代碼:
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
此程式代碼會使用舊版 Microsoft.AspNetCore.Authentication.AzureAD.UI NuGet 套件,用來建立 Azure Active Directory v1.0 應用程式。 本文說明如何建立 Microsoft 身分識別平台 v2.0 應用程式,以取代該程序代碼。
將 Microsoft.Identity.Web 和 Microsoft.Identity.Web.UI NuGet 套件新增至您的專案。
Microsoft.AspNetCore.Authentication.AzureAD.UI
如果有 NuGet 套件,請將其移除。更新 中的
ConfigureServices
程序代碼,使其使用AddMicrosoftIdentityWebApp
和AddMicrosoftIdentityUI
方法。public class Startup { ... // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(Configuration, "AzureAd"); services.AddRazorPages().AddMvcOptions(options => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new AuthorizeFilter(policy)); }).AddMicrosoftIdentityUI();
Configure
在 Startup.cs 的 方法中,啟用對 和app.MapControllers();
呼叫app.UseAuthentication();
的驗證。// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // more code here app.UseAuthentication(); app.UseAuthorization(); app.MapRazorPages(); app.MapControllers(); // more code here }
在該程式代碼中:
擴充
AddMicrosoftIdentityWebApp
方法定義於 Microsoft.Identity.Web 中,其中;- 設定選項以讀取組態檔 (這裡從 [Microsoft Entra ID] 區段)
- 設定 OpenID 連線 選項,讓授權單位是 Microsoft 身分識別平台。
- 驗證令牌的簽發者。
- 確保對應至名稱的宣告會從
preferred_username
標識元令牌中的宣告對應。
除了組態物件之外,您也可以在呼叫
AddMicrosoftIdentityWebApp
時指定組態區段的名稱。 預設為AzureAd
。AddMicrosoftIdentityWebApp
具有進階案例的其他參數。 例如,追蹤 OpenID 連線 中間件事件可協助您對 Web 應用程式進行疑難解答,如果驗證無法運作。 將選擇性參數subscribeToOpenIdConnectMiddlewareDiagnosticsEvents
設定為true
,會顯示一組 ASP.NET Core 中間件處理資訊的方式,因為它會從 HTTP 回應進行到 中HttpContext.User
使用者的身分識別。擴充
AddMicrosoftIdentityUI
方法定義於 Microsoft.Identity.Web.UI 中。 它提供預設控制器來處理登入和註銷。
如需 Microsoft.Identity.Web 如何讓您建立 Web 應用程式的詳細資訊,請參閱 microsoft-identity-web 中的 Web Apps。
下一步
在下一篇文章中,您將瞭解如何觸發登入和註銷。