适用于应用的 Android SSO(单点登录)

Posted

技术标签:

【中文标题】适用于应用的 Android SSO(单点登录)【英文标题】:Android SSO (Single sign-on) for app 【发布时间】:2011-04-04 23:33:40 【问题描述】:

是否有任何免费的 android 单点登录机制可以优雅地与非 web 应用程序一起使用?说,类似...

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

    该应用会为您提供一个用户名字段、一个密码字段和一个提交按钮。

    您输入您的用户名和密码。然后,应用会将您的用户名和哈希密码连同应用服务器生成的令牌一起转发到登录服务。

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

    应用将签名的令牌中继到服务器。

    服务器检查签名,确认签名的有效性并由其信任的权威机构签名,然后继续进行,就像用户向 IT 提供了有效的本地用户名和密码一样。

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

或者,是否存在类似这样的工作流程...

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

    应用程序通过 Intent 生成一个新浏览器,将您发送到登录提供程序的网站,通过 Intent 将令牌作为 POST 表单变量传递给浏览器(最终是提供程序)。

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

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

【问题讨论】:

呃,也许吧。在 OpenID 的情况下,我想一个更好的问题可能是,“是否存在关于如何在具有非理论用户的真实 Android 应用程序中实际使用 OpenID 的连贯解释?”到目前为止,我绊倒的所有事情都有点像“这就是 xxx 理论上应该如何工作,但迄今为止没有人真正实现它......或者他们做到了,但几个月后发生了一些事情把它弄坏了。” 看看code.google.com/p/openid4java 貌似已经修改为在android中使用了(groups.google.com/group/openid4java/browse_thread/thread/…) 【参考方案1】:

您是否尝试或考虑过使用 Firebase? https://firebase.google.com/docs/auth/?hl=es-419

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

看看https://github.com/firebase/FirebaseUI-Android我在个人项目中使用它,为我节省了很多时间。

【讨论】:

【参考方案2】:

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

https://www.rfc-editor.org/rfc/rfc7636

流程如下:

    您的应用会生成一个随机密钥 (code_verifier),它是转换后的值 (code_challenge),并以 code_challenge 作为参数导航到授权服务器 授权服务器使用授权码重定向回您的应用 您的应用将authorization_codecode_verifier 发送到身份验证服务器以获取授权令牌 服务器使用authorization_codecode_verifier(它已经有code_challenge,所以它可以验证code_verifier是否正确),然后使用令牌返回您的应用程序。

实际上,您可以使用 Auth0 之类的东西在您的应用中实现它。

【讨论】:

【参考方案3】:

使用 Android 帐户管理器 进行 SSO。 在下面提供参考仅供参考。您必须深入了解客户经理。 安卓开发者:https://developer.android.com/training/id-auth 博客示例:https://www.zoftino.com/android-account-manager-&-create-custom-account-type

【讨论】:

以上是关于适用于应用的 Android SSO(单点登录)的主要内容,如果未能解决你的问题,请参考以下文章

单点登录

SSO单点登录的发展由来以及实现原理

SSO单点登录的发展由来以及实现原理

如何:使用 Parse 在 Xamarin.Android 应用程序上进行 Facebook 单点登录 (SSO)?

单点登录(SSO)简介

sso单点登录的原理详解,及Shiro同时支持Session和JWT Token两种认证方式,和Session和JWT整合方案