iPhone Objective C oauth 2.0 Логин - unsupported_grant_type - PullRequest
2 голосов
/ 11 февраля 2011

Я новичок в разработке Salesforce и пытаюсь подключиться к Salesforce, чтобы получить токен.

Я думаю, мой вопрос в 2 раза: 1) Должен ли я использовать веб-страницу для аутентификации с SF?

2) Если нет, то почему это не работает? Когда я пытаюсь использовать метод аутентификации по имени пользователя и паролю, я получаю: {"error": "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": "неверная авторизация код "}

Ответы [ 3 ]

3 голосов
/ 11 февраля 2011

Если вы хотите использовать тип предоставления имени пользователя / пароля, то его типом является пароль, а не basic-credentials, правильный набор параметров для отправки:

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

Как я уже упоминал в своем предыдущем вопросе, хотя это работает, вы действительно хотите использовать веб-поток для поддержки клиентов Salesforce, которые используют альтернативные службы входа, такие как SAML.

1 голос
/ 02 декабря 2011

Ответ Superfell почти правильный.Пароль должен быть установлен на:

пароль + маркер безопасности

См. http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_concepts_security.htm для дополнительной информации.

1 голос
/ 11 февраля 2011

1) Да, с OAuth необходимо войти в систему Salesforce и предоставить доступ к своему приложению.В случае приложения для iOS вы бы посмотрели на поток клиентов Salesforce OAuth Client Flow Doc

2) Взгляните на инструментарий для iOS на для разработчика Force.comсайт .Существует класс под названием ZKOAuthViewController, который в значительной степени сделает все за вас.Остальная часть takelit основана на SOAP API Force.com, но я просто создал собственный контроллер входа OAuth на основе наборов инструментов и вместо этого использовал REST API.

...