このガイドに従って、Webで2つのレッグOAuthサービスを構成しました:http: //drupal.org/node/1827698
構成がすべて適切であると確信しています。Webブラウザーを介してベースURL+サービスエンドポイントを使用してWebサービスをトリガーすると、ブラウザーから次のエラーが返されます。
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<result>The request must be signed</result>
これは、認証エラーであることを示唆しています。私は考えます。
今、iPhoneプロジェクトでRestkitを使用する計画があります。このガイドに従って、単純な2本足のOAuth Webサービスリクエストを書き留めました: https ://github.com/RestKit/RestKit/wiki/OAuth-Support-on-RestKit
そしてこれは私のコードです:
NSString *urlResource = @"";
urlResource = @"/service_endpoint/node";
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURLString:@"http://mydomain.com/"];
[RKObjectManager setSharedManager:objectManager];
objectManager.client.OAuth1ConsumerKey = @"proper_consumer_key";
objectManager.client.OAuth1ConsumerSecret = @"proper_consumer_secret";
objectManager.client.OAuth1AccessToken = nil;
objectManager.client.OAuth1AccessTokenSecret = nil;
objectManager.client.authenticationType = RKRequestAuthenticationTypeOAuth1;
#define USE_GET_REQUEST 0
#if USE_GET_REQUEST
[objectManager.client get:urlResource delegate:self];
#else
NSDictionary *theParams = nil;
NSString *timeStamp = [[NSNumber numberWithInt:(NSTimeInterval)[[NSDate date] timeIntervalSince1970]] stringValue];
theParams = [NSDictionary dictionaryWithObjectsAndKeys:@"1.0", @"oauth_version", @"HMAC-SHA1", @"oauth_signature_method", timeStamp, @"oauth_timestamp", nil];
[objectManager.client post:urlResource
params:theParams
delegate:self];
#endif
投稿に示されているように、以前にGETリクエストを試してみました。データのない空の本文が表示され、Restkitがこれをログに記録します。これは、認証の問題を示しています。
2012-11-06 19:27:46.887 MyProject OAuth [22187:11603] I restkit.network:RKRequest.m:689ステータスコード:401
Restkitはこの方法でパラメーターを追加しないため、リクエストは使用する署名、タイムスタンプ、OAuthバージョンを認識していません。したがって、これらのパラメーターを指定できるPOSTリクエストを使用して同じことを試しました。今でも私は空のボディを取得し、Restkitログはこれを示しています:
2012-11-06 19:28:03.231 MyProject OAuth [22205:11603] I restkit.network:RKRequest.m:689ステータスコード:404
どこが間違っているのか、他に何をしようとしているのかわかりません!この問題の解決に役立つことを楽しみにしています。
編集: 私は不足しているコールバックメソッドを実装しました、そして今得ています:
「リクエストには署名する必要があります」
メッセージ。参照リンクに記載されているように、上記の設定でOAuth認証に十分だったと思いますが、他に何をする必要がありますか?
観察:
RestKitコードの内部とOAuthパラメーターがURLリクエストのHTTPヘッダーフィールドに配置されていることがわかりました。しかし、Drupal 7がHTTPヘッダーフィールドからこの情報を読み取ることができるかどうかはわかりません。これは、常に私を返すためです。
リクエストに署名する必要があります
これは、最初のケースではOAuthパラメーターがDrupalによって受信されないことを意味します。そうでない場合、少なくとも次のエラーが発生します。
無効な署名
コンシューマーキーとシークレット、およびその他すべてのセットアップがサーバー側で適切に行われているかどうかを確認するために、他のいくつかのオプションを探していました。これを確認するために、ここからphpOAuthクライアントスクリプトをダウンロードしました。ここからSVNコードをダウンロードします。PHPクライアントでリクエストをクロスチェックすると、リクエストはすべて完全に処理され、エンドポイント、コンシューマーキー、コンシューマーシークレットを入力するだけでxmlが返されます。
もう1つ試したのは、GCOAuthが署名とすべてをRestkit内に生成できるようにし、ブレークポイントを配置してHTTPヘッダーフィールドをログにダンプできるようにすることです。Restkitがサーバーにリクエストを送信する代わりに、URLをすばやく準備しました。上記のPHPクライアントとまったく同じ形式でリクエストします。このリクエストがトリガーされると、
無効な署名
応答、これはまた、OAuthパラメーターがRestkit / GCOAuthで適切に準備されていないことを意味しますか?
ありがとう、ラジ