使用Azure AD用户访问iOS App的访问控制

时间:2016-12-13 07:43:11

标签: ios objective-c azure authentication azure-mobile-services

我有一个已经在应用程序商店中的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。

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您只想对Azure AD进行身份验证,则不需要任何移动后端 - 只需要ADAL库以及Azure AD中本机应用程序的相应配置。

首先,为Native Mobile App配置Azure AD:

  1. 登录Azure经典门户网站(https://manage.windowsazure.com
  2. 从所有项目列表中选择适当的目录
  3. 单击“应用程序”选项卡
  4. 点击页面底部的添加按钮
  5. 点击添加我的组织正在开发的应用程序
  6. 为其命名,然后选择NATIVE CLIENT APPLICATION作为Type
  7. 输入重定向URI的有效URI(可以是任何内容,但必须有效)
  8. 单击勾选以创建应用程序。
  9. 此时,您已经创建了该应用。单击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];
            });
        }];
    }