我目前正在使用Spring Social和Spring Security开发一个Web应用程序。在Web应用程序中,特定用户可以使用ProviderSignInController
在Facebook上登录。当工作人员成功通过FB进行身份验证时,他们也会以编程方式登录我的Spring Security本地Web应用程序。这个概念改编自spring-social-showcase。 Spring Social然后允许经过身份验证的用户创建事件,这些事件也是在Facebook页面上创建的。
现在我想写一个Android应用程序,它允许用户通过我的Web应用程序发布到我的留言簿和查看/创建事件。我现在的问题是如何从我的andoid应用程序中实现登录。在我的网络应用程序中,UsersConnectionRepository
将Facebook帐户映射到本地帐户。我可以简单地重用这些数据并从我的Android应用程序中以与从Web应用程序完全相同的方式登录吗?
ProviderSignInController
为http://_webapp_/signin/facebook
添加路径映射,重定向到facebook登录页面。这可以简单地用android上的WebView完成吗?
看着spring-android-facebook-client我很困惑。此示例似乎手动管理OAuth身份验证。但我还没想到,当后台中没有其他已经管理认证的Web应用程序时,这是实现它的方式还是另一种可能性。
欢迎任何反馈。感谢。
Jeyp
答案 0 :(得分:7)
现在我想写一个Android应用程序,让用户发布到我的 通过我的网络应用程序留言和查看/创建活动。
Android客户端需要一种方法来登录您的Web应用程序才能发布到安全的RESTful端点,而OAuth是一种很好的方法。 Spring Security OAuth是Spring Security的扩展,可以允许第三方移动或Web客户端与您的网站进行交互。
配置OAuth服务器后,您可以在Android客户端中使用Spring Social创建自定义提供程序,以建立与您网站的OAuth连接。在这种情况下,您的用户将使用其本地凭据对您的网站进行身份验证。连接后,您的Android应用程序可以再次使用您的自定义Spring Social API绑定将事件发布到您网站中的RESTful端点。
在这种情况下,您的用户不会从Android应用程序向Facebook进行身份验证。这假设他们已经在您的网站上建立了帐户和Facebook连接。事实上,这就是SpringSource Greenhouse引用应用程序的工作原理。
这让我们回到你问题的前一部分:
当工作人员成功通过FB进行身份验证时,他们也会以编程方式登录我的本地Web应用程序并使用Spring Security。
如果我理解正确,您要求授权您的Android客户端使用Facebook凭据访问您的第三方网站。虽然这当然是可能的,但目前还没有通过Spring Social和Spring for Android支持它。
另一种选择是考虑您网站的移动版本。这样,Android和其他移动设备就可以使用他们的Facebook凭据简单地从普通浏览器登录到您的网站。用户界面更适合移动设备,它可以消除额外OAuth服务器/客户端配置的额外复杂性。
最后,要解决问题的最后部分。这与前面的部分实际上是一个独立的问题:
此示例似乎是手动管理OAuth身份验证。
主要问题是Spring Social尚不支持资源所有者凭据授权(ROCG)。添加此功能将简化在Android上获取Facebook访问令牌的过程,因为您不必处理浏览器重定向。有关详细信息,请参阅此Spring Social issue。
由于缺少ROCG,Spring for Android示例应用程序演示了一种使用Spring Social获取访问令牌的方法。在这种情况下,它是客户端身份验证流程的修改版本。作为参考,Facebook有一个有用的页面,描述了所有可用的authentication methods。成功验证后,webview会重定向到网址,此时应用可以从此网址中检索访问令牌。
SpringSource正在讨论如何在未来版本中简化身份验证并改进Spring Social和Spring for Android之间的这一部分集成。