【问题标题】:ASP.NET API returns Authorization has been denied for this request on localhost but works normally on AzureASP.NET API 返回 localhost 上此请求的授权已被拒绝,但在 Azure 上正常工作
【发布时间】:2016-04-12 01:03:25
【问题描述】:
[Authorize]
    public class ValuesController : ApiController
    {
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "Simple" , "Test"};
        }
}

这是一个简单的“Web API 2”应用程序。

public void ConfigureAuth(IAppBuilder app)
        {
            app.UseWindowsAzureActiveDirectoryBearerAuthentication(
              new WindowsAzureActiveDirectoryBearerAuthenticationOptions
              {
                  Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                  TokenValidationParameters = new TokenValidationParameters
                  {
                      SaveSigninToken = true,
                      ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
                  },
              });
        }

如图所示,应用程序正在使用 WindowsAzureActive Directory 身份验证和授权。

请注意,它在发布到 Azure Api App 时正常工作,但在 localhost 时总是拒绝请求。

我不知道发生了什么,以前它曾经工作过。

问候

【问题讨论】:

    标签: asp.net azure adal


    【解决方案1】:

    这通常是由于您在 Web API 中期望的受众(您通过 ValidAudience 设置的值)与您在传入令牌中获得的内容不匹配。令牌中的值反映了您在从客户端请求令牌时使用的资源标识符。 在调用 localhost 实例与 Azure API 实例时,您是否更改了客户端代码以请求不同的受众? 另外,如何将 API 发布到 Azure?如果您使用 VS,并且在发布向导设置中选中了“使用组织身份验证”复选框,则部署的 Web API 将在其 web.config 中具有不同的受众值。

    【讨论】:

    • 是的,我发现是这种情况。但我不确定我是否完全理解这一点,因为在 Azure 上它按原样工作。但 localhost 它没有。仅当我将 Audience 更改为与 Azure 门户中的 App Uri 相同时,它才有效。现在我卡住了从 SPA 登录失败,因为它需要与 ClientId 相同的受众,而不是 App Uri。这里有什么想法吗?
    • 请使用 torknvalidationparameters.validaudiences(复数)代替 validAudience,并在其中添加 clientID 和 app id uri
    • 我没有注意到这实际上是你;感谢和在 AAD 的出色工作;惊人的构建会话
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 2019-07-17
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多