【问题标题】:Programmatically access Microsoft identity across Azure, VSTS, and Graph以编程方式跨 Azure、VSTS 和 Graph 访问 Microsoft 标识
【发布时间】:2018-05-01 14:25:44
【问题描述】:
是否可以通过单个应用程序访问 Graph、VSTS 和 Azure 信息?似乎要访问其中的每一个都需要它自己的应用程序以及原始和回调 url。
对于 Azure,我在 node js 应用程序中使用 NPM 的 passport-azure-ad。
理想情况下,我想结合 VSTS 构建信息、Azure 服务使用信息和用户配置文件信息。
【问题讨论】:
标签:
node.js
azure
azure-devops
azure-active-directory
microsoft-graph-api
【解决方案1】:
您提到的每个服务都有自己的 API:
但这并不意味着他们也都需要自己的“应用程序”。通过Azure Portal 在 Azure AD 中注册应用程序时,您可以请求访问多个 API。您收到的每个 access_token 都将绑定到一个 API(称为“资源”),但您可以使用 refresh_token 切换目标资源:
这里唯一的例外是 VSTS REST API。虽然大多数 API 使用相同的身份提供者,但 VSTS 有自己的。因此,出于 VSTS 的目的,您需要让用户单独进行身份验证。显然,这不是很好的用户体验,但有一个有用的解决方法:Personal Access Tokens。
使用 VSTS 的个人访问令牌可让您通过 Azure AD OAuth 对用户进行身份验证,并获得可用于 Microsoft Graph 和 Azure REST API 的访问令牌。对他们进行身份验证后,您可以要求他们提供个人访问令牌以访问 VSTS。这使您可以忘记要求用户进行第二次身份验证,因为您将存储他们的 PAT,并将其用于对 VSTS 的任何调用。
【解决方案2】:
首先,在Phase of Build/Release定义中有Allow scripts to access OAuth token选项,你可以勾选这个选项并通过System.AcessToken变量访问token。
要为该用户授予权限,您需要授予 Project Collection Build Service (xxxx) 帐户的权限。
其次,有一些与 Azure 相关的任务(例如 Azure PowerShell),可以访问 azure 资源(AAD 应用程序与 Azure 端点相关联)
您可以在多个任务中检索必要的信息,然后通过Logging Commands(##vso[task.setvariable]value)将结果存储在变量中,然后将它们组合在一起。