Контроль доступа для приложения iOS с пользователями Azure AD

У меня есть приложение для iOS, которое уже есть в магазине приложений, и я аутентифицирую пользователей своего приложения через свой веб-API. Приложение, к которому имеют доступ пользователи, и этот доступ предоставляется вручную. В следующем выпуске я просто хочу контролировать доступ к моему приложению с помощью Azure AD, то есть доступ к приложению получают только пользователи, настроенные в Azure AD.

Я новичок в Azure AD. Я просмотрел несколько документов из Microsoft Azure, начиная с https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-ios-get-started и все документы / материал смутил меня, и я только что узнал, что ADAL - это библиотека, которую нужно использовать для аутентификации из Azure AD.

Пожалуйста, подскажите, с чего начать и что нужно делать / делать. Я проверил https://github.com/Azure-Samples/active-directory-ios и другие связанные библиотеки приложений Azure для objective-c.

Заранее спасибо.


person Venuu Munnuruu    schedule 13.12.2016    source источник
comment
Обновите свой вопрос и перечислите все, что вас смутило. Пожалуйста, постарайтесь быть как можно более информативным.   -  person Gaurav Mantri    schedule 13.12.2016
comment
Вы хотите аутентифицировать доступ к самому приложению или предоставить аутентифицированную личность для своей веб-службы?   -  person Paulw11    schedule 13.12.2016
comment
Спасибо за ваши Коментарии. Вопрос, который я разместил, - это конечный результат, которого я ожидаю. Путаница в том, что именно здесь представляет собой мобильный сервер? 1) как я могу реализовать, чтобы получить конечный результат. 2) Вышеупомянутая ссылка на начало работы показывает создание нового приложения для iOS, но как его реализовать для уже существующего приложения. 3) С какао-стручками, черт возьми, количество ошибок / исключений растет, поэтому у нас нет другого варианта без какао-стручков. 4) Я только что создал приложение в Azure AD (как показано в приведенной выше ссылке «Начало работы»), какие шаги мне нужно выполнить для получения ожидаемого результата.   -  person Venuu Munnuruu    schedule 13.12.2016


Ответы (1)


Если вы просто хотите пройти проверку подлинности в Azure AD, вам не понадобится мобильная серверная часть - только библиотека ADAL и соответствующая конфигурация для собственного приложения в Azure AD.

Во-первых, настройте Azure AD для собственного мобильного приложения:

  1. Войдите на классический портал Azure (https://manage.windowsazure.com)
  2. Выберите соответствующий каталог из списка всех элементов.
  3. Перейдите на вкладку ПРИЛОЖЕНИЯ.
  4. Нажмите кнопку ДОБАВИТЬ внизу страницы.
  5. Нажмите "Добавить приложение, которое разрабатывает моя организация".
  6. Дайте ему имя, затем выберите ПРИЛОЖЕНИЕ ДЛЯ НАТУРАЛЬНОГО КЛИЕНТА в качестве Типа.
  7. Введите действительный URI для URI перенаправления (это может быть что угодно, но оно должно быть действительным)
  8. Щелкните галочку, чтобы создать приложение.

На этом этапе вы создали приложение. Щелкните вкладку КОНФИГУРАЦИЯ и обратите внимание на идентификатор клиента и URI перенаправления.

Теперь вы можете использовать любой из примеров, заменив идентификатор клиента и URI перенаправления для библиотеки ADAL. Вот соответствующий код из одного из примеров:

- (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];
        });
    }];
}
person Adrian Hall    schedule 13.12.2016
comment
Спасибо, Адриан. Тем не менее, я занимаюсь исследованиями и разработками Azure, и, чтобы понять, я только что закончил с вашими шагами здесь, мой вопрос в том, что мы не проверяем данные пользователя, а затем, какой / как пользователь будет аутентифицироваться. не могли бы вы привести пример аутентификации пользователя из Azure AD - person Venuu Munnuruu; 16.12.2016
comment
Я получаю ошибку: status = AD_FAILED; error = Ошибка с кодом: AD_ERROR_UI_NO_MAIN_VIEW_CONTROLLER Домен: ADAuthenticationErrorDomain ProtocolCode: (null) Подробности: Приложение не имеет текущего ViewController. Сведения о внутренней ошибке: домен ошибки = ADAuthenticationErrorDomain Code = 401 (null) - person Venuu Munnuruu; 16.12.2016
comment
Поскольку вы являетесь внутренним сотрудником Azure, обратитесь напрямую к команде Azure AD. Вы также можете обратиться ко мне внутренне, и я укажу вам правильное направление. - person Adrian Hall; 19.12.2016