試圖與Azure的Active Directory來驗證和獲取郵件,日曆數據的日曆事件,的accessToken成功返回:iOS的身份驗證Azure中的Active Directory及獲得Office 365的交換
authority = @"https://login.windows.net/common/oauth2/authorize";
redirectUriString = @"http://xxxxxx.xxxxxxx.com/oauth";
resourceId = @"https://outlook.office365.com";
clientId = @"xxxxxxx-xxxxx-xxx";
-(void) getToken : (BOOL) clearCache completionHandler:(void (^) (NSString*))completionBlock;
{
ADAuthenticationError *error;
authContext = [ADAuthenticationContext authenticationContextWithAuthority:authority
error:&error];
[authContext setValidateAuthority:YES];
NSURL *redirectUri = [NSURL URLWithString:redirectUriString];
if(clearCache){
[authContext.tokenCacheStore removeAllWithError:&error];
if (error) {
NSLog(@"Error: %@", error);
}
}
[authContext acquireTokenWithResource:resourceId
clientId:clientId
redirectUri:redirectUri
completionBlock:^(ADAuthenticationResult *result) {
if (AD_SUCCEEDED != result.status){
// display error on the screen
[self showError:result.error.errorDetails];
}
else{
completionBlock(result.accessToken);
}
}];
}
- (NSArray的*)getEventsList {
__block NSMutableArray * todoList;
[self getToken:YES completionHandler:^(NSString* accessToken){
NSURL *todoRestApiURL = [[NSURL alloc]initWithString:@"https://outlook.office365.com/api/v1.0/me/folders/inbox/messages?$top=2"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:todoRestApiURL];
NSString *authHeader = [NSString stringWithFormat:@"Bearer %@", @""];
[request addValue:authHeader forHTTPHeaderField:@"Authorization"];
[request addValue:@"application/json; odata.metadata=none" forHTTPHeaderField:@"accept"];
[request addValue:@"fbbadfe-9211-1234-9654-fe435986a1d6" forHTTPHeaderField:@"client-request-id"];
[request addValue:@"Presence-Propelics/1.0" forHTTPHeaderField:@"User-Agent"];
//[request addValue:@"true" forHTTPHeaderField:@"return-client-request-id"];
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if (error == nil){
NSArray *scenarios = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
todoList = [[NSMutableArray alloc]initWithArray:scenarios];
//each object is a key value pair
NSDictionary *keyVauePairs;
for(int i =0; i < todoList.count; i++)
{
keyVauePairs = [todoList objectAtIndex:i];
NSLog(@"%@", keyVauePairs);
}
}
NSLog(@"Finished");
//[delegate updateTodoList:TodoList];
}];
}];
return nil; }
錯誤返回響應對象:
{ error = { code = ErrorAccessDenied; message =「訪問被拒絕。檢查憑據並重試。」; }; }
我不知道該投票,因爲從Office 365的代碼示例具有相同的完整的詳細信息。如果我可以通過評論得到一些幫助,以改善答案,請讓我知道 – NSDumb 2015-02-16 09:54:08
SO喜歡避免依賴鏈接的答案。官方文檔相關部分(鏈接旁)的引用意味着如果遠程站點不可用,答案仍然有用。 – Sobrique 2015-02-16 12:33:10
@Sobrique:好的,讓我在我的答案中添加更多數據感謝您的幫助 – NSDumb 2015-02-16 12:44:36