筆記

          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

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          收藏夾

          博客

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 桂东县| 天台县| 隆德县| 武安市| 高平市| 修文县| 原平市| 革吉县| 栾城县| 许昌县| 古浪县| 睢宁县| 福建省| 临邑县| 淅川县| 北海市| 洪江市| 九江县| 温州市| 巩义市| 达州市| 通城县| 沁阳市| 阿巴嘎旗| 东乌珠穆沁旗| 宁陕县| 蓝山县| 林西县| 纳雍县| 龙泉市| 桃园市| 广元市| 奉化市| 合江县| 车致| 芜湖市| 赤壁市| 威信县| 容城县| 连江县| 兖州市|