美好的一天!
我正在尝试以这样一种方式配置我的Azure API应用程序,使其只能由受信任的应用程序使用Azure AD(公共身份验证)进行访问。我在AD中为WPF应用程序和我的API应用程序创建了实体。我给了WPF应用程序的实体权限,可以访问我的API应用程序。我使用以下方法来访问我的API。
public Task<string> COGetOrganisationsAsync()
{
if(adAuth == null) adAuth = new coADAuthentication(ClientID, RedirectURL, Authority, ResourceURI);
string token = adAuth.AcquireTokenOrRefresh();
using(HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
Uri requestURI = new Uri(new Uri(Authority), "Organization/GetAll");
HttpRequestMessage httpRequest = new HttpRequestMessage(new HttpMethod("POST"), requestURI);
var req = httpClient.PostAsync(requestURI, httpRequest.Content).ContinueWith(httpResponseMessage =>
{
return httpResponseMessage.Result.Content.ReadAsStringAsync();
});
return req.Result;
}
我成功收到了一个有效的令牌,我将其添加到标题中。我的req.Result在以下消息中
{“status”:403,“source”:“https://serviceplan-resourceg01234567890abcdef.azurewebsites.net/MyMethod/GetAll”, “message”:“服务权限”myService \“设置为公开 auth但没有与请求相关联的身份验证。“}
状态403告诉我服务器确实收到了我的请求,但它是禁止的..代码工作正常,因为当我将身份验证更改为public时,我会收到正确的数据。
我不确定我的Azure AD是否配置正确,但我一直在寻找几天的解决方案.Azure文档分散,过时或对我的特定场景无用。
我的问题是,是否有其他人有同样的问题,是否有人可能会建议我一些有用的文档?
非常感谢!
答案 0 :(得分:1)
对不起,您很难找到所需要的东西。对于您必须在网关上启用和配置的许多提供商,App Service API应用程序都支持开箱即用。然后,生活在网关后面的服务将具有身份验证,并且它们将共享相同的身份验证提供程序(当然,如果它们配置为公共身份验证),那么API App A的调用者将无需重新进行身份验证即可访问API App乙
您可以在Protect an API app: Add Azure Active Directory or social provider authentication
找到分步指南话虽如此,引起混淆或过时的文章是什么?我们正努力使这些文章尽可能具有发现性,因此任何反馈都将有助于我们改进。
答案 1 :(得分:0)
API应用程序平台使用&#34; zumo令牌&#34;来抽象API应用程序的身份验证。我们的想法是,无论您想使用哪种身份验证提供程序,如AAD,Facebook,Google,Twitter或Microsoft帐户,它(通常)都会对您的客户端代码透明。一般流程是
http://azure.microsoft.com/en-us/documentation/articles/app-service-api-dotnet-add-authentication/有详细信息。