keycloak 2.2.9 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 56a336f456ac6997524a6c4f7579ca04c6be6f27
4
- data.tar.gz: e30bc3b08c799a7b76192bc08093ca0caa58f71e
2
+ SHA256:
3
+ metadata.gz: bed7a57a922cce701d2a97abfe58dc2a9424a6744bf9756f2abdc99e0f8fe9a4
4
+ data.tar.gz: c133a6162ad571e0e224145524430991e94d09333f24a8cc40302b48562087bf
5
5
  SHA512:
6
- metadata.gz: 4f1f1adfc4d758cee7d2d4f4b258155a10191365a974e4ea0b5018d660441763394abe21974847f505f318bb44b58714951ce689b2dc4e593f1ba7abbf335692
7
- data.tar.gz: 8441e469f2fd48df0d83298ab9e8a4b27dbca74b2d0f14fe1b25c1e3b1cf6b5a2bdcaacf189613453b4b77bf24e462c5bc5572505980d822230d3cf1a0d82c8a
6
+ metadata.gz: d123f765a14329ac0078f14b252563b34b8955abc63b1c65aa2a466fc2382fc3d7eb0ecf158e08362c96bea3c81d0244b28df2ece20faf92280193840f5c855e
7
+ data.tar.gz: 785c56cfce98cf957c2c83a16143599e226ddf521d0fbaa629413f1bd9bb95f1072f3e753c19cbac8aa5d931ed2942d4f269f9a2c542f60411d4794e65824d84
@@ -0,0 +1,65 @@
1
+ {
2
+ // Use IntelliSense to learn about possible attributes.
3
+ // Hover to view descriptions of existing attributes.
4
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+
8
+ {
9
+ "name": "Debug Local File",
10
+ "type": "Ruby",
11
+ "request": "launch",
12
+ "cwd": "${workspaceRoot}",
13
+ "program": "${workspaceRoot}/main.rb"
14
+ },
15
+ {
16
+ "name": "Listen for rdebug-ide",
17
+ "type": "Ruby",
18
+ "request": "attach",
19
+ "cwd": "${workspaceRoot}",
20
+ "remoteHost": "127.0.0.1",
21
+ "remotePort": "1234",
22
+ "remoteWorkspaceRoot": "${workspaceRoot}"
23
+ },
24
+ {
25
+ "name": "Rails server",
26
+ "type": "Ruby",
27
+ "request": "launch",
28
+ "cwd": "${workspaceRoot}",
29
+ "program": "${workspaceRoot}/bin/rails",
30
+ "args": [
31
+ "server"
32
+ ]
33
+ },
34
+ {
35
+ "name": "RSpec - all",
36
+ "type": "Ruby",
37
+ "request": "launch",
38
+ "cwd": "${workspaceRoot}",
39
+ "program": "${workspaceRoot}/bin/rspec",
40
+ "args": [
41
+ "-I",
42
+ "${workspaceRoot}"
43
+ ]
44
+ },
45
+ {
46
+ "name": "RSpec - active spec file only",
47
+ "type": "Ruby",
48
+ "request": "launch",
49
+ "cwd": "${workspaceRoot}",
50
+ "program": "${workspaceRoot}/bin/rspec",
51
+ "args": [
52
+ "-I",
53
+ "${workspaceRoot}",
54
+ "${file}"
55
+ ]
56
+ },
57
+ {
58
+ "name": "Cucumber",
59
+ "type": "Ruby",
60
+ "request": "launch",
61
+ "cwd": "${workspaceRoot}",
62
+ "program": "${workspaceRoot}/bin/cucumber"
63
+ }
64
+ ]
65
+ }
data/README.pt-BR.md CHANGED
@@ -33,7 +33,7 @@ Para adicionar o arquivo de configuração:
33
33
 
34
34
  Considerando que você já possua um ambiente do Keycloak configurado e a gem já instalada, o próximo passo é definir como será a autenticação da aplicação. O Keycloak trabalha com os principais protocolos de autenticação, tais como o OpenID Connect, Oauth 2.0 e SAML 2.0, integrando acesso a sistemas via Single-Sign On, podendo inclusive disponibilizar acessos a usuários LDAP ou Active Directory.
35
35
 
36
- Ao cadastrar um Reino e também um Client no seu ambiente Keycloak, será necessário fazer o download do arquivo de instalação do Client para dentro da pasta raiz da aplicação, para que a gem obtenha as informações necessárias para interagir com o Keycloak. Para fazer esse download, basta acessar o cadastro de seu Client, clicar na aba <b>Installation</b>, selecionar <b>Keycloak OIDC JSON</b> no campo <b>Format option</b> e clicar em <b>Download</b>.
36
+ Ao cadastrar um Reino e também um Client no seu ambiente Keycloak, você poderá fazer o download do arquivo de instalação do Client para dentro da pasta raiz da aplicação, para que a gem obtenha as informações necessárias para interagir com o Keycloak. Para fazer esse download, basta acessar o cadastro de seu Client, clicar na aba <b>Installation</b>, selecionar <b>Keycloak OIDC JSON</b> no campo <b>Format option</b> e clicar em <b>Download</b>. Caso a sua aplicação não trabalhe apenas com um client específico (aplicação servidora de APIs, por exemplo), então você poderá informar o reino que a gem irá interagir no arquivo de configuração `keycloak.rb`.
37
37
 
38
38
  A gem possui um módulo principal chamado <b>Keycloak</b>. Dentro desse módulo há três outros módulos: <b>Client</b>, <b>Admin</b> e <b>Internal</b>.
39
39
 
@@ -41,6 +41,20 @@ A gem possui um módulo principal chamado <b>Keycloak</b>. Dentro desse módulo
41
41
 
42
42
  O módulo Keycloak possui alguns atributos e suas definições são fundamentais para o perfeito funcionamento da gem na aplicação.
43
43
 
44
+ ```ruby
45
+ Keycloak.realm
46
+ ```
47
+
48
+ Se a sua aplicação não trabalha apenas com um client específico (aplicação servidora de APIs, por exemplo), então você poderá informar o nome reino que a gem irá interagir nesse atributo. Ao ser instalada, a gem cria o arquivo `keycloak.rb` em `config/initializers`. Este atributo pode ser encontrado e definido nesse arquivo.
49
+
50
+
51
+ ```ruby
52
+ Keycloak.auth_server_url
53
+ ```
54
+
55
+ Para o mesmo cenário do atributo acima, você poderá informar a url reino que a gem irá interagir nesse atributo. Ao ser instalada, a gem cria o arquivo `keycloak.rb` em `config/initializers`. Este atributo pode ser encontrado e definido nesse arquivo.
56
+
57
+
44
58
  ```ruby
45
59
  Keycloak.proxy
46
60
  ```
@@ -4,3 +4,7 @@ Keycloak.proxy = ''
4
4
  Keycloak.generate_request_exception = true
5
5
  # controller that manage the user session
6
6
  Keycloak.keycloak_controller = 'session'
7
+ # relm name (only if the installation file is not present)
8
+ Keycloak.realm = ''
9
+ # relm url (only if the installation file is not present)
10
+ Keycloak.auth_server_url = ''
data/lib/keycloak.rb CHANGED
@@ -8,7 +8,8 @@ require 'uri'
8
8
  module Keycloak
9
9
  class << self
10
10
  attr_accessor :proxy, :generate_request_exception, :keycloak_controller,
11
- :proc_cookie_token, :proc_external_attributes
11
+ :proc_cookie_token, :proc_external_attributes,
12
+ :realm, :auth_server_url
12
13
  end
13
14
 
14
15
 
@@ -21,8 +22,8 @@ module Keycloak
21
22
 
22
23
  module Client
23
24
  class << self
24
- attr_reader :realm, :url, :client_id, :auth_server_url,
25
- :secret, :configuration, :public_key
25
+ attr_accessor :realm, :auth_server_url
26
+ attr_reader :client_id, :secret, :configuration, :public_key
26
27
  end
27
28
 
28
29
  KEYCLOAK_JSON_FILE = 'keycloak.json'
@@ -51,6 +52,41 @@ module Keycloak
51
52
  mount_request_token(payload)
52
53
  end
53
54
 
55
+ def self.get_token_by_exchange(issuer, issuer_token)
56
+ setup_module
57
+
58
+ payload = { 'client_id' => @client_id, 'client_secret' => @secret, 'audience' => @client_id, 'grant_type' => 'urn:ietf:params:oauth:grant-type:token-exchange', 'subject_token_type' => 'urn:ietf:params:oauth:token-type:access_token', 'subject_issuer' => issuer, 'subject_token' => issuer_token }
59
+ header = {'Content-Type' => 'application/x-www-form-urlencoded'}
60
+ _request = -> do
61
+ RestClient.post(@configuration['token_endpoint'], payload, header){|response, request, result|
62
+ # case response.code
63
+ # when 200
64
+ # response.body
65
+ # else
66
+ # response.return!
67
+ # end
68
+ response.body
69
+ }
70
+ end
71
+
72
+ exec_request _request
73
+ end
74
+
75
+ def self.get_userinfo_issuer(access_token = '')
76
+ verify_setup
77
+
78
+ access_token = self.token["access_token"] if access_token.empty?
79
+ payload = { 'access_token' => access_token }
80
+ header = { 'Content-Type' => 'application/x-www-form-urlencoded' }
81
+ _request = -> do
82
+ RestClient.post(@configuration['userinfo_endpoint'], payload, header){ |response, request, result|
83
+ response.body
84
+ }
85
+ end
86
+
87
+ exec_request _request
88
+ end
89
+
54
90
  def self.get_token_by_refresh_token(refresh_token = '')
55
91
  verify_setup
56
92
 
@@ -77,14 +113,16 @@ module Keycloak
77
113
  mount_request_token(payload)
78
114
  end
79
115
 
80
- def self.get_token_introspection(token = '')
116
+ def self.get_token_introspection(token = '', client_id = '', secret = '')
81
117
  verify_setup
82
118
 
83
119
  token = self.token["access_token"] if token.empty?
84
-
85
120
  payload = { 'token' => token }
86
121
 
87
- authorization = Base64.strict_encode64("#{@client_id}:#{@secret}")
122
+ client_id = @client_id if client_id.empty?
123
+ secret = @secret if secret.empty?
124
+
125
+ authorization = Base64.strict_encode64("#{client_id}:#{secret}")
88
126
  authorization = "Basic #{authorization}"
89
127
 
90
128
  header = {'Content-Type' => 'application/x-www-form-urlencoded',
@@ -95,7 +133,6 @@ module Keycloak
95
133
  case response.code
96
134
  when 200..399
97
135
  response.body
98
-
99
136
  else
100
137
  response.return!
101
138
  end
@@ -175,7 +212,7 @@ module Keycloak
175
212
  def self.url_user_account
176
213
  verify_setup
177
214
 
178
- "#{@url}/realms/#{@realm}/account"
215
+ "#{@auth_server_url}/realms/#{@realm}/account"
179
216
  end
180
217
 
181
218
  def self.has_role?(user_role, access_token = '')
@@ -242,14 +279,19 @@ module Keycloak
242
279
  if File.exists?(KEYCLOAK_JSON_FILE)
243
280
  installation = JSON File.read(KEYCLOAK_JSON_FILE)
244
281
  @realm = installation["realm"]
245
- @url = installation["auth-server-url"]
246
282
  @client_id = installation["resource"]
247
283
  @secret = installation["credentials"]["secret"]
248
284
  @public_key = installation["realm-public-key"]
249
285
  @auth_server_url = installation["auth-server-url"]
250
286
  openid_configuration
251
287
  else
252
- raise "#{KEYCLOAK_JSON_FILE} not found."
288
+ if Keycloak.realm.blank? || Keycloak.auth_server_url.blank?
289
+ raise "#{KEYCLOAK_JSON_FILE} and relm settings not found."
290
+ else
291
+ @realm = Keycloak.realm
292
+ @auth_server_url = Keycloak.auth_server_url
293
+ openid_configuration
294
+ end
253
295
  end
254
296
  end
255
297
 
@@ -277,7 +319,7 @@ module Keycloak
277
319
 
278
320
  def self.openid_configuration
279
321
  RestClient.proxy = Keycloak.proxy unless Keycloak.proxy.empty?
280
- config_url = "#{@url}/realms/#{@realm}/.well-known/openid-configuration"
322
+ config_url = "#{@auth_server_url}/realms/#{@realm}/.well-known/openid-configuration"
281
323
  _request = -> do
282
324
  RestClient.get config_url
283
325
  end
@@ -827,6 +869,12 @@ module Keycloak
827
869
  else
828
870
  response.body
829
871
  end
872
+ when 400..499
873
+ begin
874
+ response.return!
875
+ rescue RestClient::ExceptionWithResponse => err
876
+ raise ActionController::RoutingError.new(err.response)
877
+ end
830
878
  else
831
879
  if Keycloak.explode_exception
832
880
  response.return!
@@ -1,3 +1,3 @@
1
1
  module Keycloak
2
- VERSION = "2.2.9"
2
+ VERSION = "2.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keycloak
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.9
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guilherme Portugues
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-19 00:00:00.000000000 Z
11
+ date: 2018-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -104,6 +104,7 @@ files:
104
104
  - ".gitignore"
105
105
  - ".rspec"
106
106
  - ".travis.yml"
107
+ - ".vscode/launch.json"
107
108
  - CODE_OF_CONDUCT.md
108
109
  - Gemfile
109
110
  - LICENSE.txt
@@ -138,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
139
  version: '0'
139
140
  requirements: []
140
141
  rubyforge_project:
141
- rubygems_version: 2.6.8
142
+ rubygems_version: 2.7.3
142
143
  signing_key:
143
144
  specification_version: 4
144
145
  summary: Add authentication to applications and secure services with Keycloak