2011-01-21 16 views
0

Google AuthSubリクエストを認証したいと思います。基本的に私は秘密鍵とそれぞれの証明書を生成し、この証明書をGoogleにアップロードし、その後のGoogle AuthSubの呼び出しでその鍵で署名する必要があります。私が最も簡単な方法は、次のようにJavaのkeytoolを使用することであると思う:Javaで安全なAPI AuthSub(GoogleカレンダーAPI)

# Generate the RSA keys and certificate 
keytool -genkey -v -alias Example -keystore ./Example.jks\ 
    -keyalg RSA -sigalg SHA1withRSA\ 
    -dname "CN=www.example.com, OU=Engineering, O=My_Company, L=Mountain View, ST=CA, C=US"\ 
    -storepass changeme -keypass changeme 

# Output the public certificate to a file 
keytool -export -rfc -keystore ./Example.jks -storepass changeme \ 
    -alias Example -file mycert.pem 

http://code.google.com/apis/gdata/docs/auth/authsub.html#keytoolで指定されているように)

私はGoogleにMYCERT.PEM与えられた証明書を、アップロードしました。私のJavaクライアントでは、次のように秘密鍵をロードしました。

PrivateKey key = AuthSubUtil.getPrivateKeyFromKeystore(
           "Example.jks", "changeme", "Example", "changeme"); 

このキーのロード時に例外はスローされません。このキーは、AuthSub呼び出し中に次のように使用されます。

String requestUrl = 
    AuthSubUtil.getRequestUrl("http://www.example.com/RetrieveToken", 
          "https://www.google.com/calendar/feeds/", 
          true, 
          true); 
... 
// Servlet context, user follows the 'next link' with token attached. 
String onetimeUseToken = AuthSubUtil.getTokenFromReply(
              httpServletRequest.getQueryString()); 

// Exchange for the AuthSub token. 
String sessionToken = AuthSubUtil.exchangeForSessionToken(onetimeUseToken, key); 

// Use the token. 
CalendarService.setAuthSubToken(sessionToken, key); 

// Get calendars from the user. 
URL feedUrl = 
    new URL("https://www.google.com/calendar/feeds/default/owncalendars/full"); 

// Exception is thrown HERE. 
CalendarFeed resultFeed = service.getFeed(feedUrl, CalendarFeed.class); 

トークンの設定や交換中に例外がスローされるのではなく、ユーザーのリソースにアクセスしようとしたときにスローされます。私はこれをどうしたらいいか分からない。例外は以下の通りである。

Token invalid - Invalid AuthSub token. 

は私がhttpsで少し周りおもちゃ:のhttp対//:フィードURLとスコープURLについて//が、ほとんど成功し、それが可能なIの避難所ですしかし、特定の組み合わせを試してみました。

答えて

0

上記のすべての動作が正しく動作しているようですが、私は無関係なコーディングエラーが発生しました。レコードの場合、httpとhttpsはどちらも一貫して使用されている限り動作します(そうでなければ 'スコープ'エラーが発生します)。