首页 > 解决方案 > ADAL AcquireTokenAsync 不想要父窗口

问题描述

我想将 Azure AD 身份验证添加到我的桌面应用程序,因此我有一个可用于 Web API 的 OAuth2 访问令牌。身份验证本身正在工作,我的问题是parentWindow. 只要身份验证窗口可见,我不希望我的表单可访问/可单击。但是每次我将我的主要形式指定为parentWindow时,我都会收到一条InvalidOperationException消息:

跨线程操作无效:控件“FormMain”从创建它的线程以外的线程访问。

如果我只指定表单的句柄作为parentWindow参数(它只需要一个object),它会显示“BrowserAuthenticationWindow”而不是“FormMain”,但错误是相同的。这是发生错误的代码行:

var token = await authContext.AcquireTokenAsync(
    resourceUri, ClientId, new Uri(redirectUri),
    new PlatformParameters(PromptBehavior.Auto, parentWindow));
    //                      also doesn't work:  parentWindow.Handle

我也试图通过使用来避免错误InvokeRequired,但它没有用。

任何想法如何解决这个问题?

标签: c#.netmultithreadingwinformsadal

解决方案


在这一点上,我认为这是 3.18 版中引入的 Microsoft.IdentityModel.Clients.ActiveDirectory nuget 中的一个错误,并将在他们的 GitHub 存储库上打开一个问题。如果您可以降级到版本 3.17.3,您将看到相同的代码可以工作,并且没有抛出跨线程异常。

问题在 github 上打开


推荐阅读