Google Apps и Аутентификация Open ID в Rails - Безопасность
Я перемещаю приложение, чтобы использовать только федеративный логин Google (OpenID) для приложения (мы используем приложения Google для всего и считаем, что было бы проще объединить управление пользователями там). Хотя я могу успешно войти в систему и создавать пользователей, мои мысли теперь о безопасности...
Когда пользователь входит в систему, у меня есть только кнопка "Войти" - больше ничего. Домен сайта жестко запрограммирован (где SITE_DOMAIN показан ниже), и пользователь перенаправляется на обычную страницу входа в Google.
Вот код:
def create
open_id_authentication
end
protected
def open_id_authentication
openid_url = 'https://www.google.com/accounts/o8/site-xrds?hd=SITE_DOMAIN'
authenticate_with_open_id(openid_url,
:required => ['http://axschema.org/contact/email',
'http://axschema.org/namePerson/first',
'http://axschema.org/namePerson/last']) do |result, identity_url, registration|
case result.status
when :missing
failed_login "Sorry, the OpenID server couldn't be found"
when :invalid
failed_login "Sorry, but this does not appear to be a valid OpenID"
when :canceled
failed_login "OpenID verification was canceled"
when :failed
failed_login "Sorry, the OpenID verification failed"
when :successful
if @current_user = User.find_by_id_url(identity_url)
if @current_user.login_from(request.env['REMOTE_ADDR'])
successful_login
else
failed_login "Your OpenID profile registration failed: " + @current_user.errors.full_messages.to_sentence
end
else
ax_response = OpenID::AX::FetchResponse.from_success_response(request.env[Rack::OpenID::RESPONSE])
@current_user = User.login_create(ax_response, identity_url, request.env['REMOTE_ADDR'])
successful_login
end
end
end
end
После успешного входа я просто сохраняю пользователя в сеанс...
session[:current_user] = @current_user
... и использовать простой метод current_user в контроллере приложения...
def current_user
return session[:current_user] if defined?(session[:current_user])
end
Моя главная забота касается безопасности. OpenIDAuthentication использует хранилище в памяти, и в целом это казалось слишком простым для реализации (после прочтения тонны документации). Базовые тесты показывают, что это работает нормально, но я нервничаю.:)
Какие-нибудь мысли?
Я использую плагин open_id_authentication и базовый гем ruid openid (с гемом ruby-openid-apps-discovery для приложений Google)