use*_*387 2 java oauth google-calendar-api authsub
我们有代码将我们的应用程序日历与登录用户的谷歌日历同步。该代码使用 AuthSub 和 CalendarService 类,但它不提供使用访问令牌和刷新令牌对谷歌日历的离线访问,因为我想使用 OAuth v3 使用日历类。我面临着将旧代码合并到没有 getFeed() 函数的新 v3 Calendar 类的问题。这是我的应用程序中的一些代码
if(StringUtil.isValid(request.getQueryString())) {
onetimeUseToken = AuthSubUtil.getTokenFromReply(request.getQueryString());
}
if(StringUtil.isValid(onetimeUseToken)) {
String sessionToken = AuthSubUtil.exchangeForSessionToken(onetimeUseToken,null);
CalendarService calendarService = new CalendarService("myapp");
calendarService.setAuthSubToken(sessionToken, null);
session.setAttribute("calendarServicesession",calendarService);
userIDforCalendar = (String) session.getAttribute("calendar_user_no");
}
CalendarFeed myResultsFeed1 =service.getFeed(new URL("https://www.google.com/calendar/feeds/default/allcalendars/full"),CalendarFeed.class);
for (int i = 0; i < myResultsFeed1.getEntries().size(); i++) {
CalendarEntry entry = myResultsFeed1.getEntries().get(i);
.....
}
Run Code Online (Sandbox Code Playgroud)
请为我提供一些使用 CalendarService 进行离线访问的方法,这样我就不必对代码进行太多更改。希望得到快速答复。
谢谢- Dravit Gupta
Google 从 2012 年 4 月 20 日起弃用了 AuthSub。所以是时候迁移到 OAuth 2.0 和 Google Calendar API v3。首先从以下链接下载 jar 文件:
https://google-api-client-libraries.appspot.com/download/library/calendar/v3/java
http://google-oauth-java-client.googlecode.com/files/google-oauth-java-client-1.13.1-beta.zip
从您的项目中删除旧的日历和 Authsub jar 文件,并从此链接添加 jar 文件。
然后转到 google api 控制台获取您的客户端 ID、客户端密码并创建重定向 uri。并从同一个 api 控制台启用谷歌日历 api。
我为您提供了一个示例代码,用于对用户进行身份验证并显示他拥有的日历,您必须存储在输出中获得的刷新令牌并存储它,以便您可以离线访问日历。
以下功能用于 OAuth 授权。
public void authenticate(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String client_id = "xxxx";
String redirect_uri = "xxxxxx";
String scope = "https://www.googleapis.com/auth/calendar";
String client_secret = "xxxxxx";
List <String> scopes;
HttpTransport transport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
scopes = new LinkedList<String>();
scopes.add(scope);
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(transport, jsonFactory, client_id, client_secret, scopes).build();
GoogleAuthorizationCodeRequestUrl url = flow.newAuthorizationUrl();
url.setRedirectUri(redirect_uri);
url.setApprovalPrompt("force");
url.setAccessType("offline");
String authorize_url = url.build();
response.sendRedirect(authorize_url);
}
Run Code Online (Sandbox Code Playgroud)
您必须向变量client_id
,client_secret
和 中添加值redirect_uri
。所有这些值都在您的 google api 控制台中。
授权功能将我转发到授权 url,它为我提供访问令牌和刷新令牌。但是,访问令牌会在一个时间间隔后过期。因此,如果您想要访问令牌,则需要存储刷新令牌并在访问日历 api 时使用它生成它。
以下函数生成访问令牌和刷新令牌,并打印用户谷歌日历中的日历列表。
public void importCalendarList(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
HttpSession session = request.getSession();
String staffKey = (String) session.getAttribute("staffKey");
ContactJdo staffDetails = staff.getStaffDetail(staffKey);
String code = request.getParameter("code");
String calendarId="";
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(transport, jsonFactory, client_id, client_secret, scopes).build();
GoogleTokenResponse res = flow.newTokenRequest(code).setRedirectUri(redirect_uri).execute();
String refreshToken = res.getRefreshToken();
String accessToken = res.getAccessToken();
List <CalendarListEntry>list1= getCalendars(accessToken);
for(CalendarListEntry temp:list1) {
System.out.println(temp.getId());
}}
Run Code Online (Sandbox Code Playgroud)
如果您查看上述函数,它会生成访问令牌和刷新令牌。如果要再次生成访问令牌,请使用此函数:
public static String getAccessToken(String refreshToken, String client_id, String client_secret) throws IOException {
HttpTransport transport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleRefreshTokenRequest req = new GoogleRefreshTokenRequest(transport, jsonFactory, refreshToken, client_id, client_secret);
GoogleTokenResponse res = req.execute();
String accessToken = res.getAccessToken();
return accessToken;
}
Run Code Online (Sandbox Code Playgroud)
将刷新令牌存储在某处,您可以执行日历文档中提到的所有操作。在这里找到它
https://google-api-client-libraries.appspot.com/documentation/calendar/v3/java/latest/index.html
归档时间: |
|
查看次数: |
3072 次 |
最近记录: |