Получить пользователей каталога Azure AD в приложении Rails - PullRequest
0 голосов
/ 07 октября 2019

У меня есть приложение на Rails 6, и я хочу использовать Azure Active Directory в качестве системы аутентификации (с open id connect, saml2 и ldap). Аутентификация сделана. Сейчас я пытаюсь отобразить информацию о пользователе, такую ​​как имена или адреса электронной почты. Я также хочу иметь возможность экспортировать всех пользователей каталога.

Я попытался настроить конфигурацию следующим образом:

  • В моем приложении Rails, в панели администратора,администратор может настроить Azure AD для моего приложения
  • в конфигурации, администратор скопирует и вставит ссылку конфигурации, предоставленную Azure AD (ответ JSON)
  • Затем скопирует и вставит приложение client_id
  • Затем tenant_id (идентификатор каталога)

Вот фрагмент кода, который я ожидал сработать:

def update_oidc
    identity_provider = IdentityProvider.find_by(provider_type: 'open_id_connect', id: params[:id])
    client_id = params[:client_id].strip
    metadata_url = params[:metadata_url].strip
    tenant_id = params[:tenant_id].strip

    metadata = HTTParty.get(metadata_url).parsed_response

    identity_provider.update(config: {
      metadata: metadata,
      metadata_url: metadata_url,
      client_id: client_id,
      tenant_id: tenant_id,
    })

    if tenant_id 
      directory_access_url = "https://graph.windows.net/#{tenant_id}/users?api-version=1.6"
      result = HTTParty.get(directory_access_url).parsed_response

      identity_provider.directories.find_or_create_by(tenant_id: tenant_id).update(
        business_phones: result["business_phones"],
        display_name: result["display_name"],
        given_name: result["given_name"],
        job_title: result["job_title"],
        email: result["user_principal_name"],
        mobile_phone: result["mobile_phone"],
        office_location: result["office_location"],
        surname: result["surname"]
      )
    end

    redirect_to identity_provider
  end

Так как tenant_idидентификатор каталога, я подумал, что мы могли бы получить доступ к пользовательской информации таким образом (и следуя документам Microsoft). Дело в том, что это не работает, потому что хотя я подключен к своему каталогу Azure AD в своем приложении, когда я запускаю result = HTTParty.get(directory_access_url).parsed_response, у меня появляется ошибка аутентификации, сообщающая, что токен истек или что мне нужно подключиться.

Я не хочу использовать PowerShell или что-то подобное. Я хочу иметь возможность доступа к данным каталогов через мое приложение.

Может кто-нибудь сказать мне, что я делаю неправильно или придумать идею?

Спасибо

1 Ответ

0 голосов
/ 07 октября 2019

В соответствии с вашим кодом, я думаю, вы хотите получить коллекцию пользователей через API REST API Graph Azure Get users с использованием библиотеки jnunemaker/httparty.

Однако, похоже, отсутствует требуемый заголовок Authorization со значением, таким как Bearer eyJ0eX ... FWSXfwtQ в качестве раздела Authentication and authorization официального документа Operations overview | Graph API concepts сказал. Между тем вы выполнили аутентификацию с помощью OpenID Connect, но API API графа Azure требует токен доступа в виде значения Authorization от OAuth2, как указано в приведенном ниже содержании.

API-интерфейс Graph выполняет авторизацию на основеОбласти разрешения OAuth 2.0 присутствуют в токене. Для получения дополнительной информации об областях разрешений, предоставляемых Graph API, см. Области разрешений API Graph .

Чтобы приложение аутентифицировалось с помощью Azure AD и вызывало API Graph, необходимо добавитьдля клиента и настройте его так, чтобы ему требовались разрешения (области разрешений OAuth 2.0) для Windows Azure Active Directory. Сведения о добавлении и настройке приложения см. В Интеграция приложений с Azure Active Directory .

Azure AD использует протокол аутентификации OAuth 2.0. Вы можете узнать больше об OAuth 2.0 в Azure AD, включая поддерживаемые потоки и токены доступа в OAuth 2.0 в Azure AD .

Так что я боюсь, что вам нужно получить доступтокен вручную через OAuth2 для Azure AD снова для использования Graph API, или просто обратитесь к примеру кода samples/authorization_code_example/web_app.rb, используя adal библиотеку GitHub repo AzureAD/azure-activedirectory-library-for-ruby для Ruby.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...