Turbolinks 5 Android和Omniauth/OAuth2

Turbolinks 5 Android和Omniauth/OAuth2,android,ruby-on-rails,devise,oauth-2.0,turbolinks,Android,Ruby On Rails,Devise,Oauth 2.0,Turbolinks,对Turbolinks 5安卓包装器印象深刻。它的存在促使我迈出了android开发的第一步。除了处理现有的用户身份验证过程外,一切都进展顺利。考虑到这是安全问题,我真的想确保它被正确处理 “omniauth-google-oauth2”gem的一个普通实现干净地处理了用户身份验证和会话管理,该gem链接到Desive。这是一个每月服务约100万用户的web应用程序的实时运行 用户单击登录,omniauth回调过程开始。由于该链接不是turbolink,因此turbolink android实现

对Turbolinks 5安卓包装器印象深刻。它的存在促使我迈出了android开发的第一步。除了处理现有的用户身份验证过程外,一切都进展顺利。考虑到这是安全问题,我真的想确保它被正确处理

“omniauth-google-oauth2”gem的一个普通实现干净地处理了用户身份验证和会话管理,该gem链接到Desive。这是一个每月服务约100万用户的web应用程序的实时运行

用户单击登录,omniauth回调过程开始。由于该链接不是turbolink,因此turbolink android实现会出现问题。我已成功捕获了用户从android应用程序中单击此按钮时的情况:

public void visitProposedToLocationWithAction(String location, String action) {
    Intent intent = new Intent(this, MainActivity.class);
    intent.putExtra(INTENT_URL, location);
    if (location.equals("https://example.com/users/auth/google_oauth2")) {
        Log.d("linkclicked", "oauthcaptured");
        //handle OAuth
    } else {
        this.startActivity(intent);
    }
}
我觉得我有两个选择来处理这个问题:

  • 打开具有turbolinks会话cookie副本的单独webview活动,让其进行身份验证,然后以某种方式传回turbolinks会话

  • 使用此单击启动android本机身份验证过程,然后使用HTTPS POST as将收到的身份验证令牌传递回应用服务器

  • 方法(1)是由和在单独的线程上为该包装器的ios版本推荐的(抱歉,我不能链接两个以上的URL)。但据我所知,谷歌已经禁止web视图启动oauth2流,我所做的任何尝试都会导致谷歌的阻止和警告

    我相信方法(2)是目前唯一的前进之路,但我不知道如何将身份验证令牌发布回rails服务器,并让现有的omniauth/Desive流将其拾取并连接到turbolinks android会话。我认为我还必须将turbolinks会话cookie与身份验证令牌一起发送,以便在进行阴谋之后,应用程序可以将身份验证用户绑定回android turbolinks会话cookie中包含的会话

    然而,我不确定如何继续前进,这一切只是感觉很粗略,安全性真的不应该。鉴于Omniauth如此无处不在,而且turbolinks让您的web应用程序具有android和ios版本变得如此简单,这一定是其他人正在/将要面临的问题