gpt4 book ai didi

java - 验证基于 Azure 表 SAS 的凭据

转载 作者:行者123 更新时间:2023-11-30 02:43:18 25 4
gpt4 key购买 nike

我正在寻找一种简单的方法来验证使用 SAS 的任意 Azure 表连接字符串,例如下面使用 Azure 存储的 Java SDK 的连接字符串:

https://example.table.core.windows.net/example?sig=aaabbbcccdddeeefffggghhh%3D&se=2020-01-01T00%3A00%3A00Z&sv=2015-04-05&tn=example&sp=raud

我尝试了 CloudTable 公开的一系列不同方法。 api,但它们都不起作用。

  • CloudTable.exists() 抛出 StorageException,无论凭据是否有效

  • getName()getStorageUri()getUri() 和其他 getter - 都在本地工作,无论凭证

  • getServiceClient().downloadServiceProperties()getServiceClient().getServiceStats() 也会抛出各种异常,而 getServiceClient().getEndpoint( )getServiceClient().getCredentials() 等始终在本地工作。

  • 为什么我不只查询表中的一两行?好吧,在许多情况下,我需要验证仅提供写入或更新权限(没有删除或读取权限)的 SAS,并且我不想执行以下语句:更改表中的某些内容只是为了检查凭据。

最佳答案

回答您的问题:

CloudTable.exists() throws a StorageException, regardless of whether the credentials are valid

我认为将此方法与 SAS token 一起使用时 SDK 存在错误。我记得不久前遇到过同样的问题。

getName(), getStorageUri(), getUri(), and other getters - all work locally, regardless of the credentials

这些将起作用,因为它们不进行网络调用。他们只是使用不同实例变量中可用的数据并返回数据。

getServiceClient().downloadServiceProperties() and getServiceClient().getServiceStats() also throw various exceptions, while getServiceClient().getEndpoint() and getServiceClient().getCredentials() and others always work locally.

为了让 getServiceClient().someMethod() 使用 SAS 工作,您需要 Account SAS 而不是 Service SAS(其中您现在正在使用)。

Why don't I just query the Table for a row or two? Well, in many cases I need to verify a SAS that gives only write or update premissions (without delete or read permissions), and I do not want to execute a statement that changes something in the table just to check the credentials.

检查写入操作的 SAS token 有效性的一种可能方法是执行您知道会因错误而失败的写入操作。例如,您可以尝试插入一个已经存在的实体。在这种情况下,您应该收到冲突 (409) 错误。您可以尝试做的其他事情是通过指定一些随机 Etag 值来执行乐观写入,并检查 Precondition Failed (412) 错误。如果您收到 403 错误或 404 错误,则表明您的 SAS token 存在问题。

关于java - 验证基于 Azure 表 SAS 的凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40998982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com