使用 Microsoft Entra 帐户添加登录功能到 Spring Web 应用
本文介绍如何开发支持 Microsoft Entra 帐户登录的 Spring Web 应用。 完成本文中的所有步骤后,匿名访问 Microsoft Entra 登录页面时,Web 应用将重定向到此页面。 以下屏幕截图显示了 Microsoft Entra 登录页面:
先决条件
为完成本文介绍的步骤,需要满足以下先决条件:
- 一个受支持的 Java 开发工具包 (JDK)。 有关在 Azure 上进行开发时可供使用的 JDK 的详细信息,请参阅 Azure 和 Azure Stack 上的 Java 支持。
- Apache Maven 版本 3.0 或更高版本。
- Azure 订阅。 如果没有 Azure 订阅,可以创建一个免费帐户。
重要
要完成本文中的步骤,需要 Spring Boot 版本 2.5 或更高版本。
使用 Spring Initializr 创建应用
指定您希望生成一个具有 Java的 Maven 项目,并输入应用程序的 Group 和 Artifact 名称。
为 Spring Web、Microsoft Entra ID 和 OAuth2 客户端添加依赖项。
在页面底部,选择生成按钮。
出现提示时,将项目下载到本地计算机上的某个路径中。
创建 Microsoft Entra 实例
创建 Active Directory 实例
如果你是现有实例的管理员,则可以跳过该过程。
依次选择所有服务、标识、Microsoft Entra ID。
输入组织名称和初始域名。 复制目录的完整 URL。 在本教程中,你将使用 URL 来添加用户帐户。 (例如:
azuresampledirectory.onmicrosoft.com
。)复制目录的完整 URL。 在本教程中,你将使用 URL 来添加用户帐户。 (例如:
azuresampledirectory.onmicrosoft.com
。)。完成后,请选择创建。 创建新资源将需要几分钟时间。
完成后,选择显示的链接来访问新目录。
复制租户 ID。 稍后在本教程中,您将使用 ID 值来配置 application.properties 文件。
为 Spring Boot 应用添加应用程序注册
在门户菜单中,选择应用注册,然后选择注册应用程序。
选择应用程序,然后选择注册。
应用注册页面出现时,复制应用程序(客户端)ID 和目录(租户)ID。 在本教程的后面,你将使用这些值来配置 application.properties 文件。
在导航窗格中选择 证书 & 密钥。 然后,选择新建客户端机密。
在过期列表中添加说明并选择持续时间。 选择 添加。 密钥的值将自动填充。
复制并保存客户端密码的值以配置本教程后面的 application.properties 文件。 (稍后,你将无法检索此值。)
在应用注册的主页中,选择身份验证,然后选择添加平台。 然后选择 Web 应用程序。
对于新重定向 URI,请输入
http://localhost:8080/login/oauth2/code/
,然后选择配置。如果你已将 pom.xml 文件修改为使用低于 3.0.0 的 Microsoft Entra 入门版本,请在隐式授权和混合流中选择 ID 令牌(用于隐式和混合流),然后选择保存。
将用户帐户添加到目录,并将该帐户添加到 appRole 中
从 Active Directory 的概述页面中,选择用户,然后选择新建用户。
显示用户面板时,输入用户名和名称。 然后选择“创建”。
注意
输入用户名时,你需要指定本教程前面部分中的目录 URL。 例如:
test-user@azuresampledirectory.onmicrosoft.com
从应用注册的主页中,选择应用角色,然后选择创建应用角色。 为表单字段提供值,选择要启用此应用角色吗?,然后选择应用。
从 Microsoft Entra 目录的概述页中,选择企业应用程序。
选择 所有应用程序,然后选择你在上一步中添加了应用角色的那个应用程序。
选择用户和组,然后选择添加用户/组。
在用户下,单击未选择。 选择以前创建的用户,选择选择,然后选择分配。 如果以前创建了多个应用角色,请选择一个角色。
返回到用户面板,选择你的测试用户,再选择重置密码,然后复制密码。 在本教程后面登录到应用程序时,你将使用此密码。
配置和编译你的应用
从本教程前面创建和下载的项目存档中将文件提取到目录中。
导航项目中的 src/main/resources 文件夹,然后在文本编辑器中打开 application.properties 文件。
使用前面创建的值指定应用注册的设置。 例如:
# 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
包含你之前完成的应用注册密钥中的值。 保存并关闭 application.properties 文件。
在应用程序的 Java 源文件夹中创建一个名为控制器的文件夹。 例如:src/main/java/com/wingtiptoys/security/controller。
在控制器文件夹中创建一个名为 HelloController.java 的新 Java 文件,并在文本编辑器中打开它。
输入以下代码,然后保存并关闭此文件:
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"; } }
生成并测试你的应用
打开命令提示符并将目录更改为应用 pom.xml 文件所在的文件夹。
使用 Maven 生成 Spring Boot 应用程序,然后运行该程序。 例如:
mvn clean package mvn spring-boot:run
在 Maven 生成并启动你的应用程序后,在 Web 浏览器中打开
http://localhost:8080/Admin
。 系统应该会提示你输入用户名和密码。注意
如果这是新用户帐户的第一次登录,则系统可能会提示你更改密码。
成功登录后,你应该会看到控制器中的示例“管理员消息”文本。
总结
在本教程中,你使用 Microsoft Entra 启动器创建了一个新 Java Web 应用程序,配置了新的 Microsoft Entra 租户,在租户中注册了一个新应用程序,然后将应用程序配置为使用 Spring 批注和类来保护 Web 应用。
另请参阅
- 有关新 UI 选项的信息,请参阅新的 Azure 门户应用注册培训指南
后续步骤
若要了解有关 Spring 和 Azure 的详细信息,请继续访问“Azure 上的 Spring”文档中心。