azure - 无法从 Azure Web 应用程序 Azure AD 身份验证向 Azure API 授权

标签 azure azure-active-directory azure-web-app-service azure-appservice

我有一个作为 Azure 应用服务托管的 Web 应用,我正在尝试将其授权给也作为 Azure 应用服务托管的 API。我已经注册了应用程序和 API,配置了单租户 AD 身份验证,授权了客户端应用程序,并成功获取了不记名 token 。但是,当我尝试访问资源时,我收到 401 错误。

我已经尝试使用委派角色和应用程序角色进行此操作,但没有效果。

编辑:这是我用来在网络应用程序中获取 token 的代码:

     var confidentialClient = ConfidentialClientApplicationBuilder.Create(<clientId>)
            .WithCertificate(<certificate>)
            .WithAuthority(<authority>)
            .Build();

     await app.AcquireTokenForClient(new string[] { "api://<app_id>/.default" });

编辑:解析 JWT token 后,我确认应用程序角色存在;但范围并非如此。看来这不应该是一个问题。

我可以采取哪些步骤来尝试诊断此身份验证问题?

最佳答案

请检查用于调用 Web API 的 token 。如果颁发者有 v2 端点,则将“ accessTokenAcceptedVersion ”从 null 更改为 2,否则保留 null or 1 .

enter image description here

list 在 azure 广告门户中。

enter image description here

并确保管理员在身份验证期间或通过门户授予管理员同意范围:

enter image description here

  • 401 错误 通常由于受众不匹配而发生。请检查 allowed audiences参数来自https://resources.azure.com/ .
  • 导航到您的应用服务资源 > config > authsettings 并 将AllowAudiences 值正确设置为有效值。
  • 受众应该是应用程序的客户端 ID 或应用程序 ID URI。它用于 检查收到的 token 是否适用于您尝试调用的 API。
  • 应用程序的 AppIdUri 可以采用以下形式: api://<target_app_id> "https://<site>.azurewebsites.net" 以及 clientIId 应用程序。

授权设置:

"allowedAudiences":[
    https://<webapp_name>.azurewebsites.net/,
    api://<target_app_id>,
    client_id
      ]

也尝试上面,通过删除 api://前缀来检查范围

关于azure - 无法从 Azure Web 应用程序 Azure AD 身份验证向 Azure API 授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73776199/

相关文章:

azure - 如何在azure发布管道上创建自定义参数

azure-active-directory - Azure Active Directory - UI > API - 401 错误

azure - 使用 Microsoft Graph API 和 REST 方法从 Azure 门户应用程序注册中检索应用程序所有者

c# - 使用客户端证书时,大型 POST 请求会导致 Asp.Net Web API 超时

.net - Azure signalR 和微服务

azure - 如何在 VSTS 中使用 CI/CD 管道构建和仅发布修改后的文件?

c# - Azure Bot 使用 ngrok 为 channel 团队进行本地调试时抛出以下异常 "Failed to acquire token for client credentials."

c# - 如何将 Azure AD 身份验证添加到现有 .net 网站

azure - 在Azure应用程序服务中切换docker镜像

Terraform Azure 应用服务 - ip_restrictions