筆記

          way

          Google Calendar v3授權傳參數

          以典型的客戶端-服務器端授權為例
          一 基本流程
          使用Google Calendar v3 ,如果以servlet作為代理,可以使用官方示例,自己寫一個類A.java繼承AbstractAuthorizationCodeServlet類,這個類主要用于跳轉到google提供的授權頁面,如果用戶同意授權,則根據A類中的URL(這個必須和注冊的google 回調路徑相同,比如oauth_callback否則報錯)重定向到B類,B.java 繼承AbstractAuthorizationCodeCallbackServlet類,這個訪問路徑類似http://www.example.com/oauth_callback?code=ABC1234。這里我配置oauth_callback為servlet的訪問路徑,B類中的
          onSuccess方法將根據獲得的access Token(這是根據傳過來的code獲得的)做業務操作。

          二 需要參數的情況
          有些業務需要用戶傳參數,直接傳參數給A,再試圖在B中獲取是不行的!B類中只能獲取某些固定的參數,如code。要想傳用戶參數,我們可以在A中先獲取,把幾個參數組裝為json格式字符串(還可以繼續base64編碼),把這個字符串作為state的值,再重定向到授權頁面,同意后state參數可以傳到B類,取值解析json字符串(或先base64解碼),得到參數。
          由于API中AuthorizationCodeRequestUrl有處理state的方法,而AbstractAuthorizationCodeServlet已經直接封裝,為了使用setState,直接在A類中繼承HttpServlet重寫service方法,復制大部分AbstractAuthorizationCodeServlet的內容,稍作修改:
          resp.sendRedirect(flow.newAuthorizationUrl().setState(json).setRedirectUri(redirectUri).build());

          三 關于refresh token
          默認情況下,用戶授權之后token會有一個小時的有效期,之后你可以通過refresh token再重新獲取token。所以,如果不需要用戶再次授權,可以在第一次,保存好token、refresh token、ExpirationTime。實例中用了JDO來實現,自己如果使用數據庫保存,可類似寫一個類實現CredentialStore類。使用的時候,現在數據庫中取出,再創建credential,如:
                      GoogleCredential credentialNew = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                              .setJsonFactory(JSON_FACTORY).setClientSecrets(clientSecrets)
                              .addRefreshListener(new CredentialStoreRefreshListener(userID, new DBCredentialStore())).build()
                              .setAccessToken(accessToken).setRefreshToken(refreshToken)
                              .setExpirationTimeMilliseconds(expirationTimeMilliseconds);
          在無效的情況下,Listener會自動去用refresh token請求。

          posted on 2012-05-08 11:40 yuxh 閱讀(956) 評論(0)  編輯  收藏 所屬分類: work

          導航

          <2012年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          收藏夾

          博客

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 临泽县| 通山县| 龙陵县| 汝南县| 上思县| 长汀县| 庄浪县| 涿鹿县| 铁岭县| 湛江市| 千阳县| 沙河市| 房山区| 无极县| 赞皇县| 和硕县| 云龙县| 青州市| 崇义县| 清徐县| 宜君县| 桑日县| 漳州市| 新河县| 固原市| 澄迈县| 克山县| 罗平县| 大洼县| 安远县| 淳化县| 祁门县| 青冈县| 大竹县| 高雄市| 庄河市| 天长市| 汪清县| 宜黄县| 东至县| 南城县|