0

由于 Azures共享访问签名 (SAS)是一个开放标准,我想在我的 Django 应用程序中使用它,该应用程序与 Azure 没有任何链接。我基本上想创建一段代码,在接下来的 24 小时内对我正在服务的特定 url 创建读取权限。所以我看了一些关于 SAS 的视频,并为它安装了 python 库(pip install azure-storage-blob)。

我在 github 上阅读了README,但据我所知,它总是需要一个 Azure 帐户。是否也可以在我自己的(Python)应用程序中使用 SAS?我想它会根据预定义的密钥创建散列。如果这是可能的,是否有人有任何关于如何创建 url 以及如何验证它的示例代码?最好使用 Python,但也欢迎使用其他语言的示例代码。

4

1 回答 1

1

虽然此处存在原始 blob 存储 sas 生成代码,但我宁愿发现以下简化代码对您的一般用途更有用(受此示例启发)。根据您的需要进行调整。下面是使用密钥的客户端 sas 生成逻辑(hmac sha256 摘要)。在服务器端使用类似的逻辑重新生成签名提取 URL 参数 (sr, sig, se) 并将相同的 (sig) 与从客户端传递的参数进行比较以匹配。请注意,客户端和服务器端的共享密钥是这里的主要驱动程序。

import time
import urllib
import hmac
import hashlib
import base64

def get_auth_token(url_base, resource, sas_name, sas_secret):
    """
    Returns an authorization token dictionary 
    for making calls to Event Hubs REST API.
    """
    uri = urllib.parse.quote_plus("https://{}.something.com/{}" \
                                  .format(url_base, resource))
    sas = sas_secret.encode('utf-8')
    expiry = str(int(time.time() + 10000))
    string_to_sign = (uri + '\n' + expiry).encode('utf-8')
    signed_hmac_sha256 = hmac.HMAC(sas, string_to_sign, hashlib.sha256)
    signature = urllib.parse.quote(base64.b64encode(signed_hmac_sha256.digest()))
    return  {"url_base": url_base,
             "resource": resource,
             "token":'SharedAccessSignature sr={}&sig={}&se={}&skn={}' \
                     .format(uri, signature, expiry, sas_name)
            }
于 2020-12-29T16:42:51.270 回答