У меня есть приложение на 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 или что-то подобное. Я хочу иметь возможность доступа к данным каталогов через мое приложение.
Может кто-нибудь сказать мне, что я делаю неправильно или придумать идею?
Спасибо