GAE用户+ OpenId + Oauth2 Java

时间:2011-12-14 14:45:40

标签: java google-app-engine login oauth openid

我有GAE申请 我需要:

  1. 用户可以访问该应用程序
  2. 应用程序检测用户是否已通过身份验证
  3. 如果没有,请重定向到Google帐户登录页面
  4. 用户登录
  5. Google帐户重定向到我的应用
  6. 应用程序检查该用户是否已在应用程序中注册
  7. 如果是,该应用程序会询问用户是否同意后者从其Google帐户获取私人信息Gmail,联系人,(等)
  8. 我的问题是我在做第3步,第5步和第7步时真的迷失了。我想我甚至不需要OpenId这样做。我已经阅读了联合登录,OpenId,OAuth2和用户API上的谷歌代码页,但我找不到混合它们的方法(在客户端放什么?在服务器端放什么?我需要创建一个特殊的Servlet?我可以使用RPC异步服务吗?我是否需要编写一个http请求客户端并要求一个特殊的servlet?等等...)。当我使用GAE时,我没有任何JSP文件,只有一个入口点html页面,其中包含所需的最小html。

    如果有人能给我链接到源代码(Java),我会很高兴。

    感谢。

2 个答案:

答案 0 :(得分:2)

我也有混合使用谷歌应用引擎的OpenID和OAuth登录,你可以混合使用。最后在我的情况下,我选择谷歌和Facebook作为提供商和谷歌登录内置和Facebook登录是OAuth。确实应该有一种更方便的方式来“添加OAuth提供者”并将自己添加为OAuth提供者,就像我们添加Twitter和Facebook一样,但是在这个阶段或多或少地自己编程并遵循OAuth 2.0登录/注销流程独立于您执行的实现(Java,python,PHP ..),因为OAuth 2.0流程是相同的,无论您使用哪种语言,例如OAuth与Facebook一起使用GAE:

enter image description here

您可能需要阅读大型提供商Facebook的OAuth页面,了解如何进行身份验证流程。

答案 1 :(得分:0)

public void doGet(HttpServletRequest req, HttpServletResponse resp)  throws IOException     
{  

  UserService userService = UserServiceFactory.getUserService();
  User user = userService.getCurrentUser();        
  if (user != null) //checks if USER is logged in or not
  {            
       //if USER is logged in this code will execute or you can redirect user to another page
       resp.setContentType("text/plain"); 
       resp.getWriter().println("Hello, " + user.getNickname());
  } else {           //if USER is null, which means its not logged in then this code will execute. 
        String returnURL = "/home.jsp";
        resp.sendRedirect(userService.createLoginURL(returnURL));
        //createLoginURL method will provide the Google Login URL to sendRedirect method
        //after user log in on the Google login page, the user will be redirected to the URL in returnURL variable

   }   
}

来源= http://code.google.com/appengine/docs/java/gettingstarted/usingusers.html