为什么Android的Chrome浏览器更新从61.0.3163.98在Chrome中自定义选项卡72.0.3626.76休息的OAuth登录?

问题描述 投票:8回答:2

我司生产的Android应用程序使用Chrome的自定义选项卡进行登录的OAuth

这是昨天精细工作时,Chrome浏览器版本为61.0.3163.98

继铬的过夜更新72.0.3626.76登录过程卡在嵌入式浏览器,用户会看到一个空白屏幕。

如果我们卸载Chrome浏览器更新登录开始重新工作

有什么用Chrome和/或Chrome自定义选项卡,打破我们的登录过程改变了吗?

如果将我的默认浏览器Firefox的我的应用程序的登录工作正常。

事实上,如果我更改默认的浏览器Chrome以外的其他任何它正常工作,甚至歌剧作品,虽然歌剧犯规显示嵌入式浏览器。

它也可以当我卸载了Chrome的更新和恢复到Chrome版本61.0.3163.98

更多详情:-

Step 1). Load URL with prompt=none and my custom scheme Redirect URL.
Step 2). My App receives a NEW INTENT containing the auth code.
Step 3). I attempt to access my back end APIs with this code, which fails with 400
Step 4). Load URL prompt=login and my users are presented with a sign in screen where they enter their credentials and click on the Sign In button.
Step 5). NOTHING HAPPENS, the user is presented with a blank screen, my app does not receive a NEW INTENT.

继承人的代码,我采用通过Chrome的自定义选项卡,打开登录网址

private void openCustomTab() {
    codeVerifier = generateRandomCodeVerifier();
    checkCodeVerifier(codeVerifier);
    codeChallenge = deriveCodeVerifierChallenge(codeVerifier);

    CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
    CustomTabsIntent customTabsIntent = builder.build();
    customTabsIntent.launchUrl(this, getURL(PROMPT_NONE));
}

上面的代码加载与提示=没有URL,同时也规定了我的自定义方案重定向URL。

我的Android应用程序接收onNewIntent一个新的intent包含一个AUTHCODE,我试图用这个authocode从而未能与400检索访问令牌。

然后我使用自定义标签如下加载第二网址以提示=登录: -

            final CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
            builder.setToolbarColor(Color.BLUE);

            final CustomTabsIntent customTabsIntent = builder.build();
            customTabsIntent.launchUrl(SignInActivity.this, getURL(PROMPT_LOGIN, authCode));

通过加载此URL以提示=登录,用户可以输入他们的凭据,然后点击登录按钮。

它在这一点上,Chrome的自定义选项卡被卡住。

这里是网络电话我捕捉使用Stetho,取得了最后一次通话是authorization.ping显示为已取消

enter image description here

我已经找到了解决此问题如下: -

我加了“同意”的附加提示为“无”,然后“登录”的提示存在。

现在用户看到标题为同意画面

oauth.approval.page.template.title

当用户看到的可选择的选项列表,包括

ACCESS TO YOUR DATA
SIGN IN WITH OPENID CONNECT
OPENID CONNECT PROFILE SCOPE
OPENID CONNECT EMAIL SCOPE

在这个屏幕的底部那里有两个选项

oauth.approval.page.template.allow
oauth.approval.page.template.dontAllow

当用户选择

oauth.approval.page.template.allow

他们现在可以进入到Android应用程序。

唯一的问题是用户看到,每当他们登录该批准屏幕

android google-chrome chrome-custom-tabs
2个回答
2
投票

我最近回答了这个同样的问题,我相信,随着Chrome的更新增加了一些安全层。我也有同样的问题,不同的浏览器(股票浏览器自带的不同的非官员自定义光盘)之前,我认为我们不和安全的情况下,其他浏览器实现了相同的行为。

为了避免这些问题,我建议你实现一个临时页面,这将有助于处理所有的OAuth2重定向。

该解决方案还具有避免了用户“允许”登录每一次的优势。

你可以在这里找到一个详细的解答:How to implement OAuth single Sign In/Sign Out with Chrome Custom Tabs


1
投票

已上作出了更新的唯一变化是破/去除HPKP的(基于HTTP的公共密钥钢钉)

基于HTTP的公共密钥钢钉(HPKP)旨在允许网站发送一个HTTP标头销出现在该网站的证书链中的公钥的一个或多个。不幸的是,它具有非常低的采用,虽然它提供了对证书misissuance安全,它也创造服务和敌对钉扎的拒绝的风险。由于这些原因,这个功能已经被删除。

你得到因认为400错误的请求,那只是我的猜测。

如果一切顺利,该Bundle包含使用KEY_AUTHTOKENtoken = bundle.getString(AccountManager.KEY_AUTHTOKEN);AccountMangerCallback密钥的有效令牌,你是去比赛

用了OAuth2服务认证已经改变了developer.android.com,则需要重新申请验证令牌,一些验证器都需要与给人一种有效令牌,然后用户直接交互。

尝试运行的AccountManager或任何API你实现你clientID的,clientSecret,授予类型,或者您redirectURI之前得到KEY_INTENT

查看以下链接,并采取任何新的实现:https://developer.android.com/training/id-auth/authenticate

© www.soinside.com 2019 - 2024. All rights reserved.