65.9K
CodeProject 正在变化。 阅读更多。
Home

Azure 上的 Java:云原生身份验证

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2021年5月6日

CPOL

3分钟阅读

viewsIcon

3558

在本系列的下一部分中,我们将探讨您的应用程序如何知道它正在被使用。我们还将探讨 Azure 如何通过其服务和免费代码库为用户进行身份验证提供支持。

API 常常需要识别其调用者。它可以是调用 API 的 Web 应用程序,也可以是调用 API 的另一个 API。识别 API 的调用者也称为身份验证。构建自己的身份验证框架可能很棘手。值得庆幸的是,您不必构建自己的身份验证框架。已经有可用的解决方案。 Azure Active Directory (Azure AD) 和 Microsoft 身份验证库 (MSAL) 适用于各种平台,用于处理令牌和身份验证。

Azure AD 提供了一种方式,用户可以使用组织提供的现有凭据登录到应用程序,而不是为每个应用程序创建一个新的登录。使用 Azure AD 可以使您的应用程序免于与用户维护相关的许多任务,例如登录和密码重置。OAuth 流程验证用户,然后暂时将用户交给另一个页面进行登录。登录后,该页面会将访问令牌传递回应用程序。应用程序可以使用访问令牌检索有关当前用户的更多信息。

创建租户

要开始使用 Azure AD,您需要访问 Azure AD 租户。租户代表一个组织。您可能已经为您的帐户设置了一个租户。要检查,请登录 Azure 门户,然后在右上角查看。如果您的帐户已设置为租户,它会显示在您的用户名下。

如果您还没有 Azure AD 租户,可以创建一个。在 Azure 门户中,选择“Azure Active Directory”。从顶部的菜单中,选择“创建租户”。

选择“Azure Active Directory”作为租户类型,然后单击下一步。填写您的组织信息并继续创建租户。

拥有租户后,您必须将您的应用程序注册为 Azure AD 的客户端。在门户中,选择“Azure Active Directory”。在“管理”菜单下,选择“应用注册”,然后单击+新建注册。

为应用程序提供一个用户将识别的名称,并确保您已从“支持的帐户类型”选项中选择了您的租户。单击注册以创建您的租户。

将其添加到应用程序

现在您已经设置了一个租户,适用于 Java 的 Microsoft 身份验证库 (MSAL4J) 将管理身份验证。您可以通过将依赖项声明添加到项目的 Maven 存储库中,将 MSAL4J 添加到项目中。添加后,该库的类可以通过 com.microsoft.azure.msal4j 命名空间获得。

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

MSAL4J 支持不同的身份验证场景。两个常见的场景是

  • 用户必须使用应用程序进行身份验证。
  • 服务必须使用应用程序进行身份验证。

当用户必须进行身份验证时,您可以使用 OAuth。OAuth 是一种开放标准,它使一个网站或服务可以为另一个网站或服务执行身份验证,而无需共享用户的凭据。应用程序将用户转发到登录页面,用户使用他们的帐户凭据登录。身份验证后,该页面会将用户发送回应用程序,并向应用程序提供用户的身份验证令牌。应用程序使用身份验证令牌来检索访问令牌。 MSAL4J 简化了检索令牌的过程。在我们的应用程序中,添加以下代码以检索访问令牌。

  //ConfidentialClientApplication app; 
  String authCode = authorizationCode.getValue(); 
  AuthorizationCodeParameters parameters = AuthorizationCodeParameters.builder( 
          authCode, 
    	  new URI(currentUri)). 
          build(); 
  IAuthenticationResult result  = app.acquireToken(parameters).get(); 
  SessionManagementHelper.storeTokenCacheInSession(httpServletRequest,
  app.tokenCache().serialize());

对于需要身份验证的 Web 调用,将访问令牌添加到调用的标头中。Azure AD 还提供了一个端点,该端点在使用访问令牌调用时提供有关用户的信息,以 JSON 对象的形式。

 HttpURLConnection connection = (HttpURLConnection) MSGraphEndpoint; 
  connection.setRequestProperty("Authorization", "Bearer " + accessToken); 
  connection.setRequestProperty("Accept", "application/json"); 
  String response = HttpClientHelper.getResponseStringFromConn(connection); 
 
  int responseCode = conn.getResponseCode(); 
  if(responseCode != HttpURLConnection.HTTP_OK) { 
       throw new IOException(response); 
  } 
  JSONObject userInformation  = HttpClientHelper.processResponse(responseCode,
  response);

尝试自己运行应用程序。当您运行应用程序时,它现在将检查用户是否已登录。如果用户未登录,用户会看到一个指向登录页面的链接。用户登录后,页面会显示一条消息,表明用户已成功登录并显示基本信息。

结论

Azure 提供了其他功能,您可以使用这些功能来丰富应用程序的功能。在本系列的 下一部分 中,我们将研究 Azure 认知服务,以及如何使用现有的云原生服务。

© . All rights reserved.