虽然此处存在原始 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)
}