Я использую гем 'omniauth-openid' для реализации входа в систему OpenID. В моем методе обратного вызова OmniAuth я делаю что-то вроде этого (это упрощено, но передает важные детали):
def google
oauth = request.env['omniauth.auth']
if @user = User.find_by_email(oauth.info.email)
sign_in(@user) and redirect_to '/dashboard'
end
end
Это фактически то же самое, что показывает документация OmniAuth на GitHub; и все же я чувствую, что это очень небезопасно. Все, что нужно сделать злоумышленнику, - это вручную изменить параметр info.email в URL-адресе обратного вызова, и он может войти в систему как любой другой пользователь.
Является ли это фундаментальным недостатком OmniAuth? Или есть какой-то способ подтвердить, что параметры, переданные методу обратного вызова OmniAuth, были подлинно отправлены поставщиком OpenID, а не изменены плохим парнем?