2

我是 Salesforce 开发的新手,正在尝试连接到 Salesforce 以获取令牌。

我想我的问题有两个:1)我必须使用网页来通过 SF 进行身份验证吗?

2)如果没有,为什么这不起作用?当我尝试使用用户名和密码方法进行身份验证时,我得到: {"error":"unsupported_grant_type","error_description":"grant type not supported"}

这是我的代码:

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":"无效授权码"}

4

3 回答 3

3

如果您想使用用户名/密码授权类型,那么它的类型是密码而不是基本凭据,要发送的正确参数集是

grant_type=password
client_id=xxxxxxxxxx
client_secret=1234567890
username=noreply@salesforce.com
password=XXXXXXXXX

正如我在上一个问题中提到的那样,尽管这可行,但您确实希望使用基于 Web 的流程来支持使用 SAML 等替代登录服务的 Salesforce 客户。

于 2011-02-11T16:19:06.297 回答
1

1) 是的,您需要使用 OAuth 登录 Salesforce 并授予您的应用程序访问权限。对于 iOS 应用程序,您将查看客户端流程Salesforce OAuth Client Flow Doc

2) 查看Force.com 开发者网站上的 iOS 工具包。有一个名为 ZKOAuthViewController 的类几乎可以为您完成所有工作。其余部分基于 Force.com 的 SOAP API,但我只是基于工具包制作了自己的 OAuth 登录控制器,并改用 REST API。

于 2011-02-11T16:09:09.110 回答
1

Superfell 的回答几乎是正确的。密码需要设置为:

密码 + 安全令牌

有关更多信息,请参阅http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_concepts_security.htm

于 2011-12-01T20:37:14.577 回答