我正在尝试列出给定订阅的存储帐户,并且我正在尝试拉出订阅的所有blob端点。
操作方法如下:
。使用subscriptionId和Azure创建缓存。验证对象。这基本上是为了重用,用于业务流程中后续的sdk api调用
b。如果上述缓存中不存在subscriptionid,则创建Azure。对象,并将其放入缓存
ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(
subscription.getClientId(),
subscription.getTenantId(),
subscription.getKey(),
subscription.getEnvironmentType().getEnvironment());
Azure.Authenticated = Azure.configure()
.withLogLevel(LogLevel.NONE)
.authenticate(credentials);
c。使用订阅id
获取Azure对象azure = authenticatedClient.withSubscription(subscription.getSubscriptionId());
d。使用storageAccounts列表API分页并列出给定订阅的所有存储帐户。
try {
PagedList<StorageAccount> strgAccList = azure.storageAccounts().list();
boolean hasNextPage = null != strgAccList.currentPage();
int pageCount = 0;
if (hasNextPage) {
while (hasNextPage) {
++pageCount;
Page<StorageAccount> resourcePage = strgAccList.currentPage();
Iterator<StorageAccount> it = resourcePage.items().iterator();
while (it.hasNext()) {
StorageAccount storageAccount = it.next();
storageAccounts.put(storageAccount.name(), storageAccount);
}
hasNextPage = strgAccList.hasNextPage();
if (hasNextPage) {
strgAccList.loadNextPage();
}
}
}
} catch (Exception e) {
//log exception here
}
因为这个azure对象是缓存的,所以这个对象(我假设它里面有一个令牌包装)可能会在这个迭代中过期,或者最终会导致异常情况。我的问题是
。这个对象的TTL是多少?
b。如果TTL到期,我应该创建一个新的azure对象吗?
c。或者sdk api将负责用新的令牌更新令牌?
文档没有帮助(我也没有看到它),我在azure java sdk github项目中搜索。里面的样品也没有任何帮助。请用所有的智慧开导我。谢谢!
a)这个对象的生存时间是多少?
回答:由于您假设在对象中包装令牌,因此该对象的TTL取决于访问令牌的到期时间。缺省值为86400秒(24小时)。参考:https://auth0.com/docs/security/tokens/access-tokens/update-access-token-lifetime
b)我应该创建一个新的azure对象,如果TTL到期的情况下?
回答:一旦TTL过期,不需要创建新对象,您可以刷新并生成新的令牌,并可以将该令牌分配给相同的对象。
C)或者sdk api将负责用新的令牌更新令牌?
答案:是的,SDK API将在需要时用新的令牌更新令牌。令牌是允许应用程序系统执行授权和身份验证过程的构件。
根据文档,sdk客户端库负责在需要时刷新令牌。感谢Venkatesh,我的一个朋友,带我来到这个页面。
https://learn.microsoft.com/en-us/java/api/com.azure.core.credential.tokencredential?view=azure-java-stable