实验室 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 是否可保护该应用程序。

体系结构关系图

描述用户使用 OpenID Connect、MSAL 和 .NET SDK 进行身份验证的体系结构关系图。

练习 1:配置单租户 Entra ID 环境

任务 1:打开 Azure 门户

  1. 在任务栏上,选择 Microsoft Edge 图标。

  2. 在打开的浏览器窗口中,浏览到 Azure 门户 (https://portal.azure.com),然后使用你将用于此实验室的帐户登录。

    注意:第一次登录 Azure 门户时,你会看到一个门户教程。 选择“开始使用”,以跳过导览并开始使用门户。

任务 2:在 Entra ID 目录中注册应用程序

  1. 在 Azure 门户中,使用“搜索资源、服务和文档”** 文本框搜索“Entra ID”,然后在结果列表中,选择“Microsoft Entra ID”**。

    备注:这会将浏览器会话重定向到与你的 Azure 订阅关联的 Microsoft Entra ID 租户的边栏选项卡。

  2. 在“Microsoft Entra ID” ** 边栏选项卡上,选择“管理”** 部分中的“应用注册”**

  3. 在“应用注册”部分中,选择“+ 新建注册”。

  4. 在“注册应用程序”部分中,执行以下操作,然后选择“注册”:

    设置 操作
    “名称”文本框 输入“webappoidc”
    “支持的帐户类型”列表 选择“仅限此组织目录中的帐户(仅限默认目录 - 单个租户)”

    注意:租户的名称可能因 Azure 订阅而异。

    以下屏幕截图显示了“注册应用程序”部分中配置的设置。

    显示配置为注册应用程序的选项的屏幕截图。

任务 3:记录唯一标识符

  1. 在“webappoidc”应用程序注册边栏选项卡上,选择“概述”。

  2. 在“概述”部分,找到并记录“应用程序(客户端) ID”文本框的值 。 你将在稍后的实验室中使用此值。

  3. 在“概述”部分,找到并记录“目录(租户) ID”文本框的值 。 你将在稍后的实验室中使用此值。

任务 4:配置应用程序身份验证设置

  1. 在“webappoidc”应用程序注册边栏选项卡上的“管理”部分中,选择“身份验证”。

  2. 在“身份验证”部分中,执行以下操作,然后选择“配置”:

    设置 操作
    “平台配置”部分 选择“+ 添加平台”
    “配置平台”边栏选项卡 选择“Web”
    “重定向 URI”文本框 输入 https://localhost:5001/
    “前通道注销 URL”文本框 输入 https://localhost:5001/signout-oidc
  3. 返回“平台配置”部分,选择“添加 URI”,然后输入 https://localhost:5001/signin-oidc

  4. 在“隐式授权和混合流”部分中,选择“ID 令牌(用于隐式流和混合流)”。

  5. 选择“保存”。

    以下屏幕截图显示了“身份验证”边栏选项卡上配置的设置。

    显示“身份验证”边栏选项卡上配置的选项的屏幕截图。

任务 5:创建 Microsoft Entra ID 用户

  1. 在 Azure 门户中,选择“Cloud Shell”图标 Cloud Shell 图标 打开 Cloud Shell**。 如果 Cloud Shell 默认为 Bash 会话,请在“Cloud Shell”菜单中选择“切换到 PowerShell”,然后选择“确认”****

    注意:“Cloud Shell”图标使用大于符号 (>) 和下划线字符 (_) 表示。

    如果这是首次启动 Cloud Shell,将看到“入门”提示。 选择“不需要存储帐户”,然后选择“应用”。

  2. 在“Cloud Shell”** 窗格中,运行以下命令以登录到与 Azure 订阅关联的 Microsoft Entra 租户:

     Connect-AzureAD
    
  3. 运行以下命令以检索和显示 Microsoft Entra 租户的主域名系统 (DNS) 域名:

     $aadDomainName = ((Get-AzureAdTenantDetail).VerifiedDomains)[0].Name
     $aadDomainName
    

    注意:记录 DNS 域名的值。 你将在稍后的实验室中使用此值。

  4. 运行以下命令以创建用于测试 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" 
    
  5. 运行以下命令以标识新创建的 Microsoft Entra ID 用户的用户主体名称 (UPN):

     (Get-AzureADUser -Filter "MailNickName eq 'aad_lab_user1'").UserPrincipalName
    

    注意:记录 UPN。 你将在稍后的实验室中使用此值。

  6. 关闭 Cloud Shell 窗格。

审阅

在本练习中,你注册了单租户 Azure AD 应用程序,并创建了 Azure AD 用户帐户。

练习 2:创建单租户 ASP.NET Web 应用

任务 1:创建 ASP.NET Web 应用项目

  1. 在实验室计算机上,启动“命令提示符”。

  2. 在命令提示符下,运行以下命令以创建当前目录并将其设置为 Allfiles (F):\Allfiles\Labs\06\Starter\OIDCClient:

     F:
     cd F:\Allfiles\Labs\06\Starter\OIDCClient
    
  3. 运行以下命令,根据模型视图控制器 (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 标志并重新运行命令。

  4. 运行以下命令来启动 Visual Studio Code。

     code .
    

    如果出现“是否信任此文件夹中的文件作者”提示,请选择“是,我信任此作者” 。

  5. 在“Visual Studio Code 资源管理器”窗格中,查看表示 MVC Web 应用的自动生成的文件夹结构。

  6. 导航到 Properties 文件夹,打开 launchSettings.json 文件,然后应用以下更改:

    部分 属性
    iisSettings sslPort 44321
    https applicationUrl https://localhost:5001

    注意:端口号必须与创建 Microsoft Entra ID 应用注册时指定的值匹配。

  7. 保存并关闭该文件。

  8. 在“Visual Studio Code 资源管理器”窗格中,选择“OIDCClient.csproj”。

  9. 确保将 <TargetFramework> 元素的值设置为“net8.0”**

  10. 确保 Microsoft.AspNetCore.Authentication.JwtBearerMicrosoft.AspNetCore.Authentication.OpenIdConnect NuGet 包的版本设置为“8.0.0”。**

  11. 验证 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>
    
  12. 关闭 OIDCClient.csproj 文件。

  13. 导航到 Views\Shared 文件夹,然后打开 _LoginPartial.cshtml 文件。

  14. 验证每个 span 元素中的 asp-area 属性是否引用 MicrosoftIdentity,如以下行所示:

     <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
    
  15. 关闭文件,而不进行任何更改。

  16. 打开根文件夹中的文件 appsettings.json** 并查看 AzureAd** 对象的内容,包括以下元素:

    元素
    Instance https://login.microsoftonline.com/
    Domain 与你的 Azure 订阅关联的 Azure AD 租户的主 DNS 域
    TenantId Azure AD 租户的 GUID
    ClientId Azure AD 租户中注册的应用程序的应用程序(客户端)ID
    CallbackPath /signin-oidc
  17. 关闭文件,而不进行任何更改。

  18. 在“Visual Studio Code 资源管理器”窗格中,选择“Program.cs”。

  19. 验证文件是否包含以下 using 指令:

     using Microsoft.AspNetCore.Authentication.OpenIdConnect;
     using Microsoft.Identity.Web;
     using Microsoft.Identity.Web.UI;
    
  20. 验证该文件是否包含将相关身份验证服务添加到容器的以下行:

     // Add services to the container.
     builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
       .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"));
    
  21. 验证该文件是否包含为帐户管理添加控制器和 Razor 页面的以下行:

     builder.Services.AddRazorPages()
       .AddMicrosoftIdentityUI();
    
  22. 保存并关闭该文件。

任务 2:在单租户方案中测试单租户 Web 应用

  1. 在“Visual Studio Code”窗口的顶部菜单栏中,转到“终端”菜单,然后选择“新建终端” 。

  2. 在“终端”面板中,当前工作目录的当前路径应为 F:\Allfiles\Labs\06\Starter\OIDCClient 。 运行以下命令以生成 .NET Web 应用:

     dotnet build
    

    注意:如果出现任何生成错误,请查看 Allfiles (F):\Allfiles\Labs\06\Solution\OIDCClient 文件夹中的文件。 忽略所有警告消息。

  3. 运行以下命令以生成自签名证书,并将本地计算机配置为信任它:

     dotnet dev-certs https --trust
    
  4. 如果系统提示你安装自动生成的证书,请选择“是”。

  5. 在终端提示符下,运行以下命令以运行 .NET Web 应用:

     dotnet run
    
  6. 在 InPrivate 模式下启动 Microsoft Edge 浏览器,然后导航到 https://localhost:5001 URL。

  7. 如果出现“你的连接不是专用连接”消息,请选择“高级”,然后选择“继续转到 localhost (不安全)”链接。

  8. 在打开的浏览器窗口中,当出现提示时,请使用之前在本实验室中创建的 aad_lab_user1** Microsoft Entra ID 帐户的 UPN 并将 Pa55w.rd1234** 用作其密码进行身份验证。

    注意:如果系统提示你使用“帮助我们保护帐户”窗口,请选择“立即跳过”。

    注意:如果收到“需要管理员批准”消息,则需要使用具有提升权限的 Microsoft Entra ID 来完成此任务的其余部分。** 为此,请选择链接“已有管理员帐户?使用该帐户登录**”,使用管理员帐户登录,然后继续执行下一步。

  9. 浏览器窗口将自动打开“请求的权限”网页。

  10. 查看请求的权限,包括“查看你的基本个人资料”和“维护对已授予访问权限的数据的访问权限”。

  11. 选择“接受”。

  12. 查看浏览器显示的目标站点的“欢迎”** 主页,并验证 aad_user1** Microsoft Entra ID 帐户的 UPN 是否显示在浏览器窗口中。

  13. 在“欢迎”页上,选择“注销”。

  14. 当系统提示你选择要注销的帐户时,请选择 aad_lab_user1** Microsoft Entra ID 帐户。 你将被自动重定向到“已注销”页面。

  15. 关闭 Microsoft Edge 浏览器。

审阅

在本练习中,你实现了单租户 Web 应用,并在单租户 Microsoft Entra 环境中对其进行了测试。