【问题标题】:ADAL page fails to load on UWP within corporate network when using ADFS使用 ADFS 时,ADAL 页面无法在企业网络内的 UWP 上加载
【发布时间】:2017-02-16 09:34:18
【问题描述】:

我们正在使用 Xamarin.Forms 开发一个跨平台移动应用程序,该应用程序使用 Azure Active Directory 身份验证。对于这种情况,我们使用 Microsoft.IdentityModel.Clients.ActiveDirectory nuget。它适用于除此之外的任何情况:

UWP 用户在连接到托管 ADFS 的网络时尝试使用公司帐户登录 - 键入 user@domain 后,adal 页面尝试重定向到组织登录页面并失败并显示消息- 我们现在无法连接到您需要的服务。检查您的网络连接或稍后再试。

  • 当我们从 Visual Studio 运行应用程序时,该问题不会出现。只有在通过 .appx 安装应用时才会出现。

  • 当用户连接到其他网络时,问题不会出现 - 我在连接到我的 Android 手机上设置的 HotSpot 时尝试登录,并且我成功登录。

  • 当用户连接到公司网络,但使用不在我们 ADFS 中的帐户登录时,问题不会出现。


我们使用的登录方式:

AuthenticationContext.AcquireTokenAsync(resource, clientId, RedirectUri, platformParameters)

我们将platformParameters的参数useCorporateNetwork设置为true,在项目属性->包清单->功能中,我们设置了私有网络(客户端和服务器)等标志

当尝试在不设置 RedirectUri 的情况下登录时,将出现公司登录页面,您将能够输入您的密码/登录名并对其进行验证,但这对我们无用,因为我们需要将登录名重定向到我们的API - 以这样的方式登录时,您将遇到指定的 redirectUri 不是为使用的 clientId 配置的错误。

我一直在尝试不同的方法,例如使用本机 WebAuthenticationCoreManager,但它不支持 RedirectUri(如果支持并且可以工作,请写下如何!),为我们的应用和 AuthHost.exe 设置 Loopback Exempts(没有任何改变)。


我很乐意使用任何可行的方法,它可以是原生 UWP 方法,因为我们可以使用平台依赖性。


编辑

当我尝试通过 VPN 连接时,我在登录时收到消息 - 我们现在无法连接到您需要的服务。检查您的网络连接或稍后再试。 - 即使我从 Visual Studio 运行应用程序。

至于试图找到 Fiddler 问题的原因,我惊呆了——当我用 fiddler 监视 authhost.exe 进程时(我选择身份验证弹出窗口作为目标进程)——然后身份验证成功完成。当我停止使用 fiddler 进行监控时 - 它再次失败。

【问题讨论】:

  • 既然您提到了 Azure Active Directory 身份验证,您是否将您的本地 Active Directory 与 Azure Active Directory 集成?
  • 至于 AAD,我只负责使用它,而不是配置,但由于该应用程序在 Android 和 iOS 上运行没有问题(即使在公司网络中),那么它应该全部正确设置在 AAD 方面,对吧?
  • Azure Active Directory 与 Active Directory 不同,为了正确理解,我想与您确认您使用的是 Azure Active Directory 还是 Active Directory。关于 Azure Active Directory,您可以参考 here
  • 是的,这是 Azure Active Directory,与我们的后端团队进行了交谈,并在 Azure 门户上进行了仔细检查。
  • 你应该得到一个提琴手跟踪,看看是否存在真正的连接问题。

标签: azure uwp fiddler adfs adal


【解决方案1】:

有趣的是,您可以使用附加到 AuthHost 的 Fiddler。在您的疑难解答中,您是否尝试过以下选项?

在 AppPackage 清单中启用功能

  • privateNetworkClientServer
  • 企业认证
  • sharedUserCertificate

添加环回豁免

CheckNetIsolation.exe LoopbackExempt -a -n=<YourPackageFamilyName>
CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.a_8wekyb3d8bbwe 
CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.a.p_8wekyb3d8bbwe
CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.sso_8wekyb3d8bbwe
CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.sso.p_8wekyb3d8bbwe 

为 AuthHost 启用专用网络

REG ADD "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\authhost.exe" /v EnablePrivateNetwork  /t REG_DWORD /d 1 /f

【讨论】:

  • 使用您发送的行编辑注册表解决了问题。现在,我应该怎么做才能让刚刚通过商店安装我们的应用程序的客户使用该应用程序?有没有可能是我的工作计算机的配置问题(例如 IT 部门使用了一些预设的网络配置)?
  • @macchmie3 你有没有想过如何让它在没有注册表编辑的情况下工作?
  • @macchmie3 有没有什么可以让它在不编辑注册表的情况下工作。因为我们无法在所有最终用户设备中进行编辑。在编辑注册表时它工作正常。但我想让它在不编辑注册表的情况下工作。
【解决方案2】:

不确定是否相关,但我在连接到 Azure 移动应用后端的 UWP 应用时遇到了同样的问题。就我而言,它涉及企业身份验证 (ADAL) 以及位于中间的网络代理。除了上面指定的清单权限;我还必须更新服务器端的 web.config 以启用代理身份验证通过。有关详细信息,请参阅以下链接。

<system.net> 
    <defaultProxy useDefaultCredentials="true" /> 
</system.net>`

Fix it so that .NET apps can access HTTP thru authenticating proxy server by default

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 2016-01-17
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多