An open API service indexing awesome lists of open source software.

https://github.com/pedrofurtado/keycloak-connect-ruby


https://github.com/pedrofurtado/keycloak-connect-ruby

Last synced: about 1 month ago
JSON representation

Awesome Lists containing this project

README

        

# Keycloak connect ruby

```ruby
require 'logger'

KeycloakConnectRuby.configure do |c|
c.url = 'http://keycloak_server:8080'
c.realm = 'my-company'
c.client_id = 'my-sinatra-app'
c.client_secret = 'dsfgfdgfdgfd'
c.logger = Logger.new(STDOUT) # Or Rails.logger
c.proxy = nil
end

class MyApiController < ApplicationController
before_action :keycloak_authenticate_and_check_role!

def current_user
KeycloakConnectRuby::User.from_token(keycloak_token)
end

private

def keycloak_token
KeycloakConnectRuby::Token.validate_and_decode(bearer_token)
end

def bearer_token
request.authorization&.to_s&.gsub(/^Bearer /, "")
end

def keycloak_authenticate_and_check_role!
unless current_user.has_role?('my-role-name')
render json: { error: 'your message here' }, status: :unauthorized
end
rescue KeycloakConnectRuby::Errors::Token::ExpiredError => e
# ...
rescue KeycloakConnectRuby::Errors::Token::NoProvidedError => e
# ...
rescue KeycloakConnectRuby::Errors::Token::InvalidFormatError => e
# ...
end

def generate_keycloak_token_for_api_calls
# Client Credentials Grant flow
KeycloakConnectRuby::Token.generate_from_client_credentials

# Resource Owner Password Credentials flow (or Direct Grant flow)
KeycloakConnectRuby::Token.generate_from_password_credentials('username here', 'password here')
end
end
```