Azure DevOps服务账户创建指南及适用于Azure Runbook的7 Pace权限服务账户配置方法
嘿,我刚好处理过类似的场景,给你整理了分步的解决方案,应该能解决你的两个问题:
1. 在Azure DevOps中创建服务账户
Azure DevOps里的服务账户本质是Azure Active Directory(Azure AD)中的服务主体,创建流程分为两步:先在Azure AD注册应用,再将其添加到Azure DevOps并分配权限。
- 第一步:在Azure AD创建服务主体(应用注册)
- 登录Azure门户,找到「Azure Active Directory」服务
- 进入左侧菜单的「应用注册」,点击「新注册」
- 填写名称(比如
7Pace-AzureDevOps-Service-Account),选择「仅限此组织目录中的帐户」,重定向URI可以随便填一个公共客户端地址(比如http://localhost,后续用不上但必填) - 注册完成后,复制页面上的「客户端ID」和「租户ID」,这两个是后续认证的关键信息
- 第二步:生成服务主体的认证密钥
- 在刚才创建的应用注册页面,进入左侧「证书和密码」>「客户端密码」
- 点击「新客户端密码」,设置有效期,然后点击「添加」
- 重要:复制生成的密码值(只会显示一次),丢失的话只能重新生成
- 第三步:将服务主体添加到Azure DevOps项目
- 打开你的Azure DevOps组织和目标项目
- 进入「项目设置」>「权限」>「添加用户」
- 在搜索框中输入刚才创建的应用注册名称,找到后添加到项目
- 给它分配合适的权限:如果只是读取工时表和工作详情,「读者」权限可能足够;如果需要更多操作,可根据需求分配「项目管理员」或更细粒度的权限
2. 创建适用于7Pace和Azure DevOps的无MFA服务账户(用于Azure Runbook)
服务主体本身就不依赖用户级的MFA(因为用密钥/证书认证),所以重点是给它分配7Pace的访问权限,以及在Runbook中配置认证逻辑:
- 给服务主体分配7Pace访问权限
- 登录Azure DevOps中的7Pace Timetracker扩展页面(通常在项目的「概述」或「扩展」菜单里)
- 找到「权限管理」或「用户访问」选项
- 搜索并添加刚才创建的服务主体,分配「读取工时表数据」等必要权限(根据你需要获取详情的需求调整)
- 关于MFA的说明
- 服务主体是基于应用级的密钥认证,不属于普通用户范畴,所以不会触发MFA验证。只要确保不要把这个服务主体加入强制MFA的Azure AD用户组即可,无需额外禁用MFA操作
- 在Azure Runbook中使用服务主体认证示例(PowerShell)
下面是用服务主体获取Azure DevOps工作详情和7Pace工时表的基础代码框架:
注意:如果7Pace不支持Azure AD令牌,你可能需要在7Pace管理界面给服务主体生成专属的API密钥,替换上述请求中的认证头。# 服务主体认证信息 $tenantId = "你的Azure AD租户ID" $clientId = "你的应用注册客户端ID" $clientSecret = ConvertTo-SecureString "你的客户端密码" -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($clientId, $clientSecret) # 获取Azure DevOps的访问令牌 $adoToken = Get-AzAccessToken -ResourceUrl "https://dev.azure.com" -TenantId $tenantId -Credential $credential # 调用Azure DevOps API获取工作详情 $orgName = "你的Azure DevOps组织名" $projectName = "你的项目名" $workItemsUrl = "https://dev.azure.com/$orgName/$projectName/_apis/wit/workitems?ids=123,456&api-version=7.1-preview.3" $workItems = Invoke-RestMethod -Uri $workItemsUrl -Headers @{Authorization = "Bearer $($adoToken.Token)"} -Method Get # 调用7Pace API获取工时表详情(假设7Pace支持Azure AD令牌认证) $7PaceUrl = "https://your-7pace-instance/api/timesheets?projectId=xxx&api-version=v1" $timesheets = Invoke-RestMethod -Uri $7PaceUrl -Headers @{Authorization = "Bearer $($adoToken.Token)"} -Method Get
内容的提问来源于stack exchange,提问作者Rock
相关产品推荐
相关产品推荐

