通过Azure应用注册实现WebAPI范围授权的技术问询
关于Azure应用注册中ApiApp授权配置的实操指南
嘿,我来帮你梳理下你现在这套Azure应用注册授权的配置逻辑,以及后续要让ClientApp正常调用ApiApp需要做的操作:
一、先拆解你ApiApp清单里的权限配置
你在ApiApp的清单中添加的这段oauth2Permissions配置,是给ApiApp定义了一个用户委派型的管理员权限,每个字段的作用我给你划重点:
adminConsentDescription/adminConsentDisplayName:这是给租户管理员看的权限说明,管理员在同意ClientApp访问ApiApp时会看到这些文本,用来明确这个权限的作用id:这个GUID是该权限的唯一标识,后续ClientApp请求权限时,无论是通过ID还是value字段都能定位到它isEnabled:设为true才会让这个权限生效,要是设成false就等于白配置了type:这里填User,说明这是用户委派权限——意思是ClientApp需要以某个用户的身份来获取这个权限,然后才能访问ApiApp;如果需要让ClientApp以自身身份(不需要用户参与)访问,就得改成ApplicationuserConsentDescription/userConsentDisplayName:如果允许普通用户自己同意这个权限,用户会看到这些文本,但考虑到这是管理员权限,通常建议只开放管理员同意,避免普通用户获取过高权限value:权限的唯一标识字符串(你写的"Adm..."),后续请求权限的scope参数会用到它
二、ClientApp侧必须做的配置步骤
要让ClientApp能请求这个权限并访问ApiApp,你得在ClientApp的应用注册里做这些操作:
- 登录Azure门户,找到ClientApp的应用注册,进入API权限页面
- 点击添加权限,选择我的API,找到你的ApiApp
- 勾选你之前定义的
Admin权限,然后点击添加 - 因为这是管理员权限,记得点击授予管理员同意(如果是多租户应用,需要租户管理员操作;单租户的话你自己就能搞定)
三、调用ApiApp时的授权流程示例
当ClientApp要调用ApiApp时,得先拿到包含这个权限的AccessToken,举个授权码流程的例子:
- 请求授权码的时候,
scope参数要写成api://<ApiApp的ClientID>/<权限的value>,比如api://12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx/AdmFullAccess - 拿到AccessToken后,你可以解码看看
scp字段,里面应该包含你定义的权限值,ApiApp就能通过验证这个字段来判断调用者是否有管理员权限
四、常见问题排查点
- 如果权限不生效,先检查AccessToken的
aud字段是不是ApiApp的ClientID,要是不对说明请求的目标API错了 - 要是
scp字段里没有你的权限值,大概率是ClientApp的权限没被授予,或者请求scope的时候写错了 - 如果需要应用级权限(不需要用户登录),记得把ApiApp里的
type改成Application,同时在ClientApp的API权限里选择应用权限类型
内容的提问来源于stack exchange,提问作者jeremyr
相关产品推荐
相关产品推荐

