2011-02-11 55 views
2

我是salesforce開發的新品牌,並且正嘗試連接到Salesforce以獲取令牌。iPhone Objective C oauth 2.0登錄 - unsupported_grant_type

我想我的問題是2倍: 1)我是否必須使用網頁進行SF認證?

2)如果沒有,爲什麼這不起作用?當我嘗試使用認證的用戶名和密碼的方法,我得到: {「錯誤」:「unsupported_grant_type」,「ERROR_DESCRIPTION」:「格蘭特類型不支持」}

這裏是我的代碼:

NSString *post = [NSString stringWithFormat:@"grant_type=basic-credentials&client_id=%@&client_secret=%@&redirect_uri=%@", 
        kOAuthClientID, 
        kOAuthClientSecret, 
        kOAuthClientAuthURL 
        ]; 


NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:kOAuthClientTokenUrl]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:postData]; 

NSError *error; 
NSURLResponse *response; 
NSLog(@"%@", request); 
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; 
NSLog(@"%@", data); 

任何想法都會受到歡迎。

我曾嘗試使用grant_type = authorization_code卻得到了另一個錯誤:

{"error":"invalid_grant","error_description":"invalid authorization code"}

+0

嗨,你可以告訴kOAuthClientAuthURL&kOAuthClientTokenUrl代表什麼,以及你如何最終能夠得到它的工作,因爲「superfell」的答案似乎也沒有工作。 – sole007 2011-07-27 14:09:17

回答

3

如果您想使用的用戶名/密碼交付式,那麼它的類型是密碼沒有基本的憑據,一組正確的參數發送的

grant_type=password 
client_id=xxxxxxxxxx 
client_secret=1234567890 
[email protected] 
password=XXXXXXXXX 

正如我在以前的問題中提到,雖然這是有效的,你確實想要使用基於web的流程來支持正在使用SAML等替代登錄服務的salesforce客戶。

1

1)是的,你做什麼,通過OAuth您需要登錄到Salesforce,並授予您的應用程序訪問。對於iOS應用程序,您需要查看客戶端流程Salesforce OAuth Client Flow Doc

2)請參閱the Force.com developer site上的iOS工具包。有一個名爲ZKOAuthViewController的類,它幾乎完全適合你。 Takelight的其餘部分基於Force.com的SOAP API,但是我只是基於工具包創建了自己的OAuth登錄控制器,並使用了REST API。

+0

1)所以你說我必須在我的應用程序中打開UIWebView才能獲得令牌?有沒有辦法解決?我以爲你可以使用直接的用戶名和密碼方法 - https://na8.salesforce.com/help/doc/en/remoteaccess_oauth_username_password_flow.htm#up_obtain_access_token – smcdrc 2011-02-11 16:23:06

+0

是的,你可以使用用戶名和密碼方法,但你需要在您的代碼中嵌入客戶端密鑰和祕密,這是不推薦的。 – 2011-02-11 16:29:53