本地Python应用对接Azure OIDC的可行性及客户端密钥存储咨询
问题1:本地Python脚本是否可以触发Azure AD的OIDC认证?
完全可行,你可以使用Azure官方提供的msal Python库实现该能力,适配你的xlwings触发场景推荐选择带PKCE校验的授权码流:
- 认证流程触发后,
msal会自动唤起系统默认浏览器跳转Azure AD登录页,用户完成身份验证后,认证结果会自动回调到本地临时端口的监听服务,Python脚本即可直接获取到访问令牌、刷新令牌 - 整个流程符合OIDC安全规范,无需你自行处理账号密码的采集、传输逻辑,无代码基础的终端用户仅需完成常规的账号登录操作即可,交互门槛极低
- 支持令牌自动刷新,用户只要完成一次登录,后续一段时间内点击Excel按钮无需重复验证
问题2:该场景下客户端密钥的安全存储方案
首先说明:如果你使用上述带PKCE的授权码流,本身不需要使用客户端密钥,从根源上规避了密钥存储的安全风险。如果你的Azure AD应用注册配置强制要求使用客户端密钥,可按安全优先级选择以下方案:
- 最高优先级:调用系统原生凭据存储能力。Windows下使用
wincred接口、macOS下使用系统钥匙串,你可以通过Python的keyring库实现跨平台的统一调用,密钥会被系统级加密存储,仅当前登录的操作系统用户有权限读取,不会明文出现在代码、配置文件中 - 次优先级:存储在用户专属目录下的加密配置文件中。将密钥用AES对称加密后,存放在当前用户的个人目录(而非项目共享目录)下,加密密钥可使用当前用户的SID、设备硬件标识等和用户/设备绑定的信息生成,避免配置文件泄露后密钥被破译
- 禁止行为:不要将密钥硬编码在脚本中,不要存放在项目目录下的明文配置文件中,也不要将密钥打包到分发的xlwings应用包内
内容的提问来源于stack exchange,提问作者wranaui
相关产品推荐
相关产品推荐

