Hec*_*tor 8 android google-chrome chrome-custom-tabs
我们的生产Android应用程序使用Chrome自定义标签进行OAuth登录
昨天当Chrome版本为61.0.3163.98时工作正常
在Chrome浏览器过夜更新至72.0.3626.76后,登录过程卡在嵌入式浏览器中,并向用户显示空白屏幕.
如果我们卸载Chrome更新,则登录将重新开始
使用Chrome和/或Chrome自定义标签更改了哪些内容会破坏我们的登录流程?
如果我将默认浏览器切换到Firefox,我的应用程序登录正常.
事实上,如果我将默认浏览器更改为除chrome之外的其他任何东西,它工作正常,甚至Opera工作,虽然Opera不显示嵌入式浏览器.
当我卸载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.
Run Code Online (Sandbox Code Playgroud)
下面是我用来通过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));
}
Run Code Online (Sandbox Code Playgroud)
上面的代码使用prompt = none加载URL,它还指定了我的自定义方案重定向URL.
我的Android应用程序在onNewIntent中接收包含authCode的新Intent,我尝试使用此authocode检索访问令牌,该令牌因400而失败.
然后我使用自定义选项卡加载带有prompt = login的第二个URL,如下所示: -
final CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
builder.setToolbarColor(Color.BLUE);
final CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(SignInActivity.this, getURL(PROMPT_LOGIN, authCode));
Run Code Online (Sandbox Code Playgroud)
通过使用prompt = login加载此URL,用户可以输入其凭据并单击"登录"按钮.
此时Chrome自定义标签卡住了.
这是我使用Stetho捕获的网络调用,最后一次调用是authorization.ping,显示为已取消
我已经找到了解决这个问题的方法如下: -
我在"无"然后"登录"的现有提示中添加了"同意"的附加提示.
现在,用户会看到标题为的同意屏幕
oauth.approval.page.template.title
Run Code Online (Sandbox Code Playgroud)
用户在哪里看到可选择的选项列表,包括
ACCESS TO YOUR DATA
SIGN IN WITH OPENID CONNECT
OPENID CONNECT PROFILE SCOPE
OPENID CONNECT EMAIL SCOPE
Run Code Online (Sandbox Code Playgroud)
在这个屏幕的底部有两个选项
oauth.approval.page.template.allow
oauth.approval.page.template.dontAllow
Run Code Online (Sandbox Code Playgroud)
当用户选择时
oauth.approval.page.template.allow
Run Code Online (Sandbox Code Playgroud)
他们现在可以进入Android应用程序.
唯一的问题是用户在登录时会看到此批准屏幕
该更新所做的唯一更改是中断/删除 HPKP(基于 HTTP 的公钥锁定)
基于 HTTP 的公钥固定 (HPKP) 旨在允许网站发送 HTTP 标头,该标头固定网站证书链中存在的一个或多个公钥。不幸的是,它的采用率非常低,尽管它提供了防止证书误发的安全性,但它也带来了拒绝服务和恶意锁定的风险。由于这些原因,此功能将被删除。
因此,您收到 400 Bad 请求,这只是我的猜测。
如果一切顺利,密钥Bundle中会包含一个有效的令牌,您就可以开始比赛了KEY_AUTHTOKENtoken = bundle.getString(AccountManager.KEY_AUTHTOKEN);AccountMangerCallback
developer.android.com 上的 OAuth2 服务身份验证已更改,需要再次请求身份验证令牌,某些身份验证器需要在提供有效令牌之前与用户直接交互。
KEY_INTENT 在获取 clientID、clientSecret、授予类型或重定向 URI 之前,尝试运行 AccountManager 或您正在实现的任何 API
检查以下链接并采用任何新的实现:https ://developer.android.com/training/id-auth/authenticate
| 归档时间: |
|
| 查看次数: |
548 次 |
| 最近记录: |