【问题标题】:ADAL AcquireTokenAsync doesn't want parent windowADAL AcquireTokenAsync 不想要父窗口
【发布时间】:2018-09-28 01:04:39
【问题描述】:

我想将 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# .net multithreading winforms adal


【解决方案1】:

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

Issue opened on github

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-26
    • 2016-09-21
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    相关资源
    最近更新 更多