`az login` 是如何存储凭据信息的?
Azure CLI
az login 持久化凭据存储逻辑与安全问题解答 核心存储逻辑
az login完成身份验证后,全程不会持久化存储你的原始登录密码,无论加密还是明文形式都不会保存密码类数据。长期登录状态靠令牌体系维持,本地仅会存储两类相关数据:
- 身份验证令牌:包含短期有效的访问令牌(access token)、长期有效的刷新令牌(refresh token),由微软身份验证库(MSAL)管理
- 账户元数据:包含你绑定的租户ID、订阅ID、账户名等非敏感配置,存储在
azureProfile.json文件中
令牌和配置的默认存储路径为:
- Windows:
%USERPROFILE%\.azure\目录下的msal_token_cache.bin(令牌缓存)和azureProfile.json(元数据) - Linux/macOS:
~/.azure/目录下的同名文件
令牌存储的加密状态与被盗风险
本地存储的令牌是否能被攻击者直接读取明文,取决于你使用的操作系统环境:
- Windows系统:默认使用DPAPI(数据保护应用程序接口)对令牌缓存文件加密,加密密钥与当前Windows登录用户身份绑定。如果攻击者仅拿到硬盘镜像,没有你当前用户的登录上下文,无法解密出明文令牌;如果攻击者已经可以以你的用户身份登录系统、或者获取到当前用户的执行权限,则可以正常解密令牌,冒充你的身份操作Azure资源。
- Linux/macOS系统:默认会尝试对接系统原生密钥管理组件加密令牌(Linux对接libsecret/桌面密钥环,macOS对接系统钥匙串)。如果你的环境没有可用的密钥管理组件(比如无图形界面的服务器、未配置密钥环的WSL环境),令牌会以明文形式直接存储在
.azure目录下,这种情况攻击者拿到硬盘就可以直接读取明文令牌,无需额外解密即可冒充你的身份。
补充注意事项
- 就算令牌缓存是加密状态,只要攻击者可以在你的当前用户上下文下执行
az命令,不需要解密缓存文件也可以直接调用你的身份执行所有你有权限的Azure操作,不需要获取你的原始密码 - 刷新令牌默认有效期为90天,只要未被主动吊销,攻击者拿到有效刷新令牌后可以持续刷新获取新的访问令牌,直到令牌过期或者你在Azure AD中手动吊销对应用户的所有刷新令牌。
内容的提问来源于stack exchange,提问作者Ilya Chernomordik
相关产品推荐
相关产品推荐

