1

摘要:我有一个用于功能测试的 REST API。我只允许具有特定“测试人员”角色的人员或组访问 API。我想在 Azure DevOps Release Pipeline 期间自动触发此功能测试,但我不知道如何授权机器帐户访问 API。

细节:

我用 [Authorize(Roles = "Tester")] 保护了这个 API

    [Route("quotas/developers")]
    [HttpGet]
    [Authorize(Roles = "Tester")]
    [SwaggerResponse(HttpStatusCode.OK, "Successful operation", Type = typeof(DeveloperQuota[]))]
    public async Task<List<DeveloperQuota>> GetDeveloperQuota([FromUri]string developerUpn)

为了进行设置,我在 Azure Active Directory 中注册了一个企业应用程序。在清单中,我声明了角色。

在此处输入图像描述

然后在企业应用程序中添加一些用户和组,这些用户和组被分配了“测试员”角色。

在此处输入图像描述

这适用于手动运行我的功能测试。我运行测试,它会弹出一个 oauth 对话框让我输入我的凭据,它会从成功的身份验证请求中获取我的 Bearer 令牌,然后将其传递给 API。

    private string GetActiveDirectoryToken()
    {
        string authority = this.configuration.ActiveDirectoryAuthority;
        string resource = this.configuration.ActiveDirectoryAudience;
        string keyVaultUri = this.configuration.KeyVaultUri;

        IKeyVaultAdapterFactory keyVaultAdapterFactory = new KeyVaultAdapterFactory();
        var keyVaultAdapter = keyVaultAdapterFactory.CreateInstance(KeyVaultServicePrincipal.PowerShellAppId);

        SecureString clientIdSecure = keyVaultAdapter.GetAzureKeyVaultSecretSecure(keyVaultUri, "GasCallbackRegistrationClientID", null).Result;
        SecureString redirectUriSecure = keyVaultAdapter.GetAzureKeyVaultSecretSecure(keyVaultUri, "GasCallbackRegistrationClientIDRedirectUri", null).Result;

        var authContext = new AuthenticationContext(authority);
        var result = authContext.AcquireTokenAsync(
            resource,
            SecureStringUtilities.DecryptSecureString(clientIdSecure),
            new Uri(SecureStringUtilities.DecryptSecureString(redirectUriSecure)),
            new PlatformParameters(PromptBehavior.Auto)).Result;

        return result.AccessToken;
    }

当然,如果我在自动化过程中运行它,将没有任何东西可以用凭据填充对话框,我也不想存储这些凭据的副本,特别是因为这些凭据按照在其他地方维护的时间表滚动。

我的想法是我可以创建一个 Azure 服务主体,将证书与服务主体关联,在我的部署机器上安装证书,如果证书可用,则以服务主体身份登录,然后将该服务主体放在“测试器”中角色。问题是我无法在企业应用程序中将服务主体添加为用户。它似乎只允许我添加“用户和组”。我同样无法将服务主体添加到组中。

在此处输入图像描述

关于如何授权我的部署框访问这些 API 有什么想法吗?

4

1 回答 1

2

为应用程序发布的角色被视为应用程序权限,不能通过“用户和组”分配屏幕分配给其他应用程序。

要将应用程序权限分配给客户端应用程序,请转到客户端应用程序的注册页面,单击Api Permissions,然后单击Add a Permission。选择My Api选项卡,搜索发布应用程序角色的应用程序,您会看到下面列表中列出的应用程序角色。选择它,保存然后授予管理员同意

于 2019-09-13T06:52:37.523 回答