【发布时间】:2015-05-22 08:51:47
【问题描述】:
美好的一天!
我正在尝试配置我的 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 在以下消息中
{ “状态”:403,“来源”:“https://serviceplan-resourceg01234567890abcdef.azurewebsites.net/MyMethod/GetAll”, "message": "服务\"myService\" 的权限设置为公开 auth 但没有与请求关联的身份验证。” }
状态 403 告诉我服务器确实收到了我的请求,但它是禁止的。代码工作正常,因为当我将身份验证更改为公共时,我收到了正确的数据。
我不确定我的 Azure AD 配置是否正确,但我这几天一直在寻找解决方案。Azure 文档分散、过时或对我的特定场景没有用处。
我的问题是,还有其他人有同样的问题吗?有人可以向我推荐一些有用的文档吗?
非常感谢!
【问题讨论】:
-
这也不限于 WPF。我已经尝试过 Cordova ADAL 插件以及 Windows 控制台 .NET 应用程序。结果相同。经过测试的 API 应用程序可直接从浏览器成功进行身份验证。 x-zumo-auth 标头有一个令牌,我可以从 angularjs 应用程序 $http 使用它,再次成功调用。使用本机应用程序的客户端 ID 从 ADAL 接收到的 accessToken 比 x-zumo-auth 标头大 - 不知道这是否相关 - 当我像“Bearer
”这样使用该令牌时,我得到 403 Forbidden。
标签: wpf authentication azure active-directory azure-api-apps