【问题标题】:MSAL (Java) Rest API Authentication ( Authorization : Bearer Token )MSAL (Java) Rest API 身份验证(授权:承载令牌)
【发布时间】:2020-02-14 17:48:59
【问题描述】:

我想针对 Azure AD B2C 保护 Java Rest API。

我了解到调用者正在使用 Authorization 标头调用服务,其值如下:Bearer xxx-token

那是 ID 还是访问令牌?

服务应采取哪些步骤来确保这是一个有效的令牌?使用 MSAL4J 的 Java 代码将不胜感激。

【问题讨论】:

  • 访问令牌始终是您的 API 应该接收的令牌。 ID 令牌用于请求身份验证的应用程序。

标签: java azure-active-directory msal


【解决方案1】:

MSAL4J 用于获取令牌以便客户端可以访问受保护的资源,而不是用于验证 API 中的令牌。

您的 API 应该会在授权标头中接收访问令牌。 article 解释了访问令牌中可能包含哪些声明以及如何验证它们。

Microsoft 目前不提供用于此验证的 Java 库,但有许多第三方开源库提供此功能。例如,您可以使用jjwt

【讨论】:

  • 非常准确的答案,谢谢。请注意,对于 JWK 部分,您还需要另一个库,因为 jjwt 无法做到这一点,例如 auth0 jwks-rsa
  • @phil294 JJWT 应该能够处理它。这个问题我见多了,所以整理了一个简短的教程:sgonzal.com/2020/03/28/jwt-validation.html
  • 不错的文章,对以后的人有帮助。 “jjwt cant do [jwk]”是指密钥查找本身,因此您不必进行 url 获取。这有助于将代码简化为 this
  • 哦,是的,你是对的,JJWT 不处理获取密钥。
  • @sgonzalez 你的教程有机会再次公开吗?
【解决方案2】:

你见过这个MSAL4J B2C sample,它调用了一个受保护的web api吗?

示例中的

Here 是它包含访问令牌的位置,从用户登录时开始,并将其作为不记名令牌附加到标头。然后中间件库,例如 Spring Security for java,将验证令牌。

private String callB2CApi(String accessToken){
   RestTemplate restTemplate = new RestTemplate();

   HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        headers.set("Authorization", "Bearer " + accessToken);

    HttpEntity<String> entity = new HttpEntity<>(null, headers);

    String result = restTemplate.exchange(authHelper.configuration.api, HttpMethod.GET,
                entity, String.class).getBody();

     return new Date() + result;
}

这里有更多 information on using MSAL4J 来创建一个登录用户然后调用受保护的 web api 的 web 应用程序。更多 code samples 用于调用受保护的 web api。

这是overview of the b2c token types。 idToken 包含有关用户的声明,访问令牌为您的 Web api 提供范围权限。

【讨论】:

  • 感谢您的来电。但问题是关于验证访问令牌的实际 Java 代码:我根本没有使用 String Security。
猜你喜欢
  • 1970-01-01
  • 2021-10-27
  • 2021-10-15
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 2015-12-25
  • 2018-05-14
  • 1970-01-01
相关资源
最近更新 更多