多租户服务中使用Microsoft Entra ID OAuth调用Azure DevOps REST API的配置与认证故障排查求助
多租户服务中使用Microsoft Entra ID OAuth调用Azure DevOps REST API的配置与认证故障排查求助
我现在正在开发一个多租户服务,需要代表用户在Azure DevOps中列出、创建和更新工作项。但在配置Microsoft Entra ID应用、认证流程以及对接Azure DevOps REST API的过程中,我有点摸不着头脑,遇到了卡壳的问题。
之前我搜了不少资料,看到的方案大多是用Azure DevOps OAuth 2.0或者PAT,但我不想用PAT,而且微软也明确推荐用Entra ID OAuth替代Azure DevOps OAuth 2.0,另外很多现有方案也不支持兼容个人微软账号的多租户场景。我怀疑是不是在Entra ID应用的配置上漏了关键步骤,或者对OAuth流程的理解有偏差,希望能得到文档指引或者代码示例的帮助。
一、我的Entra ID(Azure AD)应用配置
- 参考微软推荐的文档创建了Entra ID应用,认证设置选择了「任何组织目录中的账户(任何Microsoft Entra ID租户 - 多租户)和个人微软账户(如Skype、Xbox)」
- API权限配置:添加了Microsoft Graph的
offline_access、openid权限,以及Azure DevOps的vso.work_full权限 - 暂时将Web重定向URI设置为
https://jwt.ms用于测试
二、尝试的认证流程及遇到的问题
- 首先构造授权跳转链接:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=<clientId>&response_type=code&redirect_uri=https://jwt.ms&response_mode=query&scope=openid offline_access&prompt=select_account
- 具体错误情况:
- 如果在
scope参数里加上vso.work_full(即scope=openid offline_access vso.work_full),用个人微软账号登录后会直接报错:error=invalid_scope&error_description=The provided value for the input parameter 'scope' is not valid. The scope 'openid offline_access vso.work_full' does not exist. - 如果只使用
scope=openid offline_access,能正常获取到授权码,但把这个授权码POST到https://login.microsoftonline.com/common/oauth2/v2.0/token接口时,哪怕在请求里带上vso.work_full,还是会弹出同样的“scope不存在”错误。 - 我没尝试去掉
openid和offline_access,因为我的服务需要支持个人微软账号登录,这两个权限应该是个人账号认证必需的,去掉的话应该就没法用个人账号登录了。
- 如果在
备注:内容来源于stack exchange,提问作者Stephen Saw
相关产品推荐
相关产品推荐

