Я узнал, что мы можем использовать API REST для получения данных с сайтов SharePoint. Также SharePoint поддерживает REST с 2010 года. У меня есть API для перечисления данных и их деталей из SharePoint. Это ListData.svc. Существуют ли какие-либо другие API-интерфейсы, подобные тому, с помощью которых мы могли бы аутентифицировать наш сайт. Я попробовал его в браузере (listdata.svc), а до этого я был авторизован. Если я выйду из системы и сделаю "siteUrl / _vti_bin / ListData.svc", я не смогу получить результат, запрос истекает по таймауту или иногда он показывает, что веб-страница недоступна. Если кто-нибудь знает, как размещать материалы SharePoint в приложении для iPhone, поделитесь, пожалуйста, чем-нибудь об этом.
Как аутентифицировать сайт Microsoft SharePoint с помощью REST API из приложения iOS
Ответы (3)
Прочтите это: http://sharepointsemantics.com/2011/07/the-client-side-object-model-help-with-headless-authentication-in-sharepoint-online/ Убедитесь, что вы прочитали связанные статьи, написанные Крис Джонсон, следование информации должно решить ваши проблемы с аутентификацией.
Замечание: вы в значительной степени ДОЛЖНЫ использовать проверку подлинности с помощью форм на стороне SharePoint.
Вот как я сделал это для аутентификации 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.
Посмотрите на этот проект, он поддерживает SharePoint 2013 RestAPI. Он работает для меня, и я уверен, что он будет работать и для вас.
https://github.com/jimmywim/SPRestAPI
По умолчанию SPRESTQuery предоставляет ответ в XMl. Если вы хотите получить ответ в json, вам нужно будет написать эту строку в методе executeQuery.
[apiRequest setValue:@"application/json;odata=verbose" forHTTPHeaderField:@"Accept"];