2013-02-16 49 views
5

我有4-5个Android应用程序,我希望为所有这些应用程序实现单点登录。因此,如果用户已经登录到任何一个应用程序,他将不会被要求再次登录其他应用程序。我怎样才能在Android中实现它?为Android应用程序实现单点登录

+0

跨多个应用程序使用SharedPreference? http://stackoverflow.com/questions/6030321/android-retrieving-shared-preferences-of-other-application – rafid059 2016-11-10 19:46:01

回答

0

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

比方说,你正在使用JWT保持无国籍,这意味着auth服务器与JWT响应通过任何Android应用程序每次成功登录。

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

为了使其更加有效,可以实现对登录,REGD库模块和忘记密码被纳入每个应用程序,你会拥有一切准备就绪的应用程序的一部分。三个活动的XML文件可以包含在lib本身中,如果应用程序不能在应用程序中找到它,应用程序将从lib文件加载它们。

现在来服务器部分,实现您的自定义auth服务器,用说的OAuth2是一种方式,但更容易,有喜欢Stormpath或CAS的第三方解决方案这将提供这样的服务。也许你可以找到一个免费的。

相反JWT的,你可以使用用户ID(用户数据库主键),以确定如果用户登录或没有。

需要考虑的另一点是,如果每个应用程序的应用程序服务器(如果有的话)都使用JWT或userId来响应应用程序请求,并且应根据该auth服务器通信令牌来决定。不用说,应用程序服务器和auth服务器也应该在它们之间进行通信以同步应用程序的用户信息。即使您使用的第三方auth服务器会与保存整个用户信息的单个数据库进行通信,但您可能需要努力将应用程序服务器与第三方auth服务器同步,这也是一样的。

但是,棘手的部分是在注销并重置密码并更改密码。如果使用智威汤逊,我不会谈论注销过程,这有其自身的挑战,但我在谈论使用SSO时的注销。如果用户从其中一个应用程序注销,则需要确定用户是否必须从其他应用程序注销。两者都可以被处理,但通常它会是一个易于实现的单一标志,它也会提供一个好的UX。此外,如果这些应用程序中的任何一个具有网站版本,并且用户从网站更改或重置密码,则需要确保用户在更改后第一次使用该应用程序时再次登录设备。然而,这个逻辑必须完全在auth服务器内的服务器端进行管理。

尽管您的问题仅与android应用有关,但您可能必须为此实现一个服务器并针对每个应用修改appl服务器。这可能有可能完全不是你的问题本质,但你的实际需求可能会帮助我实现这一点。