4

google-api-java-client で 2-legged OAuth を使用する方法を知っている人はいますか? Google Apps Provisioning API にアクセスして、特定のドメインのユーザーのリストを取得しようとしています。

以下は動作しません

HttpTransport transport = GoogleTransport.create();
GoogleHeaders headers = (GoogleHeaders) transport.defaultHeaders;
headers.setApplicationName(APPLICATION_NAME);
headers.gdataVersion = GDATA_VERSION;

OAuthHmacSigner signer = new OAuthHmacSigner();
signer.clientSharedSecret = CONSUMER_SECRET;

OAuthParameters oauthParameters = new OAuthParameters();
oauthParameters.version = OAUTH_VERSION;
oauthParameters.consumerKey = CONSUMER_KEY;
oauthParameters.signer = signer;
oauthParameters.signRequestsUsingAuthorizationHeader(transport);

「com.google.api.client.http.HttpResponseException: 401 Unknown authorization header」が表示されます。ヘッダーはこんな感じ

OAuth oauth_consumer_key="...", oauth_nonce="...", oauth_signature="...", oauth_signature_method="HMAC-SHA1", oauth_timestamp="...", oauth_version="1.0"

私も成功せずにフォローしようとしました

GoogleOAuthDomainWideDelegation delegation = new GoogleOAuthDomainWideDelegation();
delegation.requestorId = REQUESTOR_ID;
delegation.signRequests(transport, oauthParameters);

何か案は?前もって感謝します。

4

2 に答える 2

6

コードに問題はなかったようです。実際に動作します。問題は Google Apps のセットアップにありました。

「このドメインの OAuth キーとシークレットを管理する」ページ ( https://www.google.com/a/cpanel/YOUR-DOMAIN/SetupOAuth ) にアクセスし、「Two-legged OAuth アクセス制御」を有効にして「すべての API へのアクセスを許可する」を選択しても、実際にはすべての API へのアクセスが許可されるわけではありません。

その後、「API クライアント アクセスの管理」ページ ( https://www.google.com/a/cpanel/YOUR-DOMAIN/ManageOauthClients ) にアクセスすると、次のようなエントリがあることがわかります。

YOR-DOMAIN/CONSUMER-KEY  "This client has access to all APIs" 

これにはProvisioning APIが含まれていないようです。プロビジョニング API を明示的に追加して初めて、コードが機能し始めました。したがって、Provisioning API を有効にするには、リストに次のようなエントリも必要です。

YOR-DOMAIN/CONSUMER-KEY  Groups Provisioning (Read only) https://apps-apis.google.com/a/feeds/group/#readonly 
                         User Provisioning (Read only)  https://apps-apis.google.com/a/feeds/user/#readonly

他の誰かが同じ問題を抱えていました:

http://www.gnegg.ch/2010/06/google-apps-provisioning-two-legged-oauth/

于 2010-09-21T08:25:53.870 に答える
0

おそらく、ここで不正なリクエスト トークンを取得しようとしていますか? 私は Google の実装を使用していませんが、OAuth 1.0a 仕様ではコールバック URL が必要であると書かれていますが、これはありません。仕様では、欠落したパラメーターは 401 ではなく HTTP コード 400 を返す必要があると述べているため、これはニシンかもしれません。

http://oauth.net/core/1.0a/#auth_step1を参照してください

于 2010-09-20T09:18:44.970 に答える