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

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

Spring Web 应用的Microsoft Entra登录页的屏幕截图。

先决条件

若要完成本文中的步骤,需要满足以下先决条件:

重要

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

使用 Spring Initializr 创建应用

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

  2. 指定要生成具有JavaMaven 项目。 输入应用程序的 项目 名称。

  3. Spring WebOAuth2 客户端添加依赖项

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

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

添加Microsoft Entra 依赖项

  1. 将下载的项目文件解压缩到本地计算机上的目录。

  2. 在文本编辑器中打开 pom.xml 文件。

  3. 将 Spring Cloud Azure材料清单(BOM)添加到该<dependencyManagement>部分。

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>7.4.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    
  4. 将 Spring Cloud Azure Starter Microsoft Entra依赖项添加到<dependencies>该部分。

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
    </dependency>
    
  5. 保存并关闭 pom.xml 文件。

创建 Microsoft Entra 实例

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

  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 令牌(用于隐式和混合流),然后选择“保存”。

添加用户帐户并分配Microsoft Entra应用角色

  1. 在Microsoft Entra ID 租户的“ 概述 ”页中,选择“ 用户”,然后选择“ 新建用户”。

  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 Microsoft Entra ID tenant 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 包含前面提到的 Microsoft Entra ID 租户的 租户 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初学者、配置新的Microsoft Entra租户、在租户中注册新应用程序,然后将应用程序配置为使用 Spring 批注和类来保护 Web 应用,从而创建新的Java Web 应用程序。

另请参阅

后续步骤

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