如何将我的Azure AD应用转换为confidential client(而非public client)
如何将Azure AD应用转换为Confidential Client
首先得明确核心逻辑:Azure AD应用只要能安全持有客户端凭据(密钥或证书),就能成为Confidential Client——毕竟这类客户端的本质就是能证明自身身份、不会泄露凭据的应用(比如Web后端、API服务)。下面是具体的操作步骤和注意事项:
1. 进入Azure门户找到目标应用
- 打开Azure门户,搜索并进入Azure Active Directory
- 在左侧菜单选择应用注册,找到你要修改的应用
2. 添加客户端凭据(Secret或证书)
Confidential Client必须至少拥有一种安全凭据,推荐优先用证书(比密钥更安全),两种方式任选其一即可:
方式一:添加客户端密钥(Client Secret)
- 在应用左侧菜单点击证书和密码
- 切换到客户端密码标签,点击新建客户端密码
- 填写描述(比如"Confidential Client 密钥"),选择过期时间后点击添加
- 关键提示:生成的密钥值只会显示一次,一定要立刻复制并存到安全的地方(比如服务器环境变量、密钥管理服务),丢失后只能重新创建
方式二:添加证书(更安全)
- 同样在证书和密码页面,切换到证书标签,点击上传证书
- 选择本地的PFX或CER格式证书文件,填写描述后点击添加
- 证书会被安全存储在Azure AD中,后续应用可通过证书文件或指纹完成身份验证
3. 确认客户端类型及相关设置
- 回到应用的概述页面,查看客户端类型字段,添加凭据后通常会自动更新为Confidential
- 若未自动更新,进入认证页面,在高级设置里找到允许公共客户端流,确保这个选项是关闭的——关闭后应用就只能用Confidential Client的认证方式,无法再以Public Client身份发起请求
4. 更新应用代码适配Confidential Client
现在应用已经是Confidential Client了,需要在代码里使用新添加的凭据来获取令牌:
- 如果你用Microsoft Identity Client(MSAL)库,比如MSAL.NET,要改用
ConfidentialClientApplicationBuilder来构建客户端实例,而不是之前的PublicClientApplicationBuilder - 示例代码(C#):
var confidentialClient = ConfidentialClientApplicationBuilder .Create("<你的应用客户端ID>") .WithClientSecret("<你的客户端密钥>") // 或用.WithCertificate()传入证书对象 .WithAuthority(new Uri("https://login.microsoftonline.com/<你的租户ID>")) .Build();
额外说明
根据《Configurable token lifetimes in Azure Active Directory (Public Preview)》文档,Confidential Client的refresh token默认是"until-revoked"(直到被吊销),这也是它相比Public Client的一大优势——Public Client的refresh token有效期通常较短,且无法设置为长期有效。
最后务必注意:Confidential Client的核心是安全存储凭据,绝对不能把密钥或证书暴露给前端用户(比如写在浏览器JS代码里),必须放在服务器端或安全的后端环境中。
内容的提问来源于stack exchange,提问作者Box Very
相关产品推荐
相关产品推荐

