Azure文件共享存储中App Token加密规则及解密/复刻逻辑咨询
Azure App Service 加密Token解密/复刻加密逻辑实现方案
解密逻辑
Azure应用身份认证(Easy Auth)的v1版本token存储用的是AES-256-GCM对称加密算法,具体实现规则如下:
- 加密密钥为应用配置项
WEBSITE_AUTH_ENCRYPTION_KEY,是32字节长度的十六进制字符串,未手动配置时Azure会自动为应用生成唯一值,可在Azure门户的应用服务「配置」页中查看或自定义设置。 - 存储的加密token是Base64编码后的字节串,字节结构按顺序为:12字节随机IV(初始化向量) + 密文主体 + 16字节GCM认证标签。
解密步骤:
- 对JSON中取到的加密token字符串做Base64解码,得到原始字节数组
- 截取字节数组前12位作为IV,最后16位作为GCM认证标签,中间剩余部分为待解密密文
- 把
WEBSITE_AUTH_ENCRYPTION_KEY从十六进制字符串转为字节数组作为AES密钥,用AES-256-GCM算法解密密文同时校验认证标签,即可得到明文token内容。
复刻加密逻辑
如果要自行生成符合该格式的加密token,按反向逻辑实现即可:
- 生成12字节的安全随机IV
- 用和目标环境一致的
WEBSITE_AUTH_ENCRYPTION_KEY作为密钥,通过AES-256-GCM算法加密明文token,得到密文和16字节GCM认证标签 - 按「IV + 密文 + 认证标签」的顺序拼接字节数组,再做Base64编码,即可得到符合格式要求的加密token值,存入对应JSON结构即可。
示例代码(Python)
from cryptography.hazmat.primitives.ciphers.aead import AESGCM import base64 # 替换为你的应用WEBSITE_AUTH_ENCRYPTION_KEY ENCRYPTION_KEY_HEX = "你的32字节十六进制密钥" key = bytes.fromhex(ENCRYPTION_KEY_HEX) aesgcm = AESGCM(key) # 解密示例 encrypted_token_b64 = "你拿到的加密token字符串" encrypted_bytes = base64.b64decode(encrypted_token_b64) iv = encrypted_bytes[:12] tag = encrypted_bytes[-16:] ciphertext = encrypted_bytes[12:-16] plaintext_token = aesgcm.decrypt(iv, ciphertext + tag, None).decode('utf-8') print(plaintext_token) # 加密示例 plaintext = "你的明文token" iv_new = AESGCM.generate_nonce() # 自动生成12字节IV encrypted = aesgcm.encrypt(iv_new, plaintext.encode('utf-8'), None) new_encrypted_token_b64 = base64.b64encode(iv_new + encrypted).decode('utf-8') print(new_encrypted_token_b64)
注意事项
- 跨应用复用这套存储逻辑时,必须确保所有用到的应用使用同一个
WEBSITE_AUTH_ENCRYPTION_KEY,否则无法互相解密。 - 目前公开的v1版本token均使用该逻辑,若后续Azure升级token存储版本号,需要对应调整加密算法实现。
内容的提问来源于stack exchange,提问作者CudoX
相关产品推荐
相关产品推荐

