我有一个Azure网站上运行的标准Web API,启用了Azure AD身份验证,当在浏览器中浏览API时,我可以通过浏览器登录并访问该API。Azure AD API请求401未授权
的WPF桌面应用程序提交请求时,却正在接收未经授权响应:
var authContext = new AuthenticationContext(authority, new FileCache());
var accessToken = await authContext.AcquireTokenAsync(apiResourceid, clientId, redirectUri,
new PlatformParameters(PromptBehavior.Auto));
// accessToken is valid
var apiUrl = "https://example.azurewebsites.net/api/list";
var request = new HttpRequestMessage(HttpMethod.Get, apiUrl);
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken.AccessToken);
var response = await httpClient.SendAsync(request);
认证是全成和调试时,我可以看到用户信息。
我无法访问Azure帐户,但确信Service AD应用程序已正确配置为允许访问客户端AD应用程序,因为在替代帐户(未正确配置)上进行测试时AuthenticationContext.AcquireTokenAsync
方法失败。
我注意到 - (时间当然是UTC)的AuthenticationResult.ExpiresOn
总是在过去,但看不出延长它的方法,如果这是未来日期?
请求:
GET https://example.azure
websites.net/api/categorisation HTTP/1.1
Authorization: Bearer eyJ0eXAiO...
Host: example.azurewebsites.net
响应:
HTTP/1.1 401 Unauthorized
Content-Length: 58
Content-Type: text/html
Server: Microsoft-IIS/8.0
WWW-Authenticate: Bearer realm="example.azurewebsites.net"
X-Powered-By: ASP.NET
Set-Cookie: ARRAffinity=e35f2977dba55e6708887e762940f75c2a0fcb0a9df4e1cbe0d3f10a614c59b8;Path=/;Domain=example.azurewebsites.net
Date: Fri, 08 Jul 2016 07:51:13 GMT
You do not have permission to view this directory or page.
更新:
我已经在Azure的帐户我有机会获得重建环境并仍然收到未经授权的回复(在浏览器中正常运行)。
您可以在您的网站上发布代码Startup.Auth.cs设置Azure AD身份验证吗?或者,如果您在Azure网站中使用“身份验证/授权”选项,您可以共享您配置的值/设置吗? – Saca
另外,对此:“身份验证是成功的,我可以在调试时看到用户信息。”,你是说当用Visual Studio运行WPF应用程序时,您成功连接到API,但是从exe运行时它不会' T'如果是这样,当您运行.exe时是否会收到提示? – Saca
@Saca API正在使用Azure网站身份验证。提供程序是使用快速管理模式配置的“Azure Active Directory”,Azure AD App设置为AD Web Service应用程序。 – Anth12