【问题标题】:ADFS : Acquiring token with PromptBehavior.AutoADFS:使用 PromptBehavior.Auto 获取令牌
【发布时间】:2018-04-25 17:45:00
【问题描述】:

根据PromptBehavior.AutoDocumentation,我了解:

如果缓存中不存在令牌,但用户是已知的,或者会话 cookie 在用于 互动,对话flashes but disappears immediately

但是,有没有办法完全抑制这个对话框,因为当我第一次调用 AcquireTokenAsync 并且如果返回令牌需要时间时,空白对话框不会显示为 flash(如上面的文档中所示),相反,它会在整个期间停留,直到返回令牌。在随后的调用中,它不会发生,因为我已经获取了令牌并且它存在于缓存中。

有没有办法在PromptBehavior = Auto的情况下完全抑制/隐藏它?


请注意: PromptBehavior = Never 不是文档中的选项

如果您使用 PromptBehavior = Never 并且令牌不存在于 缓存,或者需要用 UI 刷新,对 AcquireTokenAsync 的调用 将失败并出现 AdalException 类型的异常

【问题讨论】:

    标签: c# azure azure-active-directory adal


    【解决方案1】:

    您可以先拨打AcquireTokenSilentAsync

    ADAL.NET 中公共客户端应用程序(桌面/移动应用程序)的recommended pattern 是:

    try
    {
     result = await ac.AcquireTokenSilentAsync(resource, clientId);
    }
    catch (AdalException adalException)
    {
     if (adalException.ErrorCode == AdalError.FailedToAcquireTokenSilently
         || adalException.ErrorCode == AdalError.InteractionRequired)
      {
       result = await ac.AcquireTokenAsync(resource, clientId,redirectUri,
                                           new PlatformParameters(PromptBehavior.Auto));
      }
    }
    

    【讨论】:

    • 我确实试过了。 第一次无论如何,对话框都会出现/闪烁,因为AcquireTokenSilentAsync 将失败。它会出现异常,然后尝试使用AcquireTokenAsync 获取 - 这将闪现浏览器对话框。后续调用不会。 (正如问题中已经提到的)。所以问题是我应该如何完全抑制对话框?
    • 你在哪个平台上? .NET 框架? .NET 核心? Xamarin.Android? Xamarin.iOS? UWP?如果您使用 .NET Framework 或 .NET core(我想您是),则需要实现 token cache serialization,这样您将看到对话框是应用程序的第一次使用,但随后令牌将在缓存将被序列化并重新水化。我上面提供的链接包含指向实现此类缓存的示例的链接
    • .NET 框架 4.5。我不想在第一次使用中看到对话框 - 这是我的观点。我知道它现在会弹出,因为令牌不在缓存中。但是我们可以增强 api 以便与 PropmtBehaviour.Auto 一起,我可以通过 `false' 来隐藏对话框吗?
    • @Angshuman。我很困惑。如果您不想看到该对话框,则意味着您不想使用交互式流程。你会编写一个在 Windows 上运行的应用程序吗?在这种情况下,您可能想使用 windows integrated authentication ?
    • 我在 Windows 上,我试过了。它抛出异常 - {"There was an error deserializing the object of type Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.OAuth2.TokenResponse. Encountered unexpected character '<'."} 还有关于这个方法的评论 - This feature is supported only for Azure Active Directory and Active Directory Federation Services (ADFS) on Windows 10.
    猜你喜欢
    • 2013-10-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2017-06-24
    • 2013-04-26
    相关资源
    最近更新 更多