我想知道我是否可以使用 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/