【发布时间】:2018-10-04 03:14:59
【问题描述】:
我正在尝试使用 Xamarin.Auth 对我的 Android 应用程序进行身份验证。前段时间,Google 制定了一项政策,即您不能在嵌入式 Web 视图中执行此操作(出于完全正当的原因)。
我正在尝试在浏览器中打开帐户身份验证页面,但不断获取嵌入式 Web 视图。我了解isUsingNativeUI 需要在以下代码中为true:
_auth = new OAuth2Authenticator(clientId, string.Empty, scope,
new Uri(Constant.AuthorizeUrl),
new Uri(redirectUrl),
new Uri(Constant.AccessTokenUrl),
null,
isUsingNativeUI = true);
在我的应用程序的每一点,这总是等于 true。
在其他地方,我有代码重定向到 应该 是浏览器:
var authenticator = Auth.GetAuthenticator();
Intent intent = authenticator.GetUI(this);
this.StartActivity(intent);
无论如何,每当我尝试运行该项目时,我都会收到一个可怕的403 disallowed_useragent 错误。我还缺少其他元素吗?
据我所知,在构造函数中设置auth.IsUsingNativeUI = true 应该表明它必须在浏览器中打开。我一直在关注this 示例来尝试调试但没有成功。我什至把这个家伙的 repo 拉到我的机器上并运行它 - 重定向时的 Intent 变量几乎相同。
会不会有一些我错过的愚蠢的东西?还有什么问题?
【问题讨论】:
-
您是否在没有安装 Chrome 的模拟器上进行测试?
-
@SushiHangover 是的,但是,对于我从帖子中链接的示例中提取的代码来说,这不是问题。我可以尝试安装它,但它对在同一个模拟器上运行的两个单独的代码块没有任何影响。
-
Chrome CustomTab在 Android 平台上通过 X.Auth 使用,因此需要安装 Chrome,否则它将降级以使用WebView并因此出现 403 错误。这当然在大多数设备上通常不是问题,因为 G.Apps 是工厂安装的(现在有其他浏览器已经实现CustomTab我不确定 Xamarin.Auth 是否会使用它们,但我有我的拥有自己的身份验证库...) -
@SushiHangover 你能解释一下为什么我提供的示例在没有安装 chrome 的情况下可以正常工作吗?
-
假设您获得了安装在基本模拟器图像上的
com.android.browser,它只是WebView之上的一个shell(它是Android 的一部分)框架)。您可以通过将 Intent 传递给 PackageManager.QueryIntentActivities 来查看将要使用的包。如果您安装了 Chrome,它将返回 com.android.chrome、com.chrome.beta、com.chrome.dev 或 com.google.android.apps.chrome(取决于您从 Play 商店安装的内容)
标签: xamarin xamarin.forms google-authentication xamarin.auth