0

我正在尝试使用Azure Identity Java SDK获取访问令牌,然后使用刷新令牌刷新它。

我使用以下 SDK:

  <dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
    <version>1.1.2</version>
  </dependency>

Java代码片段:

  context = new AuthenticationContext(authority, false, service);
  ClientCredential credential = new ClientCredential(clientId, clientSecret);
  Future<AuthenticationResult> future = context.acquireToken(resource, credential, null);
  token = future.get().getAccessToken();

在代码片段中,令牌的有效期为 1 小时,如预期的那样,请参阅Link

ClientSecretCredential实现了TokenCredential接口,该接口描述了刷新访问令牌必须单独实现。

我在 Microsoft 文档(或其他资源)上找不到任何描述如何使用 Java SDK 刷新令牌的示例。

刷新访问令牌的正确方法是什么?

4

2 回答 2

0

我认为刷新过程被 azure-identity 抽象掉了。

您可以通过 获取到期日期AccessToken.getExpiresAt

对于ClientSecretCredential,它可能不需要刷新。如果最后一个令牌过期,SDK 只需要获取一个新令牌(使用相同的密钥)。

对于其他InteractiveBrowserCredential需要交互式流程来获取新令牌的示例,刷新是有意义的。它在此处以 azure-identity 处理(您可以看到最后一个令牌何时过期或在其过期日期的 5 分钟内,它将被强制刷新),并在此处的 MSAL 中进一步处理。

不是官方回答,只是看代码。

于 2020-11-07T14:00:54.027 回答
0

使用客户端凭据身份验证时,正确的方法是从 ClientSecretCredential 对象请求新令牌。您可以使用一个围绕 ClientSecretCredential 的包装器,该包装器将返回的令牌缓存 50 分钟,然后在该时间过去后,它会从 ClientSecretCredential 请求一个新令牌。

于 2020-10-21T09:42:09.047 回答