【问题标题】:How to get accessToken to my Azure App Service from inside MSTest c# code如何从 MSTest c# 代码中获取我的 Azure 应用服务的 accessToken
【发布时间】:2021-06-21 02:32:40
【问题描述】:

我有用于 API 调用的网络应用程序(没有 UI,只有服务),我正在编写 MSTest 项目来测试 API。 这是我在网络应用程序代码中的 AuthConfiguration:

 public static void ConfigureWebApiAuth(IAppBuilder app){
        // User Authentication
        app.UseWindowsAzureActiveDirectoryBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions
            {
                TokenValidationParameters = UserAuthTokenValidationParameters,
                MetadataAddress =   AadApplicationMetadataAddress,
                TokenHandler = new JwtSecurityTokenHandler()
            });
}
        public static TokenValidationParameters UserAuthTokenValidationParameters = new TokenValidationParameters()
        {
            ValidAudience = AadApplicationClientId,
            ValidateIssuer = false,
            AuthenticationType = UserContext,
        };

如何从我的 MSTest 创建合适的令牌?

我试过了:

    AzureServiceTokenProvider localToken = new AzureServiceTokenProvider();
    var token = await getTokenProvider().GetAccessTokenAsync("https://xxx.azurewebsites.net");

还有:

AccessToken token =
    await new DefaultAzureCredential()
    .GetTokenAsync(
        new TokenRequestContext(
            new[] { "https://xxx.azurewebsites.net/.default" }
        ));

它仅适用于 https://storage.azure.com/https://vault.azure.net/ 等,不适用于我的应用服务 url。 我收到错误消息:

参数:连接字符串:[未指定连接字符串],资源:https://xxxxx.azurewebsites.net,权限:。尝试了以下 3 种方法来获取访问令牌,但都没有 他们工作了。尝试使用托管服务标识获取令牌。使用权 无法获取令牌。试图对一个套接字操作 无法访问的网络。异常消息:尝试使用 Visual 获取令牌 工作室。无法获取访问令牌。视觉例外 Studio 令牌提供程序 Microsoft.Asal.TokenService.exe:TS003:错误, TS004:无法获取访问令牌。 '未能刷新访问令牌' 异常消息:尝试使用 Azure CLI 获取令牌。访问令牌 无法获得。 'az' 未被识别为内部或 外部命令、可运行程序或批处理文件。

【问题讨论】:

  • 您通过以与应用程序相同的方式登录 API 来创建用于测试的令牌。没有(或不应该)有一个“神奇”的令牌可以正常工作。您应该使用用户名/密码/凭据创建一个“测试”帐户,并使用它来登录,生成令牌。
  • 我不能使用用户分配的托管标识吗?我创建了一个并将其添加到我的网络应用程序的“身份”选项卡中。
  • 如果您使用的是 v2.0 端点,则范围应为 {your_client_id}/.default。可以试试吗?

标签: c# azure access-token bearer-token azure-managed-identity


【解决方案1】:

您的代码中的scope/resource 不正确。还有一个article 供你了解。

var azureServiceTokenProvider = new AzureServiceTokenProvider();
string apiToken = await azureServiceTokenProvider.GetAccessTokenAsync("your API's client id/app id or App ID URI");

使用 v2.0 端点时应添加范围/.default

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-07
    • 2022-01-22
    • 1970-01-01
    • 2017-04-16
    • 2023-03-03
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    相关资源
    最近更新 更多