我可以使用
行在本地工作时验证用户身份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
答案 0 :(得分:0)
您正在执行的令牌获取流程应在桌面应用程序上运行,而不是在Web应用程序上运行。桌面上显示的对话框由您的本地进程和本地Windows会话的存在驱动。它不能在一个Web应用程序中工作,因为没有Windows会话,并且该进程正在服务器计算机上的其他位置运行。 请参阅我们的示例以了解如何从Web应用程序获取令牌,https://github.com/AzureADsamples中带有“openid”或“oauth”的任何内容都可以使用。