diff options
author | Markus Koller <markus-koller@gmx.ch> | 2016-12-09 20:36:50 +0300 |
---|---|---|
committer | Alexis Reigel <mail@koffeinfrei.org> | 2017-03-07 16:54:35 +0300 |
commit | c4982890489d254da2fe998aab30bf257767ed5e (patch) | |
tree | 0828e0cab70cabaceffcc0d588db32ac38ddf310 /config/initializers/doorkeeper_openid_connect.rb | |
parent | fb4a486605e10692b5577f0700fbce38bebcc311 (diff) |
Implement OpenID Connect identity provider
Diffstat (limited to 'config/initializers/doorkeeper_openid_connect.rb')
-rw-r--r-- | config/initializers/doorkeeper_openid_connect.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/config/initializers/doorkeeper_openid_connect.rb b/config/initializers/doorkeeper_openid_connect.rb new file mode 100644 index 00000000000..700ca25b884 --- /dev/null +++ b/config/initializers/doorkeeper_openid_connect.rb @@ -0,0 +1,36 @@ +Doorkeeper::OpenidConnect.configure do + issuer Gitlab.config.gitlab.url + + jws_private_key Rails.application.secrets.jws_private_key + + resource_owner_from_access_token do |access_token| + User.active.find_by(id: access_token.resource_owner_id) + end + + auth_time_from_resource_owner do |user| + user.current_sign_in_at + end + + reauthenticate_resource_owner do |user, return_to| + store_location_for user, return_to + sign_out user + redirect_to new_user_session_url + end + + subject do |user| + # hash the user's ID with the Rails secret_key_base to avoid revealing it + Digest::SHA256.hexdigest "#{user.id}-#{Rails.application.secrets.secret_key_base}" + end + + claims do + with_options scope: :openid do |o| + o.claim(:name) { |user| user.name } + o.claim(:nickname) { |user| user.username } + o.claim(:email) { |user| user.public_email } + o.claim(:email_verified) { |user| true if user.public_email? } + o.claim(:website) { |user| user.full_website_url if user.website_url? } + o.claim(:profile) { |user| Rails.application.routes.url_helpers.user_url user } + o.claim(:picture) { |user| user.avatar_url } + end + end +end |