omniauth-auth0 2.1.0 → 2.2.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 +4 -4
- data/.circleci/config.yml +49 -0
- data/.gitignore +1 -2
- data/CHANGELOG.md +14 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +167 -0
- data/README.md +4 -3
- data/codecov.yml +22 -0
- data/lib/omniauth-auth0.rb +1 -1
- data/lib/omniauth-auth0/version.rb +1 -1
- data/lib/omniauth/auth0/jwt_validator.rb +18 -6
- data/lib/omniauth/auth0/telemetry.rb +36 -0
- data/lib/omniauth/strategies/auth0.rb +13 -13
- data/spec/omniauth/auth0/jwt_validator_spec.rb +39 -10
- data/spec/omniauth/auth0/telemetry_spec.rb +28 -0
- data/spec/omniauth/strategies/auth0_spec.rb +6 -0
- data/spec/spec_helper.rb +6 -4
- metadata +9 -5
- data/.travis.yml +0 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 463fae0687e0473a0918c9c2086f3b47a60ae1448fffa3b1157ec933784c1a1c
|
|
4
|
+
data.tar.gz: d872be3b458dadf3752d58192059d6d350a90f7047de1e84b98137417880204d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 13efc37572c71bdd5184dd9888e48f2479e5e5d52c16f454c01c88834fc2f5dffa3488b13b8b0dc9bbe423d9aa750038c12693f85e83f3375482af8857788585
|
|
7
|
+
data.tar.gz: 2240535e4f749e7ba47f587ca56ae9e1d5ee596e54391a969a5f282b852ab8f3a2970c99514014fada2d5a00b259144849e6e2db1ae559a8ab584753e4e7bce9
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
version: 2.1
|
|
2
|
+
jobs:
|
|
3
|
+
run-tests:
|
|
4
|
+
docker:
|
|
5
|
+
- image: circleci/ruby:2.4.6-jessie
|
|
6
|
+
steps:
|
|
7
|
+
- checkout
|
|
8
|
+
- restore_cache:
|
|
9
|
+
keys:
|
|
10
|
+
- gems-v2-{{ checksum "Gemfile.lock" }}
|
|
11
|
+
- gems-v2-
|
|
12
|
+
- run: bundle check || bundle install
|
|
13
|
+
- persist_to_workspace:
|
|
14
|
+
root: .
|
|
15
|
+
paths:
|
|
16
|
+
- Gemfile
|
|
17
|
+
- Gemfile.lock
|
|
18
|
+
- save_cache:
|
|
19
|
+
key: gems-v2--{{ checksum "Gemfile.lock" }}
|
|
20
|
+
paths:
|
|
21
|
+
- vendor/bundle
|
|
22
|
+
- run: bundle exec rake spec
|
|
23
|
+
snyk:
|
|
24
|
+
docker:
|
|
25
|
+
- image: snyk/snyk-cli:rubygems
|
|
26
|
+
steps:
|
|
27
|
+
- attach_workspace:
|
|
28
|
+
at: .
|
|
29
|
+
- run: snyk test
|
|
30
|
+
- run:
|
|
31
|
+
command: |
|
|
32
|
+
if [[ "${CIRCLE_BRANCH}" == "master" ]]
|
|
33
|
+
then
|
|
34
|
+
snyk monitor --org=auth0-sdks
|
|
35
|
+
fi
|
|
36
|
+
when: always
|
|
37
|
+
|
|
38
|
+
workflows:
|
|
39
|
+
tests:
|
|
40
|
+
jobs:
|
|
41
|
+
- run-tests
|
|
42
|
+
snyk:
|
|
43
|
+
jobs:
|
|
44
|
+
- run-tests
|
|
45
|
+
- snyk:
|
|
46
|
+
# Must define SNYK_TOKEN env
|
|
47
|
+
context: snyk-env
|
|
48
|
+
requires:
|
|
49
|
+
- run-tests
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## [v2.2.0](https://github.com/auth0/omniauth-auth0/tree/v2.2.0) (2018-04-18)
|
|
4
|
+
[Full Changelog](https://github.com/auth0/omniauth-auth0/compare/v2.1.0...v2.2.0)
|
|
5
|
+
|
|
6
|
+
**Closed issues**
|
|
7
|
+
- It supports custom domain? [\#71](https://github.com/auth0/omniauth-auth0/issues/71)
|
|
8
|
+
- Valid Login, No Details: email=nil image=nil name="github|38257089" nickname=nil [\#70](https://github.com/auth0/omniauth-auth0/issues/70)
|
|
9
|
+
|
|
10
|
+
**Added**
|
|
11
|
+
- Custom issuer [\#77](https://github.com/auth0/omniauth-auth0/pull/77) ([ryan-rosenfeld](https://github.com/ryan-rosenfeld))
|
|
12
|
+
- Add telemetry to token endpoint [\#74](https://github.com/auth0/omniauth-auth0/pull/74) ([joshcanhelp](https://github.com/joshcanhelp))
|
|
13
|
+
|
|
14
|
+
**Changed**
|
|
15
|
+
- Remove telemetry from authorize URL [\#75](https://github.com/auth0/omniauth-auth0/pull/75) ([joshcanhelp](https://github.com/joshcanhelp))
|
|
16
|
+
|
|
3
17
|
## [v2.1.0](https://github.com/auth0/omniauth-auth0/tree/v2.1.0) (2018-10-30)
|
|
4
18
|
[Full Changelog](https://github.com/auth0/omniauth-auth0/compare/v2.0.0...v2.1.0)
|
|
5
19
|
|
data/Gemfile
CHANGED
|
@@ -9,10 +9,10 @@ gem 'rake'
|
|
|
9
9
|
group :development do
|
|
10
10
|
gem 'dotenv'
|
|
11
11
|
gem 'pry'
|
|
12
|
+
gem 'rubocop', require: false
|
|
12
13
|
gem 'shotgun'
|
|
13
14
|
gem 'sinatra'
|
|
14
15
|
gem 'thin'
|
|
15
|
-
gem 'rubocop', require: false
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
group :test do
|
|
@@ -20,6 +20,7 @@ group :test do
|
|
|
20
20
|
gem 'listen', '~> 3.1.5'
|
|
21
21
|
gem 'rack-test'
|
|
22
22
|
gem 'rspec', '~> 3.5'
|
|
23
|
+
gem 'codecov', require: false
|
|
23
24
|
gem 'simplecov'
|
|
24
25
|
gem 'webmock'
|
|
25
26
|
end
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
omniauth-auth0 (2.2.0)
|
|
5
|
+
omniauth-oauth2 (~> 1.5)
|
|
6
|
+
|
|
7
|
+
GEM
|
|
8
|
+
remote: https://rubygems.org/
|
|
9
|
+
specs:
|
|
10
|
+
addressable (2.6.0)
|
|
11
|
+
public_suffix (>= 2.0.2, < 4.0)
|
|
12
|
+
ast (2.4.0)
|
|
13
|
+
codecov (0.1.14)
|
|
14
|
+
json
|
|
15
|
+
simplecov
|
|
16
|
+
url
|
|
17
|
+
coderay (1.1.2)
|
|
18
|
+
crack (0.4.3)
|
|
19
|
+
safe_yaml (~> 1.0.0)
|
|
20
|
+
daemons (1.3.1)
|
|
21
|
+
diff-lcs (1.3)
|
|
22
|
+
docile (1.3.1)
|
|
23
|
+
dotenv (2.7.2)
|
|
24
|
+
eventmachine (1.2.7)
|
|
25
|
+
faraday (0.15.4)
|
|
26
|
+
multipart-post (>= 1.2, < 3)
|
|
27
|
+
ffi (1.10.0)
|
|
28
|
+
formatador (0.2.5)
|
|
29
|
+
gem-release (2.0.1)
|
|
30
|
+
guard (2.15.0)
|
|
31
|
+
formatador (>= 0.2.4)
|
|
32
|
+
listen (>= 2.7, < 4.0)
|
|
33
|
+
lumberjack (>= 1.0.12, < 2.0)
|
|
34
|
+
nenv (~> 0.1)
|
|
35
|
+
notiffany (~> 0.0)
|
|
36
|
+
pry (>= 0.9.12)
|
|
37
|
+
shellany (~> 0.0)
|
|
38
|
+
thor (>= 0.18.1)
|
|
39
|
+
guard-compat (1.2.1)
|
|
40
|
+
guard-rspec (4.7.3)
|
|
41
|
+
guard (~> 2.1)
|
|
42
|
+
guard-compat (~> 1.1)
|
|
43
|
+
rspec (>= 2.99.0, < 4.0)
|
|
44
|
+
hashdiff (0.3.8)
|
|
45
|
+
hashie (3.6.0)
|
|
46
|
+
jaro_winkler (1.5.2)
|
|
47
|
+
json (2.2.0)
|
|
48
|
+
jwt (2.1.0)
|
|
49
|
+
listen (3.1.5)
|
|
50
|
+
rb-fsevent (~> 0.9, >= 0.9.4)
|
|
51
|
+
rb-inotify (~> 0.9, >= 0.9.7)
|
|
52
|
+
ruby_dep (~> 1.2)
|
|
53
|
+
lumberjack (1.0.13)
|
|
54
|
+
method_source (0.9.2)
|
|
55
|
+
multi_json (1.13.1)
|
|
56
|
+
multi_xml (0.6.0)
|
|
57
|
+
multipart-post (2.0.0)
|
|
58
|
+
mustermann (1.0.3)
|
|
59
|
+
nenv (0.3.0)
|
|
60
|
+
notiffany (0.1.1)
|
|
61
|
+
nenv (~> 0.1)
|
|
62
|
+
shellany (~> 0.0)
|
|
63
|
+
oauth2 (1.4.1)
|
|
64
|
+
faraday (>= 0.8, < 0.16.0)
|
|
65
|
+
jwt (>= 1.0, < 3.0)
|
|
66
|
+
multi_json (~> 1.3)
|
|
67
|
+
multi_xml (~> 0.5)
|
|
68
|
+
rack (>= 1.2, < 3)
|
|
69
|
+
omniauth (1.9.0)
|
|
70
|
+
hashie (>= 3.4.6, < 3.7.0)
|
|
71
|
+
rack (>= 1.6.2, < 3)
|
|
72
|
+
omniauth-oauth2 (1.6.0)
|
|
73
|
+
oauth2 (~> 1.1)
|
|
74
|
+
omniauth (~> 1.9)
|
|
75
|
+
parallel (1.17.0)
|
|
76
|
+
parser (2.6.2.1)
|
|
77
|
+
ast (~> 2.4.0)
|
|
78
|
+
pry (0.12.2)
|
|
79
|
+
coderay (~> 1.1.0)
|
|
80
|
+
method_source (~> 0.9.0)
|
|
81
|
+
psych (3.1.0)
|
|
82
|
+
public_suffix (3.0.3)
|
|
83
|
+
rack (2.0.7)
|
|
84
|
+
rack-protection (2.0.5)
|
|
85
|
+
rack
|
|
86
|
+
rack-test (1.1.0)
|
|
87
|
+
rack (>= 1.0, < 3)
|
|
88
|
+
rainbow (3.0.0)
|
|
89
|
+
rake (12.3.2)
|
|
90
|
+
rb-fsevent (0.10.3)
|
|
91
|
+
rb-inotify (0.10.0)
|
|
92
|
+
ffi (~> 1.0)
|
|
93
|
+
rspec (3.8.0)
|
|
94
|
+
rspec-core (~> 3.8.0)
|
|
95
|
+
rspec-expectations (~> 3.8.0)
|
|
96
|
+
rspec-mocks (~> 3.8.0)
|
|
97
|
+
rspec-core (3.8.0)
|
|
98
|
+
rspec-support (~> 3.8.0)
|
|
99
|
+
rspec-expectations (3.8.2)
|
|
100
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
101
|
+
rspec-support (~> 3.8.0)
|
|
102
|
+
rspec-mocks (3.8.0)
|
|
103
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
104
|
+
rspec-support (~> 3.8.0)
|
|
105
|
+
rspec-support (3.8.0)
|
|
106
|
+
rubocop (0.67.2)
|
|
107
|
+
jaro_winkler (~> 1.5.1)
|
|
108
|
+
parallel (~> 1.10)
|
|
109
|
+
parser (>= 2.5, != 2.5.1.1)
|
|
110
|
+
psych (>= 3.1.0)
|
|
111
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
112
|
+
ruby-progressbar (~> 1.7)
|
|
113
|
+
unicode-display_width (>= 1.4.0, < 1.6)
|
|
114
|
+
ruby-progressbar (1.10.0)
|
|
115
|
+
ruby_dep (1.5.0)
|
|
116
|
+
safe_yaml (1.0.5)
|
|
117
|
+
shellany (0.0.1)
|
|
118
|
+
shotgun (0.9.2)
|
|
119
|
+
rack (>= 1.0)
|
|
120
|
+
simplecov (0.16.1)
|
|
121
|
+
docile (~> 1.1)
|
|
122
|
+
json (>= 1.8, < 3)
|
|
123
|
+
simplecov-html (~> 0.10.0)
|
|
124
|
+
simplecov-html (0.10.2)
|
|
125
|
+
sinatra (2.0.5)
|
|
126
|
+
mustermann (~> 1.0)
|
|
127
|
+
rack (~> 2.0)
|
|
128
|
+
rack-protection (= 2.0.5)
|
|
129
|
+
tilt (~> 2.0)
|
|
130
|
+
thin (1.7.2)
|
|
131
|
+
daemons (~> 1.0, >= 1.0.9)
|
|
132
|
+
eventmachine (~> 1.0, >= 1.0.4)
|
|
133
|
+
rack (>= 1, < 3)
|
|
134
|
+
thor (0.20.3)
|
|
135
|
+
tilt (2.0.9)
|
|
136
|
+
unicode-display_width (1.5.0)
|
|
137
|
+
url (0.3.2)
|
|
138
|
+
webmock (3.5.1)
|
|
139
|
+
addressable (>= 2.3.6)
|
|
140
|
+
crack (>= 0.3.2)
|
|
141
|
+
hashdiff
|
|
142
|
+
|
|
143
|
+
PLATFORMS
|
|
144
|
+
ruby
|
|
145
|
+
|
|
146
|
+
DEPENDENCIES
|
|
147
|
+
bundler (~> 1.9)
|
|
148
|
+
codecov
|
|
149
|
+
dotenv
|
|
150
|
+
gem-release
|
|
151
|
+
guard-rspec
|
|
152
|
+
jwt
|
|
153
|
+
listen (~> 3.1.5)
|
|
154
|
+
omniauth-auth0!
|
|
155
|
+
pry
|
|
156
|
+
rack-test
|
|
157
|
+
rake
|
|
158
|
+
rspec (~> 3.5)
|
|
159
|
+
rubocop
|
|
160
|
+
shotgun
|
|
161
|
+
simplecov
|
|
162
|
+
sinatra
|
|
163
|
+
thin
|
|
164
|
+
webmock
|
|
165
|
+
|
|
166
|
+
BUNDLED WITH
|
|
167
|
+
1.17.3
|
data/README.md
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
An [OmniAuth](https://github.com/intridea/omniauth) strategy for authenticating with [Auth0](https://auth0.com). This strategy is based on the [OmniAuth OAuth2](https://github.com/omniauth/omniauth-oauth2) strategy.
|
|
4
4
|
|
|
5
|
-
[](https://circleci.com/gh/auth0/omniauth-auth0)
|
|
6
|
+
[](https://codecov.io/gh/auth0/omniauth-auth0)
|
|
7
|
+
[](https://badge.fury.io/rb/omniauth-auth0)
|
|
8
|
+
[](https://github.com/auth0/omniauth-auth0/blob/master/LICENSE)
|
|
8
9
|
|
|
9
10
|
## Table of Contents
|
|
10
11
|
|
data/codecov.yml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
coverage:
|
|
2
|
+
precision: 2
|
|
3
|
+
round: down
|
|
4
|
+
range: "60...100"
|
|
5
|
+
status:
|
|
6
|
+
project:
|
|
7
|
+
default:
|
|
8
|
+
enabled: true
|
|
9
|
+
target: auto
|
|
10
|
+
threshold: 5%
|
|
11
|
+
if_no_uploads: error
|
|
12
|
+
patch:
|
|
13
|
+
default:
|
|
14
|
+
enabled: true
|
|
15
|
+
target: 80%
|
|
16
|
+
threshold: 30%
|
|
17
|
+
if_no_uploads: error
|
|
18
|
+
changes:
|
|
19
|
+
default:
|
|
20
|
+
enabled: true
|
|
21
|
+
if_no_uploads: error
|
|
22
|
+
comment: false
|
data/lib/omniauth-auth0.rb
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require 'omniauth-auth0/version'
|
|
1
|
+
require 'omniauth-auth0/version'
|
|
2
2
|
require 'omniauth/strategies/auth0'
|
|
@@ -7,17 +7,20 @@ module OmniAuth
|
|
|
7
7
|
module Auth0
|
|
8
8
|
# JWT Validator class
|
|
9
9
|
class JWTValidator
|
|
10
|
-
attr_accessor :issuer
|
|
10
|
+
attr_accessor :issuer, :domain
|
|
11
11
|
|
|
12
12
|
# Initializer
|
|
13
13
|
# @param options object
|
|
14
14
|
# options.domain - Application domain.
|
|
15
|
+
# options.issuer - Application issuer (optional).
|
|
15
16
|
# options.client_id - Application Client ID.
|
|
16
17
|
# options.client_secret - Application Client Secret.
|
|
17
18
|
def initialize(options)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
@domain = uri_string(options.domain)
|
|
20
|
+
|
|
21
|
+
# Use custom issuer if provided, otherwise use domain
|
|
22
|
+
@issuer = @domain
|
|
23
|
+
@issuer = uri_string(options.issuer) if options.respond_to?(:issuer)
|
|
21
24
|
|
|
22
25
|
@client_id = options.client_id
|
|
23
26
|
@client_secret = options.client_secret
|
|
@@ -97,10 +100,10 @@ module OmniAuth
|
|
|
97
100
|
jwks_public_cert(jwks_x5c.first)
|
|
98
101
|
end
|
|
99
102
|
|
|
100
|
-
# Get a JWKS from the
|
|
103
|
+
# Get a JWKS from the domain
|
|
101
104
|
# @return void
|
|
102
105
|
def jwks
|
|
103
|
-
jwks_uri = URI(@
|
|
106
|
+
jwks_uri = URI(@domain + '.well-known/jwks.json')
|
|
104
107
|
@jwks ||= json_parse(Net::HTTP.get(jwks_uri))
|
|
105
108
|
end
|
|
106
109
|
|
|
@@ -117,6 +120,15 @@ module OmniAuth
|
|
|
117
120
|
def json_parse(json)
|
|
118
121
|
JSON.parse(json, symbolize_names: true)
|
|
119
122
|
end
|
|
123
|
+
|
|
124
|
+
# Parse a URI into the desired string format
|
|
125
|
+
# @param uri - the URI to parse
|
|
126
|
+
# @return string
|
|
127
|
+
def uri_string(uri)
|
|
128
|
+
temp_domain = URI(uri)
|
|
129
|
+
temp_domain = URI("https://#{uri}") unless temp_domain.scheme
|
|
130
|
+
"#{temp_domain}/"
|
|
131
|
+
end
|
|
120
132
|
end
|
|
121
133
|
end
|
|
122
134
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
module OmniAuth
|
|
4
|
+
module Auth0
|
|
5
|
+
# Module to provide necessary telemetry for API requests.
|
|
6
|
+
module Telemetry
|
|
7
|
+
|
|
8
|
+
# Return a telemetry hash to be encoded and sent to Auth0.
|
|
9
|
+
# @return hash
|
|
10
|
+
def telemetry
|
|
11
|
+
telemetry = {
|
|
12
|
+
name: 'omniauth-auth0',
|
|
13
|
+
version: OmniAuth::Auth0::VERSION,
|
|
14
|
+
env: {
|
|
15
|
+
ruby: RUBY_VERSION
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
add_rails_version telemetry
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# JSON-ify and base64 encode the current telemetry.
|
|
22
|
+
# @return string
|
|
23
|
+
def telemetry_encoded
|
|
24
|
+
Base64.urlsafe_encode64(JSON.dump(telemetry))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def add_rails_version(telemetry)
|
|
30
|
+
return telemetry unless Gem.loaded_specs['rails'].respond_to? :version
|
|
31
|
+
telemetry[:env][:rails] = Gem.loaded_specs['rails'].version.to_s
|
|
32
|
+
telemetry
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'base64'
|
|
2
4
|
require 'uri'
|
|
3
5
|
require 'omniauth-oauth2'
|
|
4
6
|
require 'omniauth/auth0/jwt_validator'
|
|
7
|
+
require 'omniauth/auth0/telemetry'
|
|
5
8
|
|
|
6
9
|
module OmniAuth
|
|
7
10
|
module Strategies
|
|
8
11
|
# Auth0 OmniAuth strategy
|
|
9
12
|
class Auth0 < OmniAuth::Strategies::OAuth2
|
|
13
|
+
include OmniAuth::Auth0::Telemetry
|
|
14
|
+
|
|
10
15
|
option :name, 'auth0'
|
|
11
16
|
|
|
12
17
|
args %i[
|
|
@@ -72,13 +77,17 @@ module OmniAuth
|
|
|
72
77
|
# Define the parameters used for the /authorize endpoint
|
|
73
78
|
def authorize_params
|
|
74
79
|
params = super
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
params['
|
|
78
|
-
params['prompt'] = parse_query['prompt']
|
|
80
|
+
parsed_query = Rack::Utils.parse_query(request.query_string)
|
|
81
|
+
params['connection'] = parsed_query['connection']
|
|
82
|
+
params['prompt'] = parsed_query['prompt']
|
|
79
83
|
params
|
|
80
84
|
end
|
|
81
85
|
|
|
86
|
+
def build_access_token
|
|
87
|
+
options.token_params[:headers] = { 'Auth0-Client' => telemetry_encoded }
|
|
88
|
+
super
|
|
89
|
+
end
|
|
90
|
+
|
|
82
91
|
# Declarative override for the request phase of authentication
|
|
83
92
|
def request_phase
|
|
84
93
|
if no_client_id?
|
|
@@ -125,15 +134,6 @@ module OmniAuth
|
|
|
125
134
|
domain_url = URI("https://#{domain_url}") if domain_url.scheme.nil?
|
|
126
135
|
domain_url.to_s
|
|
127
136
|
end
|
|
128
|
-
|
|
129
|
-
# Build the auth0Client URL parameter for metrics.
|
|
130
|
-
def client_info
|
|
131
|
-
client_info = JSON.dump(
|
|
132
|
-
name: 'omniauth-auth0',
|
|
133
|
-
version: OmniAuth::Auth0::VERSION
|
|
134
|
-
)
|
|
135
|
-
Base64.urlsafe_encode64(client_info)
|
|
136
|
-
end
|
|
137
137
|
end
|
|
138
138
|
end
|
|
139
139
|
end
|
|
@@ -35,8 +35,6 @@ describe OmniAuth::Auth0::JWTValidator do
|
|
|
35
35
|
JSON.parse(jwks_file, symbolize_names: true)
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
Options = Struct.new(:domain, :client_id, :client_secret)
|
|
39
|
-
|
|
40
38
|
#
|
|
41
39
|
# Specs
|
|
42
40
|
#
|
|
@@ -119,6 +117,36 @@ describe OmniAuth::Auth0::JWTValidator do
|
|
|
119
117
|
end
|
|
120
118
|
end
|
|
121
119
|
|
|
120
|
+
describe 'JWT verifier custom issuer' do
|
|
121
|
+
context 'same as domain' do
|
|
122
|
+
let(:jwt_validator) do
|
|
123
|
+
make_jwt_validator(opt_issuer: domain)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it 'should have the correct issuer' do
|
|
127
|
+
expect(jwt_validator.issuer).to eq('https://samples.auth0.com/')
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it 'should have the correct domain' do
|
|
131
|
+
expect(jwt_validator.issuer).to eq('https://samples.auth0.com/')
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
context 'different from domain' do
|
|
136
|
+
let(:jwt_validator) do
|
|
137
|
+
make_jwt_validator(opt_issuer: 'different.auth0.com')
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it 'should have the correct issuer' do
|
|
141
|
+
expect(jwt_validator.issuer).to eq('https://different.auth0.com/')
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it 'should have the correct domain' do
|
|
145
|
+
expect(jwt_validator.domain).to eq('https://samples.auth0.com/')
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
122
150
|
describe 'JWT verifier decode' do
|
|
123
151
|
let(:jwt_validator) do
|
|
124
152
|
make_jwt_validator
|
|
@@ -225,21 +253,22 @@ describe OmniAuth::Auth0::JWTValidator do
|
|
|
225
253
|
kid: jwks_kid
|
|
226
254
|
}
|
|
227
255
|
token = make_rs256_token(payload)
|
|
228
|
-
decoded_token = make_jwt_validator(domain).decode(token)
|
|
256
|
+
decoded_token = make_jwt_validator(opt_domain: domain).decode(token)
|
|
229
257
|
expect(decoded_token.first['sub']).to eq(sub)
|
|
230
258
|
end
|
|
231
259
|
end
|
|
232
260
|
|
|
233
261
|
private
|
|
234
262
|
|
|
235
|
-
def make_jwt_validator(opt_domain
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
client_secret
|
|
241
|
-
)
|
|
263
|
+
def make_jwt_validator(opt_domain: domain, opt_issuer: nil)
|
|
264
|
+
opts = OpenStruct.new(
|
|
265
|
+
domain: opt_domain,
|
|
266
|
+
client_id: client_id,
|
|
267
|
+
client_secret: client_secret
|
|
242
268
|
)
|
|
269
|
+
opts[:issuer] = opt_issuer unless opt_issuer.nil?
|
|
270
|
+
|
|
271
|
+
OmniAuth::Auth0::JWTValidator.new(opts)
|
|
243
272
|
end
|
|
244
273
|
|
|
245
274
|
def make_hs256_token(payload = nil)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'json'
|
|
3
|
+
|
|
4
|
+
describe OmniAuth::Auth0::Telemetry do
|
|
5
|
+
|
|
6
|
+
let(:test_class) { Class.new.extend(OmniAuth::Auth0::Telemetry) }
|
|
7
|
+
|
|
8
|
+
describe 'telemetry' do
|
|
9
|
+
|
|
10
|
+
it 'should have the correct SDK name' do
|
|
11
|
+
expect(test_class.telemetry).to have_key(:name)
|
|
12
|
+
expect(test_class.telemetry[:name]).to eq('omniauth-auth0')
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'should have the correct SDK version' do
|
|
16
|
+
expect(test_class.telemetry).to have_key(:version)
|
|
17
|
+
expect(test_class.telemetry[:version]).to eq(OmniAuth::Auth0::VERSION)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'should include the Ruby version' do
|
|
21
|
+
expect(test_class.telemetry).to have_key(:env)
|
|
22
|
+
expect(test_class.telemetry[:env]).to have_key(:ruby)
|
|
23
|
+
expect(test_class.telemetry[:env][:ruby]).to eq(RUBY_VERSION)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'spec_helper'
|
|
2
4
|
require 'jwt'
|
|
3
5
|
|
|
@@ -79,6 +81,7 @@ describe OmniAuth::Strategies::Auth0 do
|
|
|
79
81
|
expect(redirect_url).to have_query('state')
|
|
80
82
|
expect(redirect_url).to have_query('client_id')
|
|
81
83
|
expect(redirect_url).to have_query('redirect_uri')
|
|
84
|
+
expect(redirect_url).not_to have_query('auth0Client')
|
|
82
85
|
end
|
|
83
86
|
|
|
84
87
|
it 'redirects to hosted login page' do
|
|
@@ -91,6 +94,7 @@ describe OmniAuth::Strategies::Auth0 do
|
|
|
91
94
|
expect(redirect_url).to have_query('client_id')
|
|
92
95
|
expect(redirect_url).to have_query('redirect_uri')
|
|
93
96
|
expect(redirect_url).to have_query('connection', 'abcd')
|
|
97
|
+
expect(redirect_url).not_to have_query('auth0Client')
|
|
94
98
|
end
|
|
95
99
|
|
|
96
100
|
describe 'callback' do
|
|
@@ -98,6 +102,7 @@ describe OmniAuth::Strategies::Auth0 do
|
|
|
98
102
|
let(:expires_in) { 2000 }
|
|
99
103
|
let(:token_type) { 'bearer' }
|
|
100
104
|
let(:refresh_token) { 'refresh token' }
|
|
105
|
+
let(:telemetry_value) { Class.new.extend(OmniAuth::Auth0::Telemetry).telemetry_encoded }
|
|
101
106
|
|
|
102
107
|
let(:user_id) { 'user identifier' }
|
|
103
108
|
let(:state) { SecureRandom.hex(8) }
|
|
@@ -147,6 +152,7 @@ describe OmniAuth::Strategies::Auth0 do
|
|
|
147
152
|
|
|
148
153
|
def stub_auth(body)
|
|
149
154
|
stub_request(:post, 'https://samples.auth0.com/oauth/token')
|
|
155
|
+
.with(headers: { 'Auth0-Client' => telemetry_value })
|
|
150
156
|
.to_return(
|
|
151
157
|
headers: { 'Content-Type' => 'application/json' },
|
|
152
158
|
body: MultiJson.encode(body)
|
data/spec/spec_helper.rb
CHANGED
|
@@ -2,11 +2,13 @@ $LOAD_PATH.unshift File.expand_path(__dir__)
|
|
|
2
2
|
$LOAD_PATH.unshift File.expand_path('../lib', __dir__)
|
|
3
3
|
|
|
4
4
|
require 'simplecov'
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
SimpleCov.start
|
|
6
|
+
|
|
7
|
+
if ENV['CI'] == 'true'
|
|
8
|
+
require 'codecov'
|
|
9
|
+
SimpleCov.formatter = SimpleCov::Formatter::Codecov
|
|
9
10
|
end
|
|
11
|
+
|
|
10
12
|
require 'rspec'
|
|
11
13
|
require 'rack/test'
|
|
12
14
|
require 'webmock/rspec'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: omniauth-auth0
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Auth0
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2019-04-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: omniauth-oauth2
|
|
@@ -50,29 +50,33 @@ executables: []
|
|
|
50
50
|
extensions: []
|
|
51
51
|
extra_rdoc_files: []
|
|
52
52
|
files:
|
|
53
|
+
- ".circleci/config.yml"
|
|
53
54
|
- ".gemrelease"
|
|
54
55
|
- ".github/ISSUE_TEMPLATE.md"
|
|
55
56
|
- ".github/PULL_REQUEST_TEMPLATE.md"
|
|
56
57
|
- ".gitignore"
|
|
57
58
|
- ".rspec"
|
|
58
59
|
- ".rubocop.yml"
|
|
59
|
-
- ".travis.yml"
|
|
60
60
|
- CHANGELOG.md
|
|
61
61
|
- CODE_OF_CONDUCT.md
|
|
62
62
|
- CONTRIBUTING.md
|
|
63
63
|
- Gemfile
|
|
64
|
+
- Gemfile.lock
|
|
64
65
|
- Guardfile
|
|
65
66
|
- LICENSE
|
|
66
67
|
- README.md
|
|
67
68
|
- Rakefile
|
|
69
|
+
- codecov.yml
|
|
68
70
|
- examples/sinatra/app.rb
|
|
69
71
|
- examples/sinatra/config.ru
|
|
70
72
|
- lib/omniauth-auth0.rb
|
|
71
73
|
- lib/omniauth-auth0/version.rb
|
|
72
74
|
- lib/omniauth/auth0/jwt_validator.rb
|
|
75
|
+
- lib/omniauth/auth0/telemetry.rb
|
|
73
76
|
- lib/omniauth/strategies/auth0.rb
|
|
74
77
|
- omniauth-auth0.gemspec
|
|
75
78
|
- spec/omniauth/auth0/jwt_validator_spec.rb
|
|
79
|
+
- spec/omniauth/auth0/telemetry_spec.rb
|
|
76
80
|
- spec/omniauth/strategies/auth0_spec.rb
|
|
77
81
|
- spec/resources/jwks.json
|
|
78
82
|
- spec/spec_helper.rb
|
|
@@ -95,13 +99,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
95
99
|
- !ruby/object:Gem::Version
|
|
96
100
|
version: '0'
|
|
97
101
|
requirements: []
|
|
98
|
-
|
|
99
|
-
rubygems_version: 2.7.7
|
|
102
|
+
rubygems_version: 3.0.3
|
|
100
103
|
signing_key:
|
|
101
104
|
specification_version: 4
|
|
102
105
|
summary: OmniAuth OAuth2 strategy for the Auth0 platform.
|
|
103
106
|
test_files:
|
|
104
107
|
- spec/omniauth/auth0/jwt_validator_spec.rb
|
|
108
|
+
- spec/omniauth/auth0/telemetry_spec.rb
|
|
105
109
|
- spec/omniauth/strategies/auth0_spec.rb
|
|
106
110
|
- spec/resources/jwks.json
|
|
107
111
|
- spec/spec_helper.rb
|