我正在开发一项多租户服务,该服务将代表用户在 Azure DevOps 中列出、创建和更新工作项。我对 Entra ID 应用程序的设置、其身份验证流程和 Azure DevOps REST API 有点困惑。
我一直在谷歌上搜索,到目前为止我遇到的大多是使用Azure DevOps OAuth 2.0或使用PAT,我不想使用PAT,微软建议改用Entra ID OAuth,或者不是多租户解决方案接受个人账户。
我的 Entra ID 应用程序配置缺少什么,或者我是否误解了 OAuth 流程的工作原理。任何指向文档或代码示例的指针将不胜感激。
这是我尝试过的:
Entra ID (Azure AD) 应用程序
自此文档推荐新开发人员使用 Microsoft Entra ID OAuth 而不是 Azure DevOps OAuth 2.0。
offline_access
、openid
(来自 Microsoft Graph)和 vso.work_full
(来自 Azure DevOps)。认证流程
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
使用我的 Microsoft 帐户登录后,我得到
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.
如果我使用范围
openid offline_access
那么我可以获得代码,但是在使用 https://login.microsoftonline.com/common/oauth2/v2.0/token
将代码发布到 vso.work_full
时,我收到相同的错误,说范围不存在。我没有尝试在没有 openid
和 offline_access
的情况下授权,因为我想支持个人帐户,删除这些将不允许我以个人帐户登录。
要使用 Microsoft Entra ID 应用程序访问 Azure DevOps,您可以通过以下步骤进行配置: Azure 门户的先决条件:
Azure DevOps 的先决条件:
为应用程序生成访问令牌:您可以使用下面的 Bash 脚本来生成令牌。
access_token=$(curl -X POST -H "Content-Type: application/x-www-form-urlencoded" 'https://login.microsoftonline.com/{tenant_ID}/oauth2/v2.0/token' \
-d 'grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}&scope=499b84ac-1321-427f-aa17-267ca6975798/.default' | jq -r '.access_token')
echo $access_token
{tenant_ID}
替换为 AAD 的目录(租户)ID。{client_id}
替换为应用程序的 Application(客户端)ID。{client_secret}
替换为应用程序中创建的客户端密钥的值。499b84ac-1321-427f-aa17-267ca6975798/.default
”特定于 Azure DevOps,未更改。它与 Azure DevOps 中的PAT范围不同。注:
通过这种方式生成的访问令牌的生命周期只有 24 小时,因为 AAD 会定期轮换令牌。因此,如果您想继续使用令牌,可能需要至少每 24 小时刷新一次。