Как аутентифицировать сайт Microsoft SharePoint с помощью REST API из приложения iOS

Я узнал, что мы можем использовать API REST для получения данных с сайтов SharePoint. Также SharePoint поддерживает REST с 2010 года. У меня есть API для перечисления данных и их деталей из SharePoint. Это ListData.svc. Существуют ли какие-либо другие API-интерфейсы, подобные тому, с помощью которых мы могли бы аутентифицировать наш сайт. Я попробовал его в браузере (listdata.svc), а до этого я был авторизован. Если я выйду из системы и сделаю "siteUrl / _vti_bin / ListData.svc", я не смогу получить результат, запрос истекает по таймауту или иногда он показывает, что веб-страница недоступна. Если кто-нибудь знает, как размещать материалы SharePoint в приложении для iPhone, поделитесь, пожалуйста, чем-нибудь об этом.


person Sagar S. Kadookkunnan    schedule 06.09.2011    source источник


Ответы (3)


Прочтите это: http://sharepointsemantics.com/2011/07/the-client-side-object-model-help-with-headless-authentication-in-sharepoint-online/ Убедитесь, что вы прочитали связанные статьи, написанные Крис Джонсон, следование информации должно решить ваши проблемы с аутентификацией.

Замечание: вы в значительной степени ДОЛЖНЫ использовать проверку подлинности с помощью форм на стороне SharePoint.

person Nikunj Jadav    schedule 06.09.2011
comment
Я получил ответ на один из своих предыдущих вопросов. Я спросил не об этом. Мне нужно про REST API. В нем рассказывается о CSOM, еще одном методе доступа к данным. - person Sagar S. Kadookkunnan; 06.09.2011
comment
Тот же метод можно использовать для вызовов REST. вы берете те же файлы cookie, которые получаете, и присоединяете их к HTTP-вызовам REST. Вспомогательный код в моих сообщениях в блоге поможет вам получить эти файлы cookie. - person Chris Johnson; 08.02.2012

Вот как я сделал это для аутентификации NTLM в SharePoint 2010 через http. Он работает и возвращает словарь JSON при любом вызове listdata.svc (например, при обращении к URL yourdomain / _vti_bin / listdata.svc / YourList):

Возьмите AFNetworking и следуйте инструкциям, чтобы вставить его в свое приложение XCode.

Если в вашем проекте компилируется AFNetworking, вам необходимо создать подкласс класса AFHTTPClient инфраструктуры AFNetworking. Например. добавьте новый класс в свой проект iOS XCode и выберите AFHTTPClient в качестве типа объекта.

После разделения на подклассы вы получите что-то вроде следующего:

YourHTTPClient.h

#import "AFHTTPClient.h"
#import "AFJSONRequestOperation.h"
#import "AFNetworkActivityIndicatorManager.h"

typedef void(^OLClientSuccess) (AFJSONRequestOperation *operation, id responseObject);
typedef void(^OLClientFailure) (AFJSONRequestOperation *operation, NSError *error);

@interface OLHTTPClient : AFHTTPClient
{

NSString *strBASEURL;
NSString *strUser;
NSString *strPassword;

}

@property (nonatomic, retain) NSString *strUser;
@property (nonatomic, retain) NSString *strPassword;
@property (nonatomic, retain) NSString *strBASEURL;

+(id) sharedClient;

- (void)setUsername:(NSString *)username andPassword:(NSString *)password;

-(void) getStuff:(OLClientSuccess) success failure:(OLClientFailure) failure;

@end

В файле YourHTTPClient.m у вас может быть приведенный ниже код, но в этом файле .m вы будете реализовывать вызовы собственных методов для получения данных списка из SharePoint. См. ниже:

Фрагмент кода для аутентификации от YourHTTPClient.m:

- (void)getPath:(NSString *)path parameters:(NSDictionary *)parameters
    success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
    failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{
NSURLRequest *request = [self requestWithMethod:@"GET" path:path parameters:parameters];
AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure];
[operation setAuthenticationChallengeBlock:^(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge) {
    NSURLCredential *newCredential = [NSURLCredential credentialWithUser:self.User password:self.password persistence:NSURLCredentialPersistenceForSession];
    [challenge.sender useCredential:newCredential forAuthenticationChallenge:challenge];
}];
[self enqueueHTTPRequestOperation:operation];
}

@end

Я пробовал описанное выше только в среде SharePoint 2010, настроенной для аутентификации с использованием NTLM. Может потребоваться перенастройка, если вам нужно пройти аутентификацию с использованием Kerberos, но я подозреваю, что это возможно также с использованием AFNetworking.

person motionpotion    schedule 10.04.2013

Посмотрите на этот проект, он поддерживает SharePoint 2013 RestAPI. Он работает для меня, и я уверен, что он будет работать и для вас.

https://github.com/jimmywim/SPRestAPI

По умолчанию SPRESTQuery предоставляет ответ в XMl. Если вы хотите получить ответ в json, вам нужно будет написать эту строку в методе executeQuery.

[apiRequest setValue:@"application/json;odata=verbose" forHTTPHeaderField:@"Accept"];
person iDevAmit    schedule 02.12.2013