基于浏览器的身份验证对话框未能完成
The browser based authentication dialog failed to complete
我有一个 WPF 应用程序,我正在按照本教程进行操作:https://blogs.msdn.microsoft.com/dsnotes/2017/05/10/adal-secure-web-api-with-adfs-3-0-for-desktop-client/ 让 WPF 使用 ADFS 进行身份验证。
我在主页上有一个按钮,下面是按钮点击事件处理程序的代码:
string authority = "https://server1.mycompany.local/adfs";
string resourceURI = "https://localhost/MyWebAPIsample/";
string clientID = "bdf737f9-567a-4998-b5e5-500b9bc2d776";
string clientReturnURI = "https://arbitraryreturnuri/";
var authContext = new AuthenticationContext(authority, false);
var authResult = await authContext.AcquireTokenAsync(resourceURI, clientID, new Uri(clientReturnURI), new PlatformParameters(PromptBehavior.Auto));
在最后一行 var authResult = await ...
我得到这个错误:
Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException: ' The browser based authentication dialog failed to complete. Reason: The request could not be processed by the server due to invalid syntax.'
和 authentication_ui_failed
但是,在 UI 上,我清楚地看到身份验证 window 弹出窗口,我可以输入我的 AD 凭据来登录。我已经尝试过其他帖子的修复,但我可以似乎弄清楚出了什么问题。我的代码有什么明显的错误或者我应该仔细检查以弄清楚发生了什么吗?我对 AD、ADFS 和 ADAL 库还是陌生的。谢谢!
注意:我正在使用 Visual Studio 2017 和 Windows Server 2016。我有一个 NodeJS 后端,但我认为这与本次讨论无关。
经过几个小时的愚蠢调试,我终于解决了这个问题。在另一个线程上,我遇到了一个显示 "enable forms authentication" 的解决方案,我检查了它并启用了它,所以我认为这很好。但是,我检查了其他项目(同样,我还是 ADFS 的新手),这导致我的系统不使用表单身份验证(我不知道 - 我所知道的是我正在输入我的 AD 用户凭据) .在取消select所有其他选项后,身份验证似乎与我原来的身份验证略有不同window并且有效。
以下是 Windows Server 2016 上访问 "Authentication" 的步骤,就像我五岁一样解释,因为那是我对 adfs 的理解水平
- 打开服务器管理器
- 在工具下,打开 AD FS 管理
- 单击左侧的
Services
选项卡
- 右键单击
Authentication Methods
和 select Edit Primary Authentication Methods
- Deselect 除
Forms authentication
在内联网和外联网上的所有身份验证方法
我有一个 WPF 应用程序,我正在按照本教程进行操作:https://blogs.msdn.microsoft.com/dsnotes/2017/05/10/adal-secure-web-api-with-adfs-3-0-for-desktop-client/ 让 WPF 使用 ADFS 进行身份验证。
我在主页上有一个按钮,下面是按钮点击事件处理程序的代码:
string authority = "https://server1.mycompany.local/adfs";
string resourceURI = "https://localhost/MyWebAPIsample/";
string clientID = "bdf737f9-567a-4998-b5e5-500b9bc2d776";
string clientReturnURI = "https://arbitraryreturnuri/";
var authContext = new AuthenticationContext(authority, false);
var authResult = await authContext.AcquireTokenAsync(resourceURI, clientID, new Uri(clientReturnURI), new PlatformParameters(PromptBehavior.Auto));
在最后一行 var authResult = await ...
我得到这个错误:
Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException: ' The browser based authentication dialog failed to complete. Reason: The request could not be processed by the server due to invalid syntax.'
和 authentication_ui_failed
但是,在 UI 上,我清楚地看到身份验证 window 弹出窗口,我可以输入我的 AD 凭据来登录。我已经尝试过其他帖子的修复,但我可以似乎弄清楚出了什么问题。我的代码有什么明显的错误或者我应该仔细检查以弄清楚发生了什么吗?我对 AD、ADFS 和 ADAL 库还是陌生的。谢谢!
注意:我正在使用 Visual Studio 2017 和 Windows Server 2016。我有一个 NodeJS 后端,但我认为这与本次讨论无关。
经过几个小时的愚蠢调试,我终于解决了这个问题。在另一个线程上,我遇到了一个显示 "enable forms authentication" 的解决方案,我检查了它并启用了它,所以我认为这很好。但是,我检查了其他项目(同样,我还是 ADFS 的新手),这导致我的系统不使用表单身份验证(我不知道 - 我所知道的是我正在输入我的 AD 用户凭据) .在取消select所有其他选项后,身份验证似乎与我原来的身份验证略有不同window并且有效。
以下是 Windows Server 2016 上访问 "Authentication" 的步骤,就像我五岁一样解释,因为那是我对 adfs 的理解水平
- 打开服务器管理器
- 在工具下,打开 AD FS 管理
- 单击左侧的
Services
选项卡 - 右键单击
Authentication Methods
和 selectEdit Primary Authentication Methods
- Deselect 除
Forms authentication
在内联网和外联网上的所有身份验证方法