keycloak 2.2.9 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
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