我们正在使用使用Azure Active Directory身份验证的Xamarin.Forms开发跨平台移动应用程序。对于这种情况,我们使用 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(如果它确实会起作用,请写下怎么做!),为我们的app和AuthHost.exe设置Loopback Exempts(没有改变)。
我很乐意使用任何可行的方法,它可以是原生UWP方法,因为我们可以使用平台依赖。
修改
当我尝试通过VPN连接时,当我登录时收到消息 - 我们无法立即连接到您需要的服务。检查您的网络连接或稍后再试。 - 即使我从visual studio运行应用程序。
至于试图找到Fiddler问题的原因我被震惊了 - 当我用fiddler监控authhost.exe进程时(我选择身份验证弹出窗口作为目标进程) - 然后验证成功完成。我停止用提琴手监视的那一刻 - 它再次失败。
答案 0 :(得分:2)
有趣的是,你让它与Fiddler一起工作,附加到AuthHost。在您的故障排除中,您是否尝试过以下选项?
启用AppPackage清单中的功能
添加环回免除
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
答案 1 :(得分:0)
不确定它是否相关,但我遇到了与连接到天蓝色移动应用后端的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