VssUnauthorizedException:VS30063:您无权访问https://xxxx.visualstudio.com

问题描述 投票:0回答:1

我有一个 Web 应用程序在托管身份上下文中的 Azure 中运行。此托管标识已成为 Azure DevOps 项目的所有者。我正在尝试连接到 Azure DevOps API 并检索版本列表。使用 PAT 代币时,一切顺利。当这个东西部署到 WebApp 时,我收到了相关错误。 托管身份似乎已在 WebApp 上正确配置,因为它连接到各种 Azure 资源,没有任何问题。

我错过了什么?这是一个绿地项目,所以一切都是最新的。使用 Microsoft.VisualStudio.Services.* v19.225.1 nuget 包

    public class VssCredentialProvider : IVssCredentialProvider
{
    private readonly IRuntimeEnvironmentQuery _runtime;
    private readonly IAppLogger _logger;
    private const string AdoAppClientId = "499b84ac-1321-427f-aa17-267ca6975798/.default";

    public VssCredentialProvider(IRuntimeEnvironmentQuery runtime, IAppLogger logger)
    {
        _runtime = runtime;
        _logger = logger;
    }

    public async Task<VssCredentials> GetVssCredentials()
    {
        if (_runtime.IsDevelopment)
        {
            var vsoId = System.Environment.GetEnvironmentVariable("VSO_ID")!;
            var vsoToken = System.Environment.GetEnvironmentVariable("VSO_PAT")!;

            return new VssCredentials(new VssBasicCredential(vsoId, vsoToken));
        }

        var tokenObject = await new DefaultAzureCredential()
            .GetTokenAsync(new TokenRequestContext(scopes: new[] { $"{AdoAppClientId}/.default" }));

        await _logger.LogAsync($"Retrieved ADO API token expiring on {tokenObject.ExpiresOn}");

        return new VssCredentials(new VssOAuthAccessTokenCredential(tokenObject.Token));
    }
}
c# azure-devops-rest-api
1个回答
0
投票

尝试使用

GetTokenAsync(new TokenRequestContext(new[] { "499b84ac-1321-427f-aa17-267ca6975798/.default" }), CancellationToken.None);
正如 mbd 所提到的,范围是脚本中的
499b84ac-1321-427f-aa17-267ca6975798/.default/.default

您也可以参考这个示例代码

© www.soinside.com 2019 - 2024. All rights reserved.