我试图实现OAuth的单点登录/在我目前的Android应用程序注销。
我使用Chrome的自定义选项卡
implementation 'com.android.support:customtabs:28.0.0'
登录做工精细,铬自定义选项卡存储用户的cookie,并预期在流动工作的所有迹象。
新的登录方式:
更新:由于我的Android设备已经收到了Chrome浏览器更新到版本72以上已停止工作。请参阅我的相关SO question
如果Chrome的安全策略,其中它不允许无关联的用户交互重定向,为什么会收到一个新的intent当我加载第一网址登录有提示=无?在这一点上已经没有用户交互。这一步仍然连更新到Chrome浏览器72打破了标志与提示=登录和在第二步确定后在那里工作的用户的交互,不仅用户必须输入自己的用户名和密码,然后他们点击符号的按钮。
当我加入“同意”这两个提示,蛋“的提示=无同意”,然后选择“提示=登录同意”的用户可以登录,但它们都带有一个“批准”屏幕,允许其继续进入我的应用程序才。为什么加入“同意”让我的标志中的工作?和哪里的“审批”屏幕从何而来?
随后登录:
我有签出的问题。
当用户点击退出按钮我的应用程序中,该应用程序通过自定义浏览器选项卡读取登出URL
但它被“卡住”。用户看到的屏幕是空白屏幕。
我相信这是由于在此提到的Chrome自定义选项卡的安全约束SO质疑CCT get stuck...
更准确地说这种说法:
Chrome的强制政策,如果重定向是由用户触发的动作,如提交重定向表单或点击链接只会发送重定向到您的应用程序。
我所看到的是,我们的用户可以随时默默登录没有问题,即使没有用户交互,如果当我们尝试用CCT我们总是得到一个空白CCT页上的“卡壳”加载登出网址。
我不明白的是为什么沉默登录工程和“纲领性”退出不工作,而他们都不具有参与任何用户交互。
如果我猜的话,我想说的登录作品的CCT检测用户Cookies和接受的是,这些就只能一直与存储相关的用户交互。
凡为标志出没有任何用户交互的。
我怎样才能解决我的CCT注销问题?
我是否需要在网址加载到一个网页,举办了退出按钮?
为了避免这些问题,我建议你实现一个临时页面,这将有助于处理所有的OAuth2重定向。
据我所知重定向到一个网页,不需要用户同意,是为了限制较少受到比重定向到App。
所以,你的逻辑将变更为以下几点:
新的登录方式:
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>
请注意,这个过程可以快速的用户甚至可能不会看到这个页面