我已經在我的web配置2種條腿OAuth的服務,按照本指南: http://drupal.org/node/1827698消費使用Restkit
我敢肯定的是,配置是所有適當的,因爲當我通過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
我試着用作爲post表示GET請求更早。我得到一個空的身體沒有任何數據和地方Restkit日誌本,這表明授權問題:
2012-11-06 19:27:46.887 MyProject OAuth[22187:11603] I restkit.network:RKRequest.m:689 Status Code: 401
我意識到Restkit不會以這種方式添加任何參數,因此要求不知道什麼簽名,時間戳和OAuth版本使用。因此,我嘗試使用POST請求的地方,我可以指定這些參數。即使現在我得到一個空的身體和Restkit日誌說這個:
2012-11-06 19:28:03.231 MyProject OAuth[22205:11603] I restkit.network:RKRequest.m:689 Status Code: 404
我不知道我要去哪裏錯了或還有什麼要嘗試!期待在解決此問題方面提供幫助。
編輯: 我實現了一個丟失的回調方法,現在我越來越:
"The request must be signed"
消息。我假設上述設置應該足夠用於OAuth身份驗證,正如在引用的鏈接中提到的那樣,我還應該做些什麼?
觀察:
我能看到的RestKit代碼的內幕和OAuth的參數被放入URL請求的HTTP報頭字段。但我不知道的Drupal 7能夠讀取來自HTTP報頭字段此信息,它總是返回我回:
The request must be signed
這意味着,OAuth的參數由Drupal的在第一種情況下不接受,否則會給我下面的錯誤至少:
Invalid Signature
我一直在尋找一些其他的選擇,看看我的使用者密鑰和機密和所有其他設置在服務器端處理得當與否。爲了證實這一點,我從here下載了php OAuth客戶端腳本。從here下載SVN代碼。在這種情況下,當我使用PHP客戶端交叉檢查請求時,我的請求都完全服務於&我通過輸入端點,使用者密鑰和使用者密鑰來取回XML。
我試過的另一件事是允許GCOAuth生成簽名,並在Restkit中生成所有的簽名,並放置一個斷點,以便我可以將HTTP頭字段轉儲到日誌中,而不是將請求發送到服務器的Restkit快速準備好與上面的PHP客戶端相同的格式的URL請求。現在,這個請求觸發的時候,我回來了
Invalid Signature
迴應,這是否也莫名其妙意味着OAuth的參數不Restkit/GCOAuth適當的準備?
感謝, 拉吉