如何实现OAuth的单点登录/登出Chrome浏览器自定义选项卡

问题描述 投票:1回答:1

我试图实现OAuth的单点登录/在我目前的Android应用程序注销。

我使用Chrome的自定义选项卡

 implementation 'com.android.support:customtabs:28.0.0'

登录做工精细,铬自定义选项卡存储用户的cookie,并预期在流动工作的所有迹象。

新的登录方式:

  1. 清除浏览器的cookies
  2. 结算应用程序存储
  3. Android应用程序加载登录的网址与Chrome的自定义选项卡
  4. 用户必须输入用户名和密码
  5. 重定向与自定义方案“回调” URL到我的Android应用程序,我收到一个有效的访问令牌。

更新:由于我的Android设备已经收到了Chrome浏览器更新到版本72以上已停止工作。请参阅我的相关SO question

如果Chrome的安全策略,其中它不允许无关联的用户交互重定向,为什么会收到一个新的intent当我加载第一网址登录有提示=无?在这一点上已经没有用户交互。这一步仍然连更新到Chrome浏览器72打破了标志与提示=登录和在第二步确定后在那里工作的用户的交互,不仅用户必须输入自己的用户名和密码,然后他们点击符号的按钮。

当我加入“同意”这两个提示,蛋“的提示=无同意”,然后选择“提示=登录同意”的用户可以登录,但它们都带有一个“批准”屏幕,允许其继续进入我的应用程序才。为什么加入“同意”让我的标志中的工作?和哪里的“审批”屏幕从何而来?

随后登录:

  1. 应用程序加载的登录网址与Chrome的自定义选项卡
  2. 该浏览器自定义选项卡用户的cookie被采用,为“默认登录”用户。
  3. 用户进入Android应用

我有签出的问题。

当用户点击退出按钮我的应用程序中,该应用程序通过自定义浏览器选项卡读取登出URL但它被“卡住”。用户看到的屏幕是空白屏幕。

我相信这是由于在此提到的Chrome自定义选项卡的安全约束SO质疑CCT get stuck...

更准确地说这种说法:

Chrome的强制政策,如果重定向是由用户触发的动作,如提交重定向表单或点击链接只会发送重定向到您的应用程序。

我所看到的是,我们的用户可以随时默默登录没有问题,即使没有用户交互,如果当我们尝试用CCT我们总是得到一个空白CCT页上的“卡壳”加载登出网址。

我不明白的是为什么沉默登录工程和“纲领性”退出不工作,而他们都不具有参与任何用户交互。

如果我猜的话,我想说的登录作品的CCT检测用户Cookies和接受的是,这些就只能一直与存储相关的用户交互。

凡为标志出没有任何用户交互的。

我怎样才能解决我的CCT注销问题?

我是否需要在网址加载到一个网页,举办了退出按钮?

android oauth-2.0 chrome-custom-tabs
1个回答
1
投票

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

据我所知重定向到一个网页,不需要用户同意,是为了限制较少受到比重定向到App。

所以,你的逻辑将变更为以下几点:

新的登录方式:

  1. 清除浏览器的cookies
  2. 结算应用程序存储
  3. Android应用程序加载登录的网址与Chrome的自定义选项卡
  4. 用户必须输入用户名和密码
  5. 重定向URL到您的web应用程序,将然后将它与任何PARAMS它得到,即重定向到您的应用程序。 Access Token

在退出过程中同样的事情。在您的网页,你就会有一个自动重定向(使用JS例如)和故障转移的选项,用户点击一个按钮,返回到您的应用程序。你网页看起来是这样的:

<!doctype html>
<html lang="en">
<head>
    <script type="text/javascript">
        document.addEventListener("DOMContentLoaded", function() {
            document.getElementById("redirectButton").click();
            setTimeout(function() {
                window.location.href = "{{ path('homepage') }}";
            }, 10000);
        });
    </script>    
</head>
<body>
<p>Redirecting to XXX app, it will only take few seconds...</p>
<a href="{{ redirect_url }}" id="redirectButton">Click here to go back to XXX App</a>
</body>
</html>

请注意,这个过程可以快速的用户甚至可能不会看到这个页面

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