使用 Microsoft 身份验证库让用户登录

已完成

你已向 Microsoft Entra ID 注册了 Web 应用程序。 现在,可以添加验证码以在应用程序中让用户登录,并使用 SDK 为你处理身份验证细节。 在本单元中,你将了解适用于 Java 的 Microsoft 身份验证库 (MSAL4J) 及其对身份验证的帮助。

用于 Java 的 Microsoft 身份验证库

通过适用于 Java 的 Microsoft 身份验证库 (MSAL4J),应用程序能够使用 Microsoft 标识(Microsoft Entra ID、Microsoft 帐户和 Azure Active Directory B2C 帐户)让用户或应用登录,并获取令牌以调用 Microsoft API 或已向 Microsoft Entra ID 注册的自己的 API。 它是使用行业标准 OAuth2 和 OpenID Connect 协议构建的。

该库提供了方便的 API,可为不同类型的 Microsoft Entra ID 启用身份验证:

  • Web 应用程序
  • 守护程序服务
  • 命令行应用程序
  • 桌面应用程序

初始化 MSAL 对象

若要开始使用 MSAL,需要在应用程序代码中初始化并配置 MSAL 对象。

MSAL 将客户端应用程序表示为公共客户端和机密客户端,其区别在于它们是否能够安全地通过授权服务器进行身份验证并维护其客户端凭据的机密性。

“机密客户端”应用程序是在服务器上运行的应用(Web 应用、Web API 应用,甚至服务/守护程序应用)。 机密客户端可以保存配置时应用程序机密。

你可以按如下方式创建机密客户端的实例:

IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);
ConfidentialClientApplication app = ConfidentialClientApplication
                                        .builder(CLIENT_ID, credential)
                                        .authority(AUTHORITY)
                                        .build();
  • CLIENT_ID:客户端 ID 是注册应用时由 Microsoft Entra ID 分配给应用的唯一应用程序(客户端)ID。
  • CLIENT_SECRET:机密客户端应用的客户端密钥,在注册应用时创建。
  • AUTHORITY:授权是一个 URL,指示 MSAL 可以从中请求令牌的目录。 它由应用的标识提供者实例和登录受众组成。

使用 MSAL 获取身份验证令牌

MSAL 提供的 acquireToken 方法可启动身份验证流程并返回一个包含身份验证令牌的 AuthenticationResult

用户完成登录后,身份验证结果中会返回一个 ID 令牌,其中包含一些基本的身份验证声明,例如用户主体名称、电子邮件等。

以下是使用 MSAL 获取令牌的示例:

final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
                                                    .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES))
                                                    .build();

final IAuthenticationResult result = app.acquireToken(authParams).get();
  • REDIRECT_URI:重定向 URI 是标识提供者向其发回安全令牌的 URI。 它必须与 Microsoft Entra 应用注册中的重定向 URI 匹配。
  • SCOPES:范围是应用程序所请求的权限。 通常,这三个范围 openid profile offline_access 足以接收用户登录的 ID 令牌响应,并且默认由 MSAL 设置。

在为用户启动登录流和调用 API 以访问数据时,请在应用程序中使用 acquireToken 方法。