使用 Microsoft Entra 帐户添加登录功能到 Spring Web 应用

本文介绍如何开发支持 Microsoft Entra 帐户登录的 Spring Web 应用。 完成本文中的所有步骤后,匿名访问 Microsoft Entra 登录页面时,Web 应用将重定向到此页面。 以下屏幕截图显示了 Microsoft Entra 登录页面:

“登录”对话框的应用程序屏幕截图。

先决条件

为完成本文介绍的步骤,需要满足以下先决条件:

重要

要完成本文中的步骤,需要 Spring Boot 版本 2.5 或更高版本。

使用 Spring Initializr 创建应用

  1. 浏览到 https://start.spring.io/

  2. 指定您希望生成一个具有 JavaMaven 项目,并输入应用程序的 GroupArtifact 名称。

  3. Spring WebMicrosoft Entra IDOAuth2 客户端添加依赖项

  4. 在页面底部,选择生成按钮。

  5. 出现提示时,将项目下载到本地计算机上的某个路径中。

创建 Microsoft Entra 实例

创建 Active Directory 实例

如果你是现有实例的管理员,则可以跳过该过程。

  1. 登录到 https://portal.azure.com

  2. 依次选择所有服务标识Microsoft Entra ID

  3. 输入组织名称初始域名。 复制目录的完整 URL。 在本教程中,你将使用 URL 来添加用户帐户。 (例如:azuresampledirectory.onmicrosoft.com。)

    复制目录的完整 URL。 在本教程中,你将使用 URL 来添加用户帐户。 (例如:azuresampledirectory.onmicrosoft.com。)。

    完成后,请选择创建。 创建新资源将需要几分钟时间。

  4. 完成后,选择显示的链接来访问新目录。

  5. 复制租户 ID。 稍后在本教程中,您将使用 ID 值来配置 application.properties 文件。

为 Spring Boot 应用添加应用程序注册

  1. 在门户菜单中,选择应用注册,然后选择注册应用程序

  2. 选择应用程序,然后选择注册

  3. 应用注册页面出现时,复制应用程序(客户端)ID目录(租户)ID。 在本教程的后面,你将使用这些值来配置 application.properties 文件。

  4. 在导航窗格中选择 证书 & 密钥。 然后,选择新建客户端机密

    突出显示“新客户端密码”的应用程序“证书和机密”屏幕的屏幕截图。

  5. 过期列表中添加说明并选择持续时间。 选择 添加。 密钥的值将自动填充。

  6. 复制并保存客户端密码的值以配置本教程后面的 application.properties 文件。 (稍后,你将无法检索此值。)

    突出显示了新客户端密钥的应用程序的屏幕截图。

  7. 在应用注册的主页中,选择身份验证,然后选择添加平台。 然后选择 Web 应用程序

  8. 对于新重定向 URI,请输入 http://localhost:8080/login/oauth2/code/,然后选择配置

  9. 如果你已将 pom.xml 文件修改为使用低于 3.0.0 的 Microsoft Entra 入门版本,请在隐式授权和混合流中选择 ID 令牌(用于隐式和混合流),然后选择保存

将用户帐户添加到目录,并将该帐户添加到 appRole 中

  1. 从 Active Directory 的概述页面中,选择用户,然后选择新建用户

  2. 显示用户面板时,输入用户名名称。 然后选择“创建”。

    “新建用户”对话框的屏幕截图。

    注意

    输入用户名时,你需要指定本教程前面部分中的目录 URL。 例如:

    test-user@azuresampledirectory.onmicrosoft.com

  3. 从应用注册的主页中,选择应用角色,然后选择创建应用角色。 为表单字段提供值,选择要启用此应用角色吗?,然后选择应用

    显示“创建应用程序角色”窗格的应用程序“应用角色”屏幕的屏幕截图。

  4. 从 Microsoft Entra 目录的概述页中,选择企业应用程序

  5. 选择 所有应用程序,然后选择你在上一步中添加了应用角色的那个应用程序。

  6. 选择用户和组,然后选择添加用户/组

  7. 用户下,单击未选择。 选择以前创建的用户,选择选择,然后选择分配。 如果以前创建了多个应用角色,请选择一个角色。

  8. 返回到用户面板,选择你的测试用户,再选择重置密码,然后复制密码。 在本教程后面登录到应用程序时,你将使用此密码。

配置和编译你的应用

  1. 从本教程前面创建和下载的项目存档中将文件提取到目录中。

  2. 导航项目中的 src/main/resources 文件夹,然后在文本编辑器中打开 application.properties 文件。

  3. 使用前面创建的值指定应用注册的设置。 例如:

    # Enable related features.
    spring.cloud.azure.active-directory.enabled=true
    # Specifies your Active Directory ID:
    spring.cloud.azure.active-directory.profile.tenant-id=<tenant-ID>
    # Specifies your App Registration's Application ID:
    spring.cloud.azure.active-directory.credential.client-id=<client-ID>
    # Specifies your App Registration's secret key:
    spring.cloud.azure.active-directory.credential.client-secret=<client-secret>
    

    其中:

    参数 说明
    spring.cloud.azure.active-directory.enabled 启用 spring-cloud-azure-starter-active-directory 提供的功能
    spring.cloud.azure.active-directory.profile.tenant-id 包含之前的 Active Directory 的目录 ID
    spring.cloud.azure.active-directory.credential.client-id 包含你之前完成的应用注册中的应用程序 ID
    spring.cloud.azure.active-directory.credential.client-secret 包含你之前完成的应用注册密钥中的
  4. 保存并关闭 application.properties 文件。

  5. 在应用程序的 Java 源文件夹中创建一个名为控制器的文件夹。 例如:src/main/java/com/wingtiptoys/security/controller

  6. 控制器文件夹中创建一个名为 HelloController.java 的新 Java 文件,并在文本编辑器中打开它。

  7. 输入以下代码,然后保存并关闭此文件:

    package com.wingtiptoys.security;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.security.access.prepost.PreAuthorize;
    
    @RestController
    public class HelloController {
         @GetMapping("Admin")
         @ResponseBody
         @PreAuthorize("hasAuthority('APPROLE_Admin')")
         public String Admin() {
             return "Admin message";
         }
    }
    

生成并测试你的应用

  1. 打开命令提示符并将目录更改为应用 pom.xml 文件所在的文件夹。

  2. 使用 Maven 生成 Spring Boot 应用程序,然后运行该程序。 例如:

    mvn clean package
    mvn spring-boot:run
    
  3. 在 Maven 生成并启动你的应用程序后,在 Web 浏览器中打开 http://localhost:8080/Admin。 系统应该会提示你输入用户名和密码。

    “登录”对话框的应用程序屏幕截图。

    注意

    如果这是新用户帐户的第一次登录,则系统可能会提示你更改密码。

    应用程序“更新你的密码”对话框的屏幕截图。

  4. 成功登录后,你应该会看到控制器中的示例“管理员消息”文本。

    应用程序管理员消息的屏幕截图。

总结

在本教程中,你使用 Microsoft Entra 启动器创建了一个新 Java Web 应用程序,配置了新的 Microsoft Entra 租户,在租户中注册了一个新应用程序,然后将应用程序配置为使用 Spring 批注和类来保护 Web 应用。

另请参阅

后续步骤

若要了解有关 Spring 和 Azure 的详细信息,请继续访问“Azure 上的 Spring”文档中心。