【问题标题】:GAE User + OpenId + Oauth2 JavaGAE 用户 + OpenId + Oauth2 Java
【发布时间】:2012-04-02 22:20:28
【问题描述】:

我有一个 GAE 应用程序。
我需要:

  1. 用户可以访问应用程序
  2. 应用程序检测用户是否经过身份验证
  3. 如果没有,请重定向到 google 帐户登录页面
  4. 用户登录
  5. Google 帐户重定向到我的应用程序
  6. 应用程序检查该用户是否已在应用程序中注册
  7. 如果是,应用程序会询问用户是否同意后者从他的 google 帐户获取私人信息 gmail、联系人等

我的问题是我在执行步骤 3、5 和 7 时真的迷失了方向。我想我什至不需要 OpenId 就可以这样做。我已经阅读了有关联合登录、OpenId、OAuth2 和用户 API 的谷歌代码页,但我找不到将它们全部混合的方法(在客户端放什么?在服务器端放什么?我需要创建一个特殊的Servlet?我可以使用RPC异步服务吗?我需要写一个http请求客户端并要求一个特殊的servlet吗?等等...)。由于我使用的是 GAE,我没有任何 JSP 文件,只有一个入口点 html 页面,其中包含所需的最少 html。

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

谢谢。

【问题讨论】:

  • 您指的是一般人的 Google ID 吗?还是仅来自您域中拥有 Google 应用帐户的人?
  • 你可能想看看这个:camel.apache.org/tutorial-oauth.html
  • @Dave 我一般需要 google Id,应用程序应该确定用户是否已连接,如果没有重定向到 google 帐户。我没有使用任何 jsp 文件,而只使用了一个 HTML 文件 (GAE),我希望其中的代码最少。我知道如何使用 OAuth 访问 Gdata。我想知道在我的 EntryPoint 类中放什么,在服务器端写什么。

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


【解决方案1】:

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

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

【讨论】:

  • 用户登录后如何获取?对于 Google,我们将使用 UserService 来检索 User 对象。您在这里使用什么将用户存储在内存中?谢谢!
【解决方案2】:
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

【讨论】:

  • 我已经阅读了这个页面,但我的问题是我没有使用任何 jsp 文件。作为一个 GAE 应用程序,只有一个 HTML 文件我想在其中放置尽可能少的代码。
  • 我想知道在我的 EntryPoint 类中放什么,在服务器端写什么。
  • 您不能在 HTML 文件中放置任何 JAVA 代码。您需要创建至少一个 JSP 或 JAVA Servlet 作为 GAE 应用程序的入口点,并将上面的代码放入其中。如果您想在允许用户使用您的应用程序之前对用户进行身份验证,则此代码是您的入口点。
  • @user1098001,你的 EntryPoint 类是什么?它是否扩展了任何对象?它是 servlet 还是过滤器?
  • 我知道我没有在 HTML 中放置任何 java。我的入口点实现了入口点。我不明白为什么它必须是一个 servlet,因为 EntryPoint 类在客户端
猜你喜欢
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 2015-11-19
  • 1970-01-01
  • 2018-05-15
相关资源
最近更新 更多