快速入门:从 Java Web 应用将用户登录并调用 Microsoft Graph API
在本快速入门中,你将下载并运行一个代码示例,该示例演示 Java Web 应用程序如何让用户登录并调用 Microsoft Graph API。 任何 Microsoft Entra 组织中的用户都可以登录到该应用程序。
有关说明,请参阅示例工作原理。
先决条件
若要运行此示例,需要:
- Java 开发工具包 (JDK) 8 或更高版本。
- Maven。
注册并下载快速入门应用
提示
本文中的步骤可能因开始使用的门户而略有不同。
可以通过两种方式来启动快速入门应用程序:“快速”(选项 1)和“手动”(选项 2)。
选项 1:注册并自动配置应用,然后下载代码示例
- 至少以云应用程序管理员的身份转到 Microsoft Entra 管理中心 - 应用注册快速入门体验。
- 输入应用程序的名称并选择“注册”。
- 按照门户快速入门体验中的说明下载自动配置的应用程序代码。
选项 2:注册并手动配置应用程序和代码示例
步骤 1:注册应用程序
若要注册应用程序并手动向其中添加应用的注册信息,请执行以下步骤:
- 至少以云应用程序管理员身份登录到 Microsoft Entra 管理中心。
- 如果你有权访问多个租户,请使用顶部菜单中的“设置”图标 ,通过“目录 + 订阅”菜单切换到你希望在其中注册应用程序的租户。
- 浏览至“标识”>“应用程序”>“应用注册”,选择“新建注册”。
- 输入应用程序的名称(例如 java-webapp) 。 应用的用户可能会看到此名称。 稍后可对其进行更改。
- 选择“注册”。
- 在“概述”页面上,记下“应用程序(客户端) ID”和“目录(租户) ID” 。 在后面的步骤中会用到这些值。
- 在“管理”下,选择“身份验证”。
- 选择“添加平台”>“Web” 。
- 在“重定向 URI”部分中,输入
https://localhost:8443/msal4jsample/secure/aad
。 - 选择“配置” 。
- 在“Web”部分的“重定向 URI”下,输入
https://localhost:8443/msal4jsample/graph/me
作为第二个重定向 URI 。 - 在“管理”下,选择“证书和机密”。 在“客户端密码”部分中,选择“新建客户端密码” 。
- 输入密钥说明(例如应用机密),保留默认的到期日期,然后选择“添加”。
- 记下客户端密码的值。 稍后需要用到此信息。
步骤 2:下载代码示例
步骤 3:配置代码示例
将 zip 文件解压缩到某个本地文件夹。
可选。 如果使用集成开发环境,请在该环境中打开示例。
打开 application.properties 文件。 可以在 src/main/resources/ 文件夹中找到它。 将字段
aad.clientId
、aad.authority
和aad.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 值。
- 若要将 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
- 将生成的 keystore 文件放在“resources”文件夹中。
步骤 4:运行代码示例
若要运行项目,请执行以下步骤之一:
- 使用嵌入式 Spring Boot 服务器直接从 IDE 运行它。
- 使用 Maven 将其打包为 WAR 文件,然后将其部署到 J2EE 容器解决方案,如 Apache Tomcat。
从 IDE 中运行项目
若要从 IDE 运行 Web 应用,请选择“运行”,然后转到项目的主页。 对于本示例,标准主页 URL 为 https://localhost:8443.
在首页上选择“登录”按钮,将用户重定向到 Microsoft Entra ID 并提示他们输入凭据。
用户经过身份验证后,会被重定向到
https://localhost:8443/msal4jsample/secure/aad
。 他们现在已登录,页面将显示有关用户帐户的信息。 示例 UI 包含以下按钮:- 注销:从应用程序中注销当前用户,并将该用户重定向到主页。
- 显示用户信息:获取 Microsoft Graph 的令牌,并使用包含该令牌的请求调用 Microsoft Graph,这将返回有关已登录用户的基本信息。
从 Tomcat 中运行项目
若要将 Web 示例部署到 Tomcat,请对源代码进行一些更改。
打开 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); } }
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"/>
打开命令提示符窗口。 转到此示例的根文件夹(可在这里找到
pom.xml
),然后运行mvn package
来生成项目。- 此命令会在
/targets
目录中生成一个msal-web-sample-0.1.0.war
文件。 - 将此文件重命名为
msal4jsample.war
。 - 使用 Tomcat 或任何其他 J2EE 容器解决方案部署 WAR 文件。
- 若要部署
msal4jsample.war
文件,请将其复制到 Tomcat 安装中的/webapps/
目录,然后启动 Tomcat 服务器。
- 若要部署
- 此命令会在
部署完文件后,使用浏览器转到
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 应用,请参阅多部分方案系列: