3

在本地工作时,我可以使用该行对用户进行身份验证

AuthenticationResult result = context.AcquireToken(resource,clientID, returnURI, PromptBehavior.Always);

在本地,我得到了登录屏幕和 UserInfo。

当我将 Web 应用程序发布到 Azure 时,上面的代码失败并出现此错误

"Error HRESULT E_FAIL has been returned from a call to a COM component"

[COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.]

Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.RunAsyncTask(Task`1 task) +89

这是什么原因造成的?我正在发布到共享站点(例如 xxx.azurewebsites.net)——因此我无权访问服务器进行任何更改——除了使用门户网站。

该代码在本地按预期工作。

此外,javascript 版本 (ADAL.js) 使用相同的租户、clientID 和 returnURI

4

1 回答 1

0

您正在执行的令牌获取流程旨在在桌面应用程序上运行,而不是在 Web 应用程序上运行。桌面上出现的对话框由本地进程和本地 Windows 会话的存在驱动。它不能在一个 Web 应用程序中工作,因为没有 Windows 会话并且该进程正在服务器机器上的其他地方运行。请参阅我们的示例以了解如何从 Web 应用程序获取令牌,任何来自https://github.com/AzureADsamples的带有“openid”或“oauth”的东西都可以使用。

于 2015-03-01T21:43:19.130 回答