scinote-web/config/initializers/omniauth.rb

39 lines
1.6 KiB
Ruby
Raw Normal View History

2019-12-11 00:24:53 +08:00
# frozen_string_literal: true
require 'omniauth/strategies/custom_azure_active_directory'
AZURE_SETUP_PROC = lambda do |env|
2019-12-11 00:24:53 +08:00
providers = Rails.configuration.x.azure_ad_apps.select { |_, v| v[:enable_sign_in] == true }
2021-07-23 17:56:28 +08:00
raise StandardError, 'No Azure AD config available for sign in' if providers.blank?
2019-12-11 00:24:53 +08:00
req = Rack::Request.new(env)
if providers.size > 1
if req.params['id_token'].present? # Callback phase
unverified_jwt_payload, = JWT.decode(req.params['id_token'], nil, false)
raise StandardError, 'No Azure AD config available for sign in' if providers[unverified_jwt_payload['aud']].blank?
provider_id = unverified_jwt_payload['aud']
else # Authorization phase
raise ActionController::ParameterMissing, 'Provider name is missing' if req.params['provider'].blank?
2019-12-11 00:24:53 +08:00
provider_id = providers.select { |_, v| v[:provider] == req.params['provider'] }.keys.first
raise StandardError, 'No Azure AD config available for sign in' if provider_id.blank?
end
end
provider_id ||= providers.keys.first
provider_conf = providers[provider_id]
env['omniauth.strategy'].options[:client_id] = provider_id.to_s
env['omniauth.strategy'].options[:client_secret] = provider_conf[:client_secret]
env['omniauth.strategy'].options[:tenant_id] = provider_conf[:tenant_id]
2019-12-11 00:24:53 +08:00
env['omniauth.strategy'].options[:sign_in_policy] = provider_conf[:sign_in_policy]
env['omniauth.strategy'].options[:name] = 'customazureactivedirectory'
2019-12-11 00:24:53 +08:00
end
Rails.application.config.middleware.use OmniAuth::Builder do
provider OmniAuth::Strategies::CustomAzureActiveDirectory, setup: AZURE_SETUP_PROC
2019-12-11 00:24:53 +08:00
end
OmniAuth.config.logger = Rails.logger