java - 使用 Google OAuth2 API 对 Google App 用户进行身份验证

标签 java rest google-api oauth-2.0 google-apps

我想知道我是否可以使用 google client api (java) 来验证 google apps 域的用户对我的应用程序的身份。 目标应用程序是使用 REST 后端 (jersey) 的 Web 应用程序。

documentation不是很清楚(或者我误解了),并且文档中的示例指的是已弃用的类......有人知道这是否可能以及最好的方法吗?

代码示例将不胜感激。

最佳答案

Google Apps 帐户应该可以很好地使用 API。

唯一的异常(exception)是域管理员禁用了该服务。例如,如果域管理员禁用了 Google+ 功能,您将无法访问该用户的 Google+ 数据。

无需更改代码,因此您应该能够使用 samples in the client library repository 中的任何代码或产品特定 sample ,如 this one for Google+ .

Google+ 入门项目首先通过扩展 com.google.api.sample.OAuth2AuthorizationCodeServlet 中的 AbstractAuthorizationCodeServlet 实现 OAuth 流程

public class OAuth2AuthorizationCodeServlet 
    extends AbstractAuthorizationCodeServlet {
    /**
     * If the user already has a valid credential held in the 
     * AuthorizationCodeFlow they are simply returned to the home page.
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException {
        response.sendRedirect("/");
    }

    /**
     * Returns the URI to redirect to with the authentication result.
     */
    @Override
    protected String getRedirectUri(HttpServletRequest request)
                    throws ServletException, IOException {
        return ConfigHelper.REDIRECT_URI;
    }

    /**
     * Returns the HTTP session id as the identifier for the current user.  
     * The users credentials are stored against this ID.
     */
    @Override
    protected String getUserId(HttpServletRequest request)
                    throws ServletException, IOException {
        return request.getSession(true).getId();
    }

    @Override
    protected AuthorizationCodeFlow initializeFlow() throws ServletException,
                    IOException {
        return Util.getFlow();
    }
}

然后通过扩展 AbstractAuthorizationCodeCallbackServlet 完成 com.google.api.sample.Oauth2CallbackServlet 中的流程:

public class OAuth2CallbackServlet 
    extends AbstractAuthorizationCodeCallbackServlet {    
    @Override
    protected void onSuccess(HttpServletRequest request, 
            HttpServletResponse response, Credential credential)
            throws ServletException, IOException {
        response.sendRedirect("/");
    }

    @Override
    protected void onError(HttpServletRequest req, HttpServletResponse resp, 
            AuthorizationCodeResponseUrl errorResponse)
            throws ServletException, IOException {
        resp.sendError(SC_INTERNAL_SERVER_ERROR, "Something went wrong :(");
    }

    @Override
    protected String getRedirectUri(HttpServletRequest request) 
            throws ServletException, IOException {
        return ConfigHelper.REDIRECT_URI;
    }

    @Override
    protected AuthorizationCodeFlow initializeFlow() 
            throws IOException {
        return Util.getFlow();
    }

    @Override
    protected String getUserId(HttpServletRequest request) throws ServletException, IOException {
        return  request.getSession(true).getId(); 
    }

}

关于java - 使用 Google OAuth2 API 对 Google App 用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13684292/

相关文章:

ios - 来自iOS应用中youtube播放列表的URL

java - 模板 playframework 中的 html 语法

java - 如何在 Java EE 和 Spring Boot 中热重载属性?

java - Rest Service URI 映射到 Java 内部类

javascript - Backbone.js 和 Backbone 实现的最佳 URL 结构

c# - 将视频上传到 YouTube - 超出配额错误

java - 是否可以在javafx中的对话框上使用路径转换?

java - 使用 hibernate OneToMany 映射的未知列错误

javascript - 使用node.js解析json数组

node.js - 如何使用 NodeJS 和 Google Drive API v3 将文件移动到回收站