Add a U2F-specific audit log entry after logging in.
- "two-factor" for OTP-based 2FA - "two-factor-via-u2f-device" for U2F-based 2FA - "standard" for non-2FA login
This commit is contained in:
parent
86b07caa59
commit
4db19bb445
2 changed files with 36 additions and 3 deletions
|
@ -30,8 +30,7 @@ class SessionsController < Devise::SessionsController
|
|||
resource.update_attributes(reset_password_token: nil,
|
||||
reset_password_sent_at: nil)
|
||||
end
|
||||
authenticated_with = user_params[:otp_attempt] ? "two-factor" : "standard"
|
||||
log_audit_event(current_user, with: authenticated_with)
|
||||
log_audit_event(current_user, with: authentication_method)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -117,4 +116,14 @@ class SessionsController < Devise::SessionsController
|
|||
def load_recaptcha
|
||||
Gitlab::Recaptcha.load_configurations!
|
||||
end
|
||||
|
||||
def authentication_method
|
||||
if user_params[:otp_attempt]
|
||||
"two-factor"
|
||||
elsif user_params[:device_response]
|
||||
"two-factor-via-u2f-device"
|
||||
else
|
||||
"standard"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -25,10 +25,15 @@ describe SessionsController do
|
|||
expect(response).to set_flash.to /Signed in successfully/
|
||||
expect(subject.current_user). to eq user
|
||||
end
|
||||
|
||||
it "creates an audit log record" do
|
||||
expect { post(:create, user: { login: user.username, password: user.password }) }.to change { SecurityEvent.count }.by(1)
|
||||
expect(SecurityEvent.last.details[:with]).to eq("standard")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when using two-factor authentication' do
|
||||
context 'when using two-factor authentication via OTP' do
|
||||
let(:user) { create(:user, :two_factor) }
|
||||
|
||||
def authenticate_2fa(user_params)
|
||||
|
@ -117,6 +122,25 @@ describe SessionsController do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
it "creates an audit log record" do
|
||||
expect { authenticate_2fa(login: user.username, otp_attempt: user.current_otp) }.to change { SecurityEvent.count }.by(1)
|
||||
expect(SecurityEvent.last.details[:with]).to eq("two-factor")
|
||||
end
|
||||
end
|
||||
|
||||
context 'when using two-factor authentication via U2F device' do
|
||||
let(:user) { create(:user, :two_factor) }
|
||||
|
||||
def authenticate_2fa_u2f(user_params)
|
||||
post(:create, { user: user_params }, { otp_user_id: user.id })
|
||||
end
|
||||
|
||||
it "creates an audit log record" do
|
||||
allow(U2fRegistration).to receive(:authenticate).and_return(true)
|
||||
expect { authenticate_2fa_u2f(login: user.username, device_response: "{}") }.to change { SecurityEvent.count }.by(1)
|
||||
expect(SecurityEvent.last.details[:with]).to eq("two-factor-via-u2f-device")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue