/
Adding Okta Authentication
Adding Okta Authentication
This information comes from notes during the implementation of Okta within an Avalon instance.
TL,DR
Check these two commits
Steps
Add to Gemfile
gem 'omniauth-oktaoauth'
Add Okta provider to User model, use email as username
devise_list << { omniauth_providers: [:oktaoauth] } if ENV['OKTA_CLIENT_ID'] def self.find_by_username_or_email(login) create(username: email, email: email, password: Devise.friendly_token[0, 20], provider: provider) end
Setup Okta params in config/initializers/devise.rb
if provider[:provider] == :oktaoauth okta_params = params.delete(:oauth_credentials) params[:strategy_class] = params[:strategy_class].constantize if params.has_key?(:strategy_class) okta_params << params params = okta_params end
Add Okta config to auth block in config/settings.yml
configuration: <% if ENV['OKTA_CLIENT_ID'] %> - :name: Avalon Okta Oauth :provider: :oktaoauth :hidden: false :params: :oauth_credentials: [<%= ENV['OKTA_CLIENT_ID'] %>, <%= ENV['OKTA_CLIENT_SECRET'] %>] :scope: 'openid profile email' :fields: ['profile','email'] :client_options: site: <%= ENV['OKTA_ISSUER'] %> authorize_url: <%= ENV['OKTA_ISSUER'] + "/v1/authorize" %> token_url: <%= ENV['OKTA_ISSUER'] + "/v1/token" %> :redirect_uri: <%= ENV["OKTA_REDIRECT_URI"] %> :auth_server_id: <%= ENV['OKTA_AUTH_SERVER_ID'] %> :issuer: <%= ENV['OKTA_ISSUER'] %> :strategy_class: 'OmniAuth::Strategies::Oktaoauth' <% end %>
Example config
OKTA_ISSUER=https://okta.example.edu/oauth2 OKTA_REDIRECT_URI=https://avalon.example.edu/users/auth/oktaoauth/callback OKTA_AUTH_SERVER_ID=""
Avoid infinite redirect, add to after_omniauth_failure_path_for method in app/controllers/users/omniauth_callbacks_controller.rb
when 'oktaoauth' msg = I18n.t 'devise.omniauth_callbacks.failure', reason: failure_message root_path