应用程序的Android SSO(单点登录)

应用程序的Android SSO(单点登录),android,single-sign-on,Android,Single Sign On,Android是否有任何免费的单点登录机制,可以与非网络应用程序配合使用?比如说,类似于 您启动我的应用并使用它,直到它从应用服务器发出需要身份验证的请求。它使用随机令牌响应该请求,服务器将在短时间内与您关联 该应用程序为您提供用户名字段、密码字段和提交按钮 您可以输入用户名和密码。然后,应用程序将您的用户名和哈希密码以及应用程序服务器生成的令牌转发给登录服务 登录服务确定您的用户名和密码是否有效。如果是,它会对令牌进行数字时间戳和签名,并将签名的令牌返回给应用程序 应用程序将已签名的令牌中继到

Android是否有任何免费的单点登录机制,可以与非网络应用程序配合使用?比如说,类似于

  • 您启动我的应用并使用它,直到它从应用服务器发出需要身份验证的请求。它使用随机令牌响应该请求,服务器将在短时间内与您关联

  • 该应用程序为您提供用户名字段、密码字段和提交按钮

  • 您可以输入用户名和密码。然后,应用程序将您的用户名和哈希密码以及应用程序服务器生成的令牌转发给登录服务

  • 登录服务确定您的用户名和密码是否有效。如果是,它会对令牌进行数字时间戳和签名,并将签名的令牌返回给应用程序

  • 应用程序将已签名的令牌中继到服务器

  • 服务器检查签名,确认签名有效并由其信任的机构签名,然后继续操作,就像用户向其提供了有效的本地用户名和密码一样

  • 我怀疑我只是在术语上迷路了,但到目前为止我得到的印象是,所有常见的SSO提供商——Twitter、Facebook等——只允许用户使用普通浏览器登录,并且您要么不被允许执行我描述的操作,或者他们做了一些事情,使得除了普通浏览器之外的任何东西都无法使用(比如通过Javascript动态创建登录表单,以防止开发人员尝试使用自己的应用程序作为登录外观)

    或者,是否存在这样的工作流

  • 您启动我的应用程序并使用它,直到web服务要求您登录。应用程序服务器生成令牌并将其返回给应用程序

  • 该应用程序通过intent生成一个新浏览器,将您发送到登录提供商的网站,并通过intent将令牌作为发布的formvar传递给浏览器(最终是提供商)

  • 您使用浏览器窗口登录,浏览器窗口关闭--返回到我的应用程序

  • 登录提供商对令牌进行签名,然后通过HTTP POST将其直接发送到我的应用服务器,这样我就可以记录其提交、验证证书,并将其视为用户直接提交给应用服务器的有效用户名和密码


  • 您是否尝试过或想过使用Firebase

    它有一些有用的工具,您可以使用多个社交连接器和用户/密码登录,它们提供了一个库来集成整个UI和服务器流程,甚至可以为您利用google smart lock


    看看我在一个个人项目中使用过它,节省了我很多时间。

    您在
    部分中描述的内容或者类似于使用代码交换验证密钥(PKCE)OAuth 2.0授权的授权代码

    流程如下:
    1.您的应用程序生成一个随机密钥(
    code\u验证程序
    )及其转换值(
    code\u质询
    ),并以
    code\u质询
    作为参数导航到授权服务器
    2.授权服务器使用授权代码重定向回您的应用程序
    3.您的应用程序将
    authorization\u code
    code\u验证器
    发送到身份验证服务器以获取授权令牌
    4.服务器使用
    authorization\u code
    code\u验证器
    (它已经有
    code\u challenge
    ,因此它可以验证
    code\u验证器
    是否正确),然后带着令牌返回到您的应用程序


    在实用方面,您可以使用类似Auth0的东西在应用程序中实现它。

    使用Android帐户管理器实现SSO。

    提供以下参考资料仅供参考。你必须深入了解客户经理。
    Android开发者:

    博客举例:

    Er,也许吧。在OpenID的例子中,我想一个更好的问题可能是,“是否存在一个连贯的解释,说明如何在现实世界的Android应用程序中与非理论用户一起实际使用OpenID?”到目前为止,我遇到的一切都是类似的“理论上xxx应该是这样工作的,但到目前为止,还没有人真正做到这一点。。。或者他们真的这么做了,但几个月后发生的事情打破了它