[英]Getting unauthorized (401) when calling App Service API from Azure Static Web App despite being Linked
[英]Getting Unauthorized from from Azure Web API
我使用针对Web API的Visual Studio 2015 Update 3创建了一个基本项目(无需自定义,没有任何内容),并按照此处的说明将其部署到Azure(免费帐户)。 然后,我使用以下代码创建了一个控制台客户端。
public static async Task<bool> ReadValues()
{
try
{
// Authenticate the user and get a token from Azure AD
//AuthenticationResult authResult = await AuthContext.AcquireTokenSilentAsync(Resource, ClientId);
AuthenticationResult authResult = AuthContext.AcquireToken(Resource, ClientId, RedirectUri);
// Create an HTTP client and add the token to the Authorization header
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
//"Bearer"
authResult.AccessTokenType
, authResult.AccessToken);
// Call the Web API to get the values
var requestUri = new Uri(WebApiUri, "api/values");
Console.WriteLine("Reading values from '{0}'.", requestUri);
HttpResponseMessage httpResponse = await httpClient.GetAsync(requestUri);
Console.WriteLine("HTTP Status Code: '{0}'", httpResponse.StatusCode.ToString());
//Console.WriteLine("HTTP Header: '{0}'", httpClient.DefaultRequestHeaders.Authorization.ToString());
if (httpResponse.IsSuccessStatusCode)
{
//
// Code to do something with the data returned goes here.
//
var s = await httpResponse.Content.ReadAsStringAsync();
Console.WriteLine(s);
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(httpResponse.ReasonPhrase);
}
return (httpResponse.IsSuccessStatusCode);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return false;
}
当我在调试中从Visual Studio本地运行WEB API时,它工作正常,但是当我将其部署到Azure时,它返回未授权。 我可能会问到的一些常见问题:
- 我确实收到了有效的承载令牌
- 我已经在Azure AD中为机器人,Web API和客户端创建了App注册
- 客户端和WEB API使用正确的重定向资源uri
- 我用于登录的帐户与用于创建Azure帐户的帐户相同,并且在域/ AD / API中具有完全特权
在API方面,这是startup.auth.cs的全部内容
using System.Configuration;
using System.IdentityModel.Tokens;
using Microsoft.Owin;
using Microsoft.Owin.Security.ActiveDirectory;
using Owin;
using WebApi;
[assembly: OwinStartup("default", typeof(Startup))]
namespace WebApi
{
public partial class Startup
{
// For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
public void ConfigureAuth(IAppBuilder app)
{
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters {
ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
},
});
}
}
}
我还应该检查什么?
其他参考
感谢Juunas的帮助,他为我提供了工作副本,因此我能够缩小范围。 当我将调试器附加到Web API的Azure实例时,我可以看到Bad Audience的异常。 在尝试追溯我的步骤时,我发现从Visual Studio进行部署时,我在导致Web.config更改导致问题的方式的设置中选择了“企业身份验证”。 没有选择该选项,我能够通过承载令牌访问API。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.