facebook - 使用 Tomcat 领域或 Facebook 登录进行身份验证

标签 facebook tomcat authentication

我有一个通过标准 Tomcat 机制对用户进行身份验证的 Web 应用程序。更具体地说,我配置了一个指向我自己的用户和角色表的 JDBCRealm 并且我正在使用基于表单的身份验证,它将用户详细信息提交给 j_security_check 操作(如j_usernamej_password)。安全约束在我的 web.xml 文件中配置。

现在,我想为用户提供第二个登录选项:Facebook。我已经使用他们的 Javascript SDK 配置了 Facebook 登录,但我在集成这两个登录选项时遇到了问题。理想情况下,当用户登录 Facebook 时,我还必须在 Tomcat 领域中模拟身份验证,以确保 Facebook 用户的行为与普通 Tomcat 用户一样。这意味着我还必须在我自己的用户表中注册 Facebook 用户。

我的第一个想法是在用户完成 Facebook 登录后立即在我自己的用户表中注册用户(例如,使用 Ajax 请求)。此请求完成后,我将能够触发手动提交到 j_security_check

Facebook 响应包括一个用户 id 和一个我可以使用的 token。但是,我不知道使用什么信息作为j_password。我什至不知道使用表单例份验证是否是最好的选择。

集成这两个登录选项的最佳方式是什么?

非常感谢!

最佳答案

一种选择是使用组合领域:参见 http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#CombinedRealm

领域 1 应该是 JDBCRealm,然后实现领域 2 (FacebookRealm)。您可以根据最常用的顺序更改顺序。有关如何实现领域的信息,请参阅 Tomcat 文档。

当然您在 FacebookRealm 中没有密码,但您可以使用以下技巧:
JDBC领域:
username = 应用程序中的用户名/userId
密码=密码
Facebook 领域:
username = 应用程序中的用户名/userId
密码 = Facebook 提供的唯一用户 ID

这可以允许用户使用他们想要的任何方法登录。

基本上,这可能是通过 FacebookRealm 登录的可能用例(第一步可能与 JS SDK 略有不同,但思路相似):
1. 用户通过链接发送到 Facebook 进行身份验证。
2. Facebook 使用 token 重定向到您的服务器。
3. 您的服务器调用 Facebook 来验证用户的真实性。
4. 你的服务器知道它是一个有效的用户,所以它从 Servlet 调用 login(username, facebookUserId) 方法。请参阅:http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#login(java.lang.String , java.lang.String)
4.1.在调用登录方法之前,请确保“用户名”和“facebookUserId”存在于您的数据库中。
5. Tomcat FacebookRealm 将只对该用户名和 ID 执行数据库查询。

我希望这能让您更深入地了解如何做到这一点。
其他选项可以通过 Apache Shiro、Spring Security 或其他可能的方式。

关于facebook - 使用 Tomcat 领域或 Facebook 登录进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17728497/

相关文章:

java - 配置其他库以在 JSP (Tomcat) 中使用

java - 将自定义 AuthenticationProcessingFilter 与 <form-login> 结合使用(自动配置 ="true")

authentication - 为什么 TV App 通常需要通过网址输入激活码?

iphone - 如何使用 FBConnect iPhone 下载墙贴

java - Android:在 Facebook 上发布图像时出现 NullPointerException

tomcat - 如何更改tomcat编译器

tomcat - Servlet 过滤器的执行顺序

model-view-controller - Spring MVC 自定义身份验证

facebook - iframe 高度问题

html - 使用“AddThis”类型脚本与手动添加每个社交按钮