ADAL AcquireTokenAsync不需要父窗口

时间:2018-07-18 14:39:07

标签: c# .net multithreading winforms adal

我想将Azure AD身份验证添加到我的桌面应用程序,因此我有一个OAuth2访问令牌,可以用于Web API。身份验证本身正在运行,我的问题是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来避免该错误,但是它没有用。

有什么办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

目前,我认为这是3.18版中引入的Microsoft.IdentityModel.Clients.ActiveDirectory nuget中的错误,并将在其GitHub存储库上引发一个问题。如果您可以降级到3.17.3版本,则将看到相同的代码有效,并且不会引发跨线程异常。

Issue opened on github