实验室 6:使用 OpenID Connect、MSAL 和 .NET SDK 进行身份验证
Microsoft Azure 用户接口
鉴于 Microsoft 云工具的动态特性,Azure UI 在此培训内容开发后可能会发生更改。 因此,实验说明和实验步骤可能无法正确对应。
我们发现社区进行了必要更改时,Microsoft 会更新此培训课程。 但是,云更新经常发生,因此在此培训内容更新之前,可能会发生 UI 更改。 如果发生这种情况,请适应这些更改,并根据需要在实验室中熟悉这些更改。
Instructions
开始之前
登录到实验室环境
使用以下凭据登录到 Windows 11 虚拟机 (VM):
- 用户名:
Admin
- 密码:
Pa55w.rd
注意:你的讲师将提供连接到虚拟实验室环境的说明。
查看已安装的应用程序
在 Windows 11 桌面上找到任务栏。 任务栏里有本实验室中你将使用的应用程序的图标,包括:
- Microsoft Edge
- Visual Studio Code
实验室方案
在本实验室中,你将在 Microsoft Entra ID 中注册应用程序,添加用户,然后测试该用户对该应用程序的访问权限,验证 Entra ID 是否可保护该应用程序。
体系结构关系图
练习 1:配置单租户 Entra ID 环境
任务 1:打开 Azure 门户
-
在任务栏上,选择 Microsoft Edge 图标。
-
在打开的浏览器窗口中,浏览到 Azure 门户 (
https://portal.azure.com
),然后使用你将用于此实验室的帐户登录。注意:第一次登录 Azure 门户时,你会看到一个门户教程。 选择“开始使用”,以跳过导览并开始使用门户。
任务 2:在 Entra ID 目录中注册应用程序
-
在 Azure 门户中,使用“搜索资源、服务和文档”** 文本框搜索“Entra ID”,然后在结果列表中,选择“Microsoft Entra ID”**。
备注:这会将浏览器会话重定向到与你的 Azure 订阅关联的 Microsoft Entra ID 租户的边栏选项卡。
-
在“Microsoft Entra ID” ** 边栏选项卡上,选择“管理”** 部分中的“应用注册”**。
-
在“应用注册”部分中,选择“+ 新建注册”。
-
在“注册应用程序”部分中,执行以下操作,然后选择“注册”:
设置 操作 “名称”文本框 输入“webappoidc” “支持的帐户类型”列表 选择“仅限此组织目录中的帐户(仅限默认目录 - 单个租户)” 注意:租户的名称可能因 Azure 订阅而异。
以下屏幕截图显示了“注册应用程序”部分中配置的设置。
任务 3:记录唯一标识符
-
在“webappoidc”应用程序注册边栏选项卡上,选择“概述”。
-
在“概述”部分,找到并记录“应用程序(客户端) ID”文本框的值 。 你将在稍后的实验室中使用此值。
-
在“概述”部分,找到并记录“目录(租户) ID”文本框的值 。 你将在稍后的实验室中使用此值。
任务 4:配置应用程序身份验证设置
-
在“webappoidc”应用程序注册边栏选项卡上的“管理”部分中,选择“身份验证”。
-
在“身份验证”部分中,执行以下操作,然后选择“配置”:
设置 操作 “平台配置”部分 选择“+ 添加平台” “配置平台”边栏选项卡 选择“Web” “重定向 URI”文本框 输入 https://localhost:5001/
“前通道注销 URL”文本框 输入 https://localhost:5001/signout-oidc
-
返回“平台配置”部分,选择“添加 URI”,然后输入
https://localhost:5001/signin-oidc
。 -
在“隐式授权和混合流”部分中,选择“ID 令牌(用于隐式流和混合流)”。
-
选择“保存”。
以下屏幕截图显示了“身份验证”边栏选项卡上配置的设置。
任务 5:创建 Microsoft Entra ID 用户
-
在 Azure 门户中,选择“Cloud Shell”图标 打开 Cloud Shell**。 如果 Cloud Shell 默认为 Bash 会话,请在“Cloud Shell”菜单中选择“切换到 PowerShell”,然后选择“确认”****。
注意:“Cloud Shell”图标使用大于符号 (>) 和下划线字符 (_) 表示。
如果这是首次启动 Cloud Shell,将看到“入门”提示。 选择“不需要存储帐户”,然后选择“应用”。
-
在“Cloud Shell”** 窗格中,运行以下命令以登录到与 Azure 订阅关联的 Microsoft Entra 租户:
Connect-AzureAD
-
运行以下命令以检索和显示 Microsoft Entra 租户的主域名系统 (DNS) 域名:
$aadDomainName = ((Get-AzureAdTenantDetail).VerifiedDomains)[0].Name $aadDomainName
注意:记录 DNS 域名的值。 你将在稍后的实验室中使用此值。
-
运行以下命令以创建用于测试 Microsoft Entra ID 身份验证的 Microsoft Entra ID 用户:
$passwordProfile = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile $passwordProfile.Password = 'Pa55w.rd1234' $passwordProfile.ForceChangePasswordNextLogin = $false New-AzureADUser -AccountEnabled $true -DisplayName 'aad_lab_user1' -PasswordProfile $passwordProfile -MailNickName 'aad_lab_user1' -UserPrincipalName "aad_lab_user1@$aadDomainName"
-
运行以下命令以标识新创建的 Microsoft Entra ID 用户的用户主体名称 (UPN):
(Get-AzureADUser -Filter "MailNickName eq 'aad_lab_user1'").UserPrincipalName
注意:记录 UPN。 你将在稍后的实验室中使用此值。
-
关闭 Cloud Shell 窗格。
审阅
在本练习中,你注册了单租户 Azure AD 应用程序,并创建了 Azure AD 用户帐户。
练习 2:创建单租户 ASP.NET Web 应用
任务 1:创建 ASP.NET Web 应用项目
-
在实验室计算机上,启动“命令提示符”。
-
在命令提示符下,运行以下命令以创建当前目录并将其设置为 Allfiles (F):\Allfiles\Labs\06\Starter\OIDCClient:
F: cd F:\Allfiles\Labs\06\Starter\OIDCClient
-
运行以下命令,根据模型视图控制器 (MVC) 模板创建新的 .NET Core Web 应用(将占位符
<application_ID>
、<tenant_ID>
和<domain_Name>
替换为之前在本实验中记录的相应值):dotnet new mvc --auth SingleOrg --client-id <application_ID> --tenant-id <tenant_ID> --domain <domain_Name> rmdir .\obj /S /Q
备注:如果在终端中收到错误,可能是因为使用了 PowerShell。 在这种情况下,请删除
/S /Q
标志并重新运行命令。 -
运行以下命令来启动 Visual Studio Code。
code .
如果出现“是否信任此文件夹中的文件作者”提示,请选择“是,我信任此作者” 。
-
在“Visual Studio Code 资源管理器”窗格中,查看表示 MVC Web 应用的自动生成的文件夹结构。
-
导航到 Properties 文件夹,打开 launchSettings.json 文件,然后应用以下更改:
部分 属性 值 iisSettings sslPort 44321 https applicationUrl https://localhost:5001
注意:端口号必须与创建 Microsoft Entra ID 应用注册时指定的值匹配。
-
保存并关闭该文件。
-
在“Visual Studio Code 资源管理器”窗格中,选择“OIDCClient.csproj”。
-
确保将
<TargetFramework>
元素的值设置为“net8.0”**。 -
确保
Microsoft.AspNetCore.Authentication.JwtBearer
和Microsoft.AspNetCore.Authentication.OpenIdConnect
NuGet 包的版本设置为“8.0.0”。** -
验证 OIDCClient.csproj 文件的内容是否与以下列表(
UserSecretsId
的值不同)类似,然后保存更改。<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <UserSecretsId>aspnet-OIDCClient-5249f5b2-6266-4a13-b8b4-e79c6443aabc</UserSecretsId> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.0-rc.2.23480.2" NoWarn="NU1605" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="8.0.0-rc.2.23480.2" NoWarn="NU1605" /> <PackageReference Include="Microsoft.Identity.Web" Version="2.13.0" /> <PackageReference Include="Microsoft.Identity.Web.UI" Version="2.13.0" /> <PackageReference Include="Microsoft.Identity.Web.DownstreamApi" Version="2.13.0" /> </ItemGroup> </Project>
-
关闭 OIDCClient.csproj 文件。
-
导航到 Views\Shared 文件夹,然后打开 _LoginPartial.cshtml 文件。
-
验证每个 span 元素中的
asp-area
属性是否引用MicrosoftIdentity
,如以下行所示:<a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
-
关闭文件,而不进行任何更改。
-
打开根文件夹中的文件 appsettings.json** 并查看 AzureAd** 对象的内容,包括以下元素:
元素 值 Instance
https://login.microsoftonline.com/
Domain
与你的 Azure 订阅关联的 Azure AD 租户的主 DNS 域 TenantId
Azure AD 租户的 GUID ClientId
Azure AD 租户中注册的应用程序的应用程序(客户端)ID CallbackPath
/signin-oidc
-
关闭文件,而不进行任何更改。
-
在“Visual Studio Code 资源管理器”窗格中,选择“Program.cs”。
-
验证文件是否包含以下 using 指令:
using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.Identity.Web; using Microsoft.Identity.Web.UI;
-
验证该文件是否包含将相关身份验证服务添加到容器的以下行:
// Add services to the container. builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"));
-
验证该文件是否包含为帐户管理添加控制器和 Razor 页面的以下行:
builder.Services.AddRazorPages() .AddMicrosoftIdentityUI();
-
保存并关闭该文件。
任务 2:在单租户方案中测试单租户 Web 应用
-
在“Visual Studio Code”窗口的顶部菜单栏中,转到“终端”菜单,然后选择“新建终端” 。
-
在“终端”面板中,当前工作目录的当前路径应为 F:\Allfiles\Labs\06\Starter\OIDCClient 。 运行以下命令以生成 .NET Web 应用:
dotnet build
注意:如果出现任何生成错误,请查看 Allfiles (F):\Allfiles\Labs\06\Solution\OIDCClient 文件夹中的文件。 忽略所有警告消息。
-
运行以下命令以生成自签名证书,并将本地计算机配置为信任它:
dotnet dev-certs https --trust
-
如果系统提示你安装自动生成的证书,请选择“是”。
-
在终端提示符下,运行以下命令以运行 .NET Web 应用:
dotnet run
-
在 InPrivate 模式下启动 Microsoft Edge 浏览器,然后导航到
https://localhost:5001
URL。 -
如果出现“你的连接不是专用连接”消息,请选择“高级”,然后选择“继续转到 localhost (不安全)”链接。
-
在打开的浏览器窗口中,当出现提示时,请使用之前在本实验室中创建的 aad_lab_user1** Microsoft Entra ID 帐户的 UPN 并将 Pa55w.rd1234** 用作其密码进行身份验证。
注意:如果系统提示你使用“帮助我们保护帐户”窗口,请选择“立即跳过”。
注意:如果收到“需要管理员批准”消息,则需要使用具有提升权限的 Microsoft Entra ID 来完成此任务的其余部分。** 为此,请选择链接“已有管理员帐户?使用该帐户登录**”,使用管理员帐户登录,然后继续执行下一步。
-
浏览器窗口将自动打开“请求的权限”网页。
-
查看请求的权限,包括“查看你的基本个人资料”和“维护对已授予访问权限的数据的访问权限”。
-
选择“接受”。
-
查看浏览器显示的目标站点的“欢迎”** 主页,并验证 aad_user1** Microsoft Entra ID 帐户的 UPN 是否显示在浏览器窗口中。
-
在“欢迎”页上,选择“注销”。
-
当系统提示你选择要注销的帐户时,请选择 aad_lab_user1** Microsoft Entra ID 帐户。 你将被自动重定向到“已注销”页面。
-
关闭 Microsoft Edge 浏览器。
审阅
在本练习中,你实现了单租户 Web 应用,并在单租户 Microsoft Entra 环境中对其进行了测试。