我有一个已经在应用程序商店中的iOS应用程序,我通过我的网络API验证我的应用程序的用户。用户访问的应用程序和手动提供的访问权限。在下一个版本中,我只想控制使用Azure AD访问我的应用程序,即只有在Azure AD中配置的用户才能访问该应用程序。
我是Azure AD的新手。我已经完成了从https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-ios-get-started开始的Microsoft Azure中的多个文档,并且所有文档/内容让我感到困惑,我才知道ADAL是需要用于从Azure AD进行身份验证的库。
请建议我从哪里开始,需要遵循/完成的事情。我已检查https://github.com/Azure-Samples/active-directory-ios和其他相关Azure本机应用程序库以获取objective-c。
提前致谢。
答案 0 :(得分:0)
如果您只想对Azure AD进行身份验证,则不需要任何移动后端 - 只需要ADAL库以及Azure AD中本机应用程序的相应配置。
首先,为Native Mobile App配置Azure AD:
此时,您已经创建了该应用。单击CONFIGURE选项卡,记下客户端ID和重定向URI。
现在,您可以通过替换ADAL库的客户端ID和重定向URI来使用任何示例。以下是其中一个样本的相关代码:
- (void)acquireTokenInteractive:(id)sender
{
ADTestAppSettings* settings = [ADTestAppSettings settings];
NSString* authority = [settings authority];
NSString* resource = [settings resource];
NSString* clientId = [settings clientId];
NSURL* redirectUri = [settings redirectUri];
ADUserIdentifier* identifier = [self identifier];
ADCredentialsType credType = [self credType];
BOOL validateAuthority = _validateAuthority.selectedSegmentIndex == 0;
ADAuthenticationError* error = nil;
ADAuthenticationContext* context = [[ADAuthenticationContext alloc
initWithAuthority:authority
validateAuthority:validateAuthority
error:&error];
if (!context)
{
NSString* resultText = [NSString stringWithFormat:@"Failed to create AuthenticationContext:\n%@", error];
[_resultView setText:resultText];
return;
}
[context setCredentialsType:credType];
if ([self embeddedWebView])
{
[context setWebView:_webView];
//[_authView setFrame:self.view.frame];
[UIView animateWithDuration:0.5 animations:^{
[_acquireSettingsView setHidden:YES];
[_authView setHidden:NO];
}];
}
__block BOOL fBlockHit = NO;
[context acquireTokenWithResource:resource
clientId:clientId
redirectUri:redirectUri
promptBehavior:[self promptBehavior]
userIdentifier:identifier
extraQueryParameters:nil
completionBlock:^(ADAuthenticationResult *result)
{
if (fBlockHit)
{
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController* alert = [UIAlertController
alertControllerWithTitle:@"Error!"
message:@"Completion block was hit multiple times!"
preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alert animated:YES completion:nil];
});
return;
}
fBlockHit = YES;
dispatch_async(dispatch_get_main_queue(), ^{
[self updateResultView:result];
[_webView loadHTMLString:@"<html><head></head><body>done!</body></html>" baseURL:nil];
[_authView setHidden:YES];
[self.view setNeedsDisplay];
[[NSNotificationCenter defaultCenter] postNotificationName:ADTestAppCacheChangeNotification object:self];
});
}];
}