Как разрешить только один адрес электронной почты в домене Google oauth2?(Нужно только белый список @ company.com) - PullRequest
0 голосов
/ 19 сентября 2018

Я готовлю закрытую документацию, которая будет доступна только людям с электронной почтой @ company.com, которая находится в Google.Я пытаюсь использовать как можно более простое решение, потому что я не разработчик приложений и не знаю, что я делаю.

Моим текущим решением является приложение Sinatra, для которого пользовательский путь views настроен на каталог site, где находится статический веб-сайт, созданный mkdocs.Все маршруты определяются через Ruby main.rb с помощью метода, который проверяет, вошел ли пользователь в систему, прежде чем загружать html-контент, так что только аутентифицированные пользователи Google могут видеть его:

before do
 # Ensure user has authorized the app
 unless user_credentials.access_token || request.path_info =~ /^\/oauth2/
  redirect to('/oauth2authorize')
end

end

Аутентификация работает так, как мне нужно, с одной проблемой, которая разрешит любому человеку, у которого есть аккаунт Google

Из того, что я обнаружил, похоже, что у Google oAuth нет опции белого списка, я надеялся, что создание учетных данных из учетной записи @ company.com позволит разрешить только пользователям из одной организации, но естьнет такого варианта.

Итак, мне нужно выбрать домен пользователя или адрес электронной почты пользователя, чтобы я мог подключить метод до начала рендеринга и либо убить его, либо разрешить его.

Я успешно использовал API Gmail через эту службу:

 service = Google::Apis::GmailV1::GmailService.new

, которая дает мне доступ к адресу электронной почты пользователя через email_address в

 service.get_user_profile(user_id)

Нокажется, что это тоже не правильное решение, потому что оно кажется сломанным, когда одновременно вошли несколько пользователей - оно продолжало возвращать электронную почту первого вошедшего в систему пользователя, а не того, который только что вошел в систему.

Я отказываюсь верить, что я первый человек на этой планете, которому нужно писать закрытую документацию для людей, которым требуется SSO, потому что они больше не будут помнить пароли, но я действительно не могу найти ничего об этом ни в документации Google API, ни вв блогах.

В другом вопросе SO я обнаружил упоминание об «отправке параметра HD» (для размещенного домена).В соответствии с документами https://developers.google.com/identity/protocols/OpenIDConnect#hd-param, hd должен быть указан при входе пользователя с хост-домена.Я вхожу в систему с хост-домена, но учетные данные пользователя user_credentials не имеют поля hd.

Я работаю с кодом из этой страницы документа: https://developers.google.com/api-client-library/ruby/guide/aaa_oauth

Полный код в pastebin, он длинный: https://pastebin.com/rNSe2V48

Итак, мой вопрос: Как ограничить Google oAuth одним доменным именем с HD в Ruby?

...