快速入门:从 Java Web 应用登录用户并调用 Microsoft 图形 API

在本快速入门中,你将下载并运行代码示例,该示例演示 Java Web 应用程序如何登录用户并调用 Microsoft Graph API。 来自任何Microsoft Entra 组织的用户都可以登录到应用程序。

请参阅 示例的说明 以了解其工作原理。

先决条件

若要运行此示例,需要:

注册并下载快速入门应用

可通过两种方法启动快速入门应用程序:快速(选项 1)和手动(选项 2)。

选项 1:注册并自动配置应用,然后下载代码示例

  1. 至少以云应用程序管理员的身份转到 Microsoft Entra 管理中心 - 应用注册快速入门体验。
  2. 输入应用程序的名称,然后选择 注册
  3. 按照门户快速入门体验中的说明下载自动配置的应用程序代码。

选项 2:注册并手动配置应用程序和代码示例

步骤 1:注册应用程序

若要注册应用程序并手动向其添加应用的注册信息,请执行以下步骤:

  1. 以至少 云应用程序管理员身份登录到 Microsoft Entra 管理中心
  2. 如果你有权访问多个租户,请使用顶部菜单中的“设置”图标 ,通过“目录 + 订阅”菜单切换到你希望在其中注册应用程序的租户
  3. 浏览至“标识”>“应用程序”>“应用注册”,选择“新建注册”
  4. 输入应用程序的 名称,例如 java-webapp。 应用的用户可能会看到此名称。 稍后可以对其进行更改。
  5. 选择“注册”
  6. 概述 页上,记下 应用程序(客户端)ID目录(租户)ID。 稍后需要这些值。
  7. 管理下,选择 身份验证
  8. 选择,添加平台>Web
  9. 在“重定向 URI”部分中,输入 https://localhost:8443/msal4jsample/secure/aad
  10. 选择 配置
  11. 在“Web”部分的“重定向 URI”下,输入 https://localhost:8443/msal4jsample/graph/me 作为第二个重定向 URI。
  12. 在“管理”下,选择“证书和机密”。 在 客户端机密 部分中,选择 新客户端密码
  13. 输入密钥说明(例如,应用程序密钥),保留默认过期时间,然后选择 添加
  14. 记下客户端密码的值。 稍后需要用到它。

步骤 2:下载代码示例

下载代码示例

步骤 3:配置代码示例

  1. 将 zip 文件解压缩到本地文件夹。

  2. 自选。 如果使用集成开发环境,请在该环境中打开该示例。

  3. 打开 application.properties 文件。 可以在 src/main/resources/ 文件夹中找到它。 将字段 aad.clientIdaad.authorityaad.secretKey 中的值分别替换为应用程序 ID、租户 ID 和客户端机密值。 下面是结果的大致形式:

     aad.clientId=Enter_the_Application_Id_here
     aad.authority=https://login.microsoftonline.com/Enter_the_Tenant_Info_Here/
     aad.secretKey=Enter_the_Client_Secret_Here
     aad.redirectUriSignin=https://localhost:8443/msal4jsample/secure/aad
     aad.redirectUriGraph=https://localhost:8443/msal4jsample/graph/me
     aad.msGraphEndpointHost="https://graph.microsoft.com/"
    

在前面的代码中:

  • Enter_the_Application_Id_here 是已注册的应用程序的应用程序 ID。
  • Enter_the_Client_Secret_Here 是你在“证书和机密”中为注册的应用程序创建的客户端机密
  • Enter_the_Tenant_Info_Here 是注册的应用程序的目录(租户)ID 值
  1. 若要将 HTTPS 与 localhost 配合使用,请提供 server.ssl.key 属性。 若要生成自签名证书,请使用 keytool 实用工具(包含在 JRE 中)。

下面是一个示例:

keytool -genkeypair -alias testCert -keyalg RSA -storetype PKCS12 -keystore keystore.p12 -storepass password

server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=password
server.ssl.key-alias=testCert
  1. 将生成的密钥存储文件放在 资源 文件夹中。

步骤 4:运行代码示例

若要运行项目,请执行以下步骤之一:

  • 使用嵌入式 Spring Boot 服务器直接从 IDE 运行它。
  • 使用 Maven将其打包到 WAR 文件,然后将其部署到 J2EE 容器解决方案,例如 Apache Tomcat
从 IDE 运行项目

若要从 IDE 运行 Web 应用程序,请选择“运行”,然后转到项目的主页。 对于本示例,标准主页 URL 为 https://localhost:8443.

  1. 在头页上,选择 登录 按钮,将用户重定向到Microsoft Entra ID,并提示他们输入凭据。

  2. 用户进行身份验证后,会重定向到 https://localhost:8443/msal4jsample/secure/aad。 他们现在已登录,页面将显示有关用户帐户的信息。 示例 UI 包含以下按钮:

    • 注销:将当前用户从应用程序注销,并将该用户重定向到主页。
    • 显示用户信息:获取 Microsoft Graph 的令牌,并使用包含令牌的请求调用 Microsoft Graph,该请求返回有关已登录用户的基本信息。
从 Tomcat 中运行项目

如果要将 Web 示例部署到 Tomcat,请对源代码进行几次更改。

  1. 打开 ms-identity-java-webapp/src/main/java/com.microsoft.azure.msalwebsample/MsalWebSampleApplication

    • 删除所有源代码并将其替换为以下代码:

       package com.microsoft.azure.msalwebsample;
      
       import org.springframework.boot.SpringApplication;
       import org.springframework.boot.autoconfigure.SpringBootApplication;
       import org.springframework.boot.builder.SpringApplicationBuilder;
       import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
      
       @SpringBootApplication
       public class MsalWebSampleApplication extends SpringBootServletInitializer {
      
        public static void main(String[] args) {
         SpringApplication.run(MsalWebSampleApplication.class, args);
        }
      
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
         return builder.sources(MsalWebSampleApplication.class);
        }
       }
      
  2. Tomcat 的默认 HTTP 端口为 8080,但需要通过端口 8443 建立 HTTPS 连接。 若要配置此设置,请执行以下操作:

    • 转到 tomcat/conf/server.xml

    • 搜索 <connector> 标记,并将现有连接器替换为以下连接器:

      <Connector
               protocol="org.apache.coyote.http11.Http11NioProtocol"
               port="8443" maxThreads="200"
               scheme="https" secure="true" SSLEnabled="true"
               keystoreFile="C:/Path/To/Keystore/File/keystore.p12" keystorePass="KeystorePassword"
               clientAuth="false" sslProtocol="TLS"/>
      
  3. 打开命令提示符窗口。 转到此示例的根文件夹(pom.xml 文件所在的位置),并运行 mvn package 来生成项目。

    • 此命令将在 /targets 目录中生成 msal-web-sample-0.1.0.war 文件。
    • 将此文件重命名为 msal4jsample.war
    • 使用 Tomcat 或任何其他 J2EE 容器解决方案部署 WAR 文件。
      • 若要部署 msal4jsample.war 文件,请将其复制到 Tomcat 安装中的 /webapps/ 目录,然后启动 Tomcat 服务器。
  4. 部署文件后,使用浏览器转到 https://localhost:8443/msal4jsample

重要

本快速入门应用程序使用客户端密码将自身标识为机密客户端。 由于客户端密码作为纯文本添加到项目文件,因此出于安全原因,我们建议在生产环境中使用应用程序之前使用证书而不是客户端密码。 有关如何使用证书的详细信息,请参阅 证书凭据进行应用程序身份验证

详细信息

示例的工作原理

示意图显示了此快速入门生成的示例应用程序的工作原理。

获取 MSAL

MSAL for Java(MSAL4J)是用于登录用户和请求令牌的 Java 库,用于访问受Microsoft标识平台保护的 API。

使用 Maven 或 Gradle 将 MSAL4J 添加到应用程序以管理依赖项,方法是对应用程序的 pom.xml(Maven)或 build.gradle(Gradle)文件进行以下更改。

在 pom.xml 中:

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>msal4j</artifactId>
    <version>1.0.0</version>
</dependency>

在 build.gradle 中:

compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.0.0'

初始化 MSAL

通过将以下代码添加到要在其中使用 MSAL4J 的文件的开头,来添加对 MSAL for Java 的引用:

import com.microsoft.aad.msal4j.*;

帮助和支持

如果需要帮助、想要报告问题或想要了解支持选项,请参阅 帮助和支持开发人员

后续步骤

有关在 Microsoft 身份平台上构建用户登录的 Web 应用的更深入讨论,请参阅多部分方案系列: