如何刷新Azure Identity Java SDK提供的TokenCredential / ClientSecretCredential提供的访问令牌?

问题描述

我试图使用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刷新令牌的示例。

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

解决方法

使用客户端凭据身份验证时,正确的方法是从ClientSecretCredential对象中请求新令牌。 您可以使用的是围绕ClientSecretCredential的包装程序,该程序将返回的令牌缓存(例如50分钟),然后在该时间过去之后,便从ClientSecretCredential请求新的令牌。

,

我认为刷新过程是通过天蓝色的身份抽象出来的。

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

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

其他InteractiveBrowserCredential需要互动流程才能获取新令牌,因此刷新很有意义。 它以天蓝色身份here处理(您可以看到最后一个令牌何时到期或在其到期日期的5分钟内,它将被强制刷新),并进一步在MSAL here中进行处理。

不是正式答案,只是阅读代码。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...