首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现Android应用程序的单点登录

实现Android应用程序的单点登录
EN

Stack Overflow用户
提问于 2013-02-16 18:51:57
回答 1查看 3.5K关注 0票数 7

我有4-5个安卓应用程序,我想实现所有这些应用程序的单点登录。因此,如果用户已经登录到任何一个应用程序,他将不会被要求再次登录其他应用程序。如何在Android中实现??

EN

回答 1

Stack Overflow用户

发布于 2016-11-21 19:05:34

实现SSO需要有一个保存用户凭据信息的公共数据库。一种方法是实现您自己的身份验证服务器,该服务器公开登录、注册、重置和忘记密码API,您的每个应用程序都将使用这些API登录到应用程序。

假设您正在使用JWT来维护无状态,这意味着auth服务器通过任何android应用程序每次成功登录都会使用JWT进行响应。

因此,您在每个应用程序中的启动器活动不应该是登录,而是仪表板或用户登录后看到的任何内容。在仪表板的on_create中,检查共享首选项中是否存在可用的jwt。如果有,请继续使用仪表板。但是如果没有登录活动,就转到登录活动,让用户先登录。登录后,将jwt保留在共享首选项中,以供其他应用程序使用。您需要确保所有共享首选项都使用相同的名称空间来访问jwt。

为了让它更有效,你可以实现一个库模块,用于登录,注册和忘记密码,以包括在每个应用程序中,您将为所有应用程序准备好该部分。三个活动的XML文件可以包含在lib本身中,如果app在应用程序的绘图文件中找不到,它将从lib文件中加载它们。

现在到服务器部分,实现你的自定义身份验证服务器,说使用OAuth2是一种方法,但为了更容易,有像Stormpath或CAS这样的第三方解决方案提供这样的服务。也许你也能找到一个免费的。

您可以使用userId (用户数据库中的主键)来标识用户是否登录,而不使用JWT。

另一个要考虑的问题是,这些应用程序的应用程序服务器是否使用JWT或userId来响应应用程序请求,并根据该身份验证服务器通信令牌来决定。不用说,应用程序服务器和身份验证服务器也应该在它们之间进行通信,以便为应用程序同步用户信息。即使您使用的是第三方身份验证服务器,这也是相同的,该服务器将与保存整个用户信息的单个数据库通信,但您可能需要将应用程序服务器与第三方身份验证服务器进行同步

然而,棘手的部分是注销、重置密码和更改密码。我不是在谈论使用JWT时的注销过程,它有其自身的挑战,但我谈论的是使用SSO时的注销过程。如果用户从其中一个应用程序注销,您需要决定用户是否必须从其他应用程序注销。虽然两者都可以处理,但为了便于实现,通常是单点登出,而且它也会提供一个很好的用户体验。

此外,如果这些应用程序中的任何一个具有网站版本,并且用户从网站更改或重置密码,您需要确保用户在更改后首次使用该应用程序时再次登录设备。但是,这个逻辑必须完全在认证服务器内部的服务器端进行管理。

虽然您的问题只与android应用程序相关,但您可能必须为此实现一个服务器,并为每个应用程序修改appl服务器。这可能不完全是你的问题的本质,但你的实际需求可能会帮助我实现这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14909468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档