ASP.NET Core API已用Azure AD隐式授权保护,能否配置客户端凭证流通过Postman访问?
可以配置客户端凭证流实现Postman无手动认证访问API
当然可以!客户端凭证流就是专门为这种服务对服务的场景设计的,完全能让Postman不用手动走认证流程就能调用你的ASP.NET Core API。下面一步步来完成配置:
第一步:在Azure AD中注册用于客户端凭证流的应用
你之前的隐式授权是给前端用的,现在需要单独注册一个服务端类型的应用来适配客户端凭证流:- 登录Azure门户,找到Azure Active Directory,进入「应用注册」页面
- 点击「新注册」,给应用起个好记的名字(比如“Postman API Client”),账户类型选「仅此组织目录中的账户」(可根据你的实际场景调整)
- 注册完成后,务必记下应用程序(客户端)ID和目录(租户)ID,后面配置会频繁用到
第二步:给新应用分配API的应用权限
客户端凭证流是基于服务身份的,没有用户上下文,所以要分配应用权限而非委托权限:- 在新应用的「API权限」页面,点击「添加权限」
- 选择「我的API」,找到你用来保护ASP.NET Core API的那个应用注册
- 勾选对应的应用权限(如果你的API定义了自定义权限,就选对应项;如果没有,选默认权限即可)
- 点击「授予管理员同意」(这一步必须做,应用权限需要管理员手动授权才能生效)
第三步:生成客户端密码(或证书)
客户端需要凭证来向Azure AD请求令牌,这里先讲操作简单的密码方式:- 进入新应用的「证书和密码」页面,点击「新建客户端密码」
- 输入描述和过期时间,点击「添加」后,立刻复制生成的密码值(离开这个页面后就再也看不到了,一定要妥善保存)
第四步:确保你的ASP.NET Core API支持客户端凭证流
其实默认情况下,用Microsoft Identity保护的API是支持多种授权流的,只要基础配置正确就行:- 检查你的appsettings.json里的AzureAD配置,确保包含租户ID、API的客户端ID,示例如下:
"AzureAd": { "Instance": "https://login.microsoftonline.com/", "TenantId": "你的租户ID", "ClientId": "你的API的客户端ID" } - 如果是.NET 6+,在Program.cs里的
AddMicrosoftIdentityWebApi配置不需要额外修改,默认就会验证客户端凭证流的令牌
- 检查你的appsettings.json里的AzureAD配置,确保包含租户ID、API的客户端ID,示例如下:
第五步:在Postman中配置OAuth2.0客户端凭证流
现在就可以让Postman自动获取令牌并调用API了:- 打开Postman,新建一个API请求,输入你的API地址和请求方法
- 切换到「Authorization」标签,类型选择「OAuth 2.0」
- 点击「Configure New Token」,填写以下信息:
- Token Name:随便起个名字(比如“API Client Token”)
- Grant Type:选择「Client Credentials」
- Access Token URL:
https://login.microsoftonline.com/你的租户ID/oauth2/v2.0/token - Client ID:第一步记下的Postman客户端应用ID
- Client Secret:第三步复制的客户端密码
- Scope:填写
api://你的API客户端ID/.default(这个格式表示使用该API下所有已分配的应用权限)
- 点击「Get New Access Token」,Postman会自动向Azure AD请求令牌,获取成功后点击「Use Token」
- 现在发送请求,就能直接访问API,不用再手动走认证流程了
额外说明
- 客户端凭证流是无用户上下文的,所以如果你的API里有依赖用户信息(比如用户ID、角色)的逻辑,要注意调整,这种方式调用时不会携带用户相关的Claims
- 如果你想提升安全性,可以用证书代替客户端密码,步骤类似,只需在Azure AD里上传证书,然后在Postman里配置对应的证书信息即可
内容的提问来源于stack exchange,提问作者Myriam Harfouch
相关产品推荐
相关产品推荐

