googleauth 0.16.2 → 0.17.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/.repo-metadata.json +3 -3
- data/CHANGELOG.md +7 -0
- data/SECURITY.md +7 -0
- data/lib/googleauth/service_account.rb +16 -12
- data/lib/googleauth/version.rb +1 -1
- data/spec/googleauth/service_account_spec.rb +24 -10
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5101c77470407b3d53ea18a41ecc2472c3e6b7d86c8a7ce21cc604ed346e030c
|
4
|
+
data.tar.gz: b33a1ca384b5178aaf0438a0ac87776bc598326dd221804e4562c5f7b2076e97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c33deaf116dc8ba017b73525ba5dc4029511530d3e34d03584ad32023689d9b4837b5136344ec66486157651a55693fd16b23e770573912fff0094d33031fd7
|
7
|
+
data.tar.gz: 8adfa4263bbcecd04770de3647dae120beb585c140315dd6392d16cbdcb523d438f35cd5a7f0be74a6b824448ff201c8a654a96b774c902ea9cfbdf1c1d9dc94
|
data/.repo-metadata.json
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Release History
|
2
2
|
|
3
|
+
## [0.17.0](https://www.github.com/googleapis/google-auth-library-ruby/compare/google-auth-library-ruby/v0.16.2...google-auth-library-ruby/v0.17.0) (2021-07-30)
|
4
|
+
|
5
|
+
|
6
|
+
### Features
|
7
|
+
|
8
|
+
* Allow scopes to be self-signed into jwts ([e67ce40](https://www.github.com/googleapis/google-auth-library-ruby/commit/e67ce40f919b7eb3723c2ec95f5b8d58315ab1ee))
|
9
|
+
|
3
10
|
### [0.16.2](https://www.github.com/googleapis/google-auth-library-ruby/compare/google-auth-library-ruby/v0.16.1...google-auth-library-ruby/v0.16.2) (2021-04-28)
|
4
11
|
|
5
12
|
|
data/SECURITY.md
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
# Security Policy
|
2
|
+
|
3
|
+
To report a security issue, please use [g.co/vulnz](https://g.co/vulnz).
|
4
|
+
|
5
|
+
The Google Security Team will respond within 5 working days of your report on g.co/vulnz.
|
6
|
+
|
7
|
+
We use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.
|
@@ -129,7 +129,7 @@ module Google
|
|
129
129
|
quota_project_id: @quota_project_id
|
130
130
|
}
|
131
131
|
key_io = StringIO.new MultiJson.dump(cred_json)
|
132
|
-
alt = ServiceAccountJwtHeaderCredentials.make_creds json_key_io: key_io
|
132
|
+
alt = ServiceAccountJwtHeaderCredentials.make_creds json_key_io: key_io, scope: scope
|
133
133
|
alt.apply! a_hash
|
134
134
|
end
|
135
135
|
end
|
@@ -154,15 +154,13 @@ module Google
|
|
154
154
|
attr_reader :project_id
|
155
155
|
attr_reader :quota_project_id
|
156
156
|
|
157
|
-
#
|
157
|
+
# Create a ServiceAccountJwtHeaderCredentials.
|
158
158
|
#
|
159
|
-
#
|
160
|
-
#
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
def self.make_creds *args
|
165
|
-
new json_key_io: args[0][:json_key_io]
|
159
|
+
# @param json_key_io [IO] an IO from which the JSON key can be read
|
160
|
+
# @param scope [string|array|nil] the scope(s) to access
|
161
|
+
def self.make_creds options = {}
|
162
|
+
json_key_io, scope = options.values_at :json_key_io, :scope
|
163
|
+
new json_key_io: json_key_io, scope: scope
|
166
164
|
end
|
167
165
|
|
168
166
|
# Initializes a ServiceAccountJwtHeaderCredentials.
|
@@ -181,6 +179,7 @@ module Google
|
|
181
179
|
end
|
182
180
|
@project_id ||= CredentialsLoader.load_gcloud_project_id
|
183
181
|
@signing_key = OpenSSL::PKey::RSA.new @private_key
|
182
|
+
@scope = options[:scope]
|
184
183
|
end
|
185
184
|
|
186
185
|
# Construct a jwt token if the JWT_AUD_URI key is present in the input
|
@@ -189,7 +188,7 @@ module Google
|
|
189
188
|
# The jwt token is used as the value of a 'Bearer '.
|
190
189
|
def apply! a_hash, opts = {}
|
191
190
|
jwt_aud_uri = a_hash.delete JWT_AUD_URI_KEY
|
192
|
-
return a_hash if jwt_aud_uri.nil?
|
191
|
+
return a_hash if jwt_aud_uri.nil? && @scope.nil?
|
193
192
|
jwt_token = new_jwt_token jwt_aud_uri, opts
|
194
193
|
a_hash[AUTH_METADATA_KEY] = "Bearer #{jwt_token}"
|
195
194
|
a_hash
|
@@ -211,16 +210,21 @@ module Google
|
|
211
210
|
protected
|
212
211
|
|
213
212
|
# Creates a jwt uri token.
|
214
|
-
def new_jwt_token jwt_aud_uri, options = {}
|
213
|
+
def new_jwt_token jwt_aud_uri = nil, options = {}
|
215
214
|
now = Time.new
|
216
215
|
skew = options[:skew] || 60
|
217
216
|
assertion = {
|
218
217
|
"iss" => @issuer,
|
219
218
|
"sub" => @issuer,
|
220
|
-
"aud" => jwt_aud_uri,
|
221
219
|
"exp" => (now + EXPIRY).to_i,
|
222
220
|
"iat" => (now - skew).to_i
|
223
221
|
}
|
222
|
+
|
223
|
+
jwt_aud_uri = nil if @scope
|
224
|
+
|
225
|
+
assertion["scope"] = Array(@scope).join " " if @scope
|
226
|
+
assertion["aud"] = jwt_aud_uri if jwt_aud_uri
|
227
|
+
|
224
228
|
JWT.encode assertion, @signing_key, SIGNING_ALGORITHM
|
225
229
|
end
|
226
230
|
end
|
data/lib/googleauth/version.rb
CHANGED
@@ -44,9 +44,10 @@ require "os"
|
|
44
44
|
|
45
45
|
include Google::Auth::CredentialsLoader
|
46
46
|
|
47
|
-
shared_examples "jwt header auth" do
|
47
|
+
shared_examples "jwt header auth" do |aud="https://www.googleapis.com/myservice"|
|
48
48
|
context "when jwt_aud_uri is present" do
|
49
|
-
let(:test_uri) {
|
49
|
+
let(:test_uri) { aud }
|
50
|
+
let(:test_scope) { "scope/1 scope/2" }
|
50
51
|
let(:auth_prefix) { "Bearer " }
|
51
52
|
let(:auth_key) { ServiceAccountJwtHeaderCredentials::AUTH_METADATA_KEY }
|
52
53
|
let(:jwt_uri_key) { ServiceAccountJwtHeaderCredentials::JWT_AUD_URI_KEY }
|
@@ -56,14 +57,16 @@ shared_examples "jwt header auth" do
|
|
56
57
|
expect(hdr.start_with?(auth_prefix)).to be true
|
57
58
|
authorization = hdr[auth_prefix.length..-1]
|
58
59
|
payload, = JWT.decode authorization, @key.public_key, true, algorithm: "RS256"
|
59
|
-
|
60
|
+
|
61
|
+
expect(payload["aud"]).to eq(test_uri) if not test_uri.nil?
|
62
|
+
expect(payload["scope"]).to eq(test_scope) if test_uri.nil?
|
60
63
|
expect(payload["iss"]).to eq(client_email)
|
61
64
|
end
|
62
65
|
|
63
66
|
describe "#apply!" do
|
64
67
|
it "should update the target hash with a jwt token" do
|
65
68
|
md = { foo: "bar" }
|
66
|
-
md[jwt_uri_key] = test_uri
|
69
|
+
md[jwt_uri_key] = test_uri if test_uri
|
67
70
|
@client.apply! md
|
68
71
|
auth_header = md[auth_key]
|
69
72
|
expect_is_encoded_jwt auth_header
|
@@ -74,31 +77,31 @@ shared_examples "jwt header auth" do
|
|
74
77
|
describe "updater_proc" do
|
75
78
|
it "should provide a proc that updates a hash with a jwt token" do
|
76
79
|
md = { foo: "bar" }
|
77
|
-
md[jwt_uri_key] = test_uri
|
80
|
+
md[jwt_uri_key] = test_uri if test_uri
|
78
81
|
the_proc = @client.updater_proc
|
79
82
|
got = the_proc.call md
|
80
83
|
auth_header = got[auth_key]
|
81
84
|
expect_is_encoded_jwt auth_header
|
82
85
|
expect(got[jwt_uri_key]).to be_nil
|
83
|
-
expect(md[jwt_uri_key]).to_not be_nil
|
86
|
+
expect(md[jwt_uri_key]).to_not be_nil if test_uri
|
84
87
|
end
|
85
88
|
end
|
86
89
|
|
87
90
|
describe "#apply" do
|
88
91
|
it "should not update the original hash with a jwt token" do
|
89
92
|
md = { foo: "bar" }
|
90
|
-
md[jwt_uri_key] = test_uri
|
93
|
+
md[jwt_uri_key] = test_uri if test_uri
|
91
94
|
the_proc = @client.updater_proc
|
92
95
|
got = the_proc.call md
|
93
96
|
auth_header = md[auth_key]
|
94
97
|
expect(auth_header).to be_nil
|
95
98
|
expect(got[jwt_uri_key]).to be_nil
|
96
|
-
expect(md[jwt_uri_key]).to_not be_nil
|
99
|
+
expect(md[jwt_uri_key]).to_not be_nil if test_uri
|
97
100
|
end
|
98
101
|
|
99
102
|
it "should add a jwt token to the returned hash" do
|
100
103
|
md = { foo: "bar" }
|
101
|
-
md[jwt_uri_key] = test_uri
|
104
|
+
md[jwt_uri_key] = test_uri if test_uri
|
102
105
|
got = @client.apply md
|
103
106
|
auth_header = got[auth_key]
|
104
107
|
expect_is_encoded_jwt auth_header
|
@@ -107,6 +110,7 @@ shared_examples "jwt header auth" do
|
|
107
110
|
end
|
108
111
|
end
|
109
112
|
|
113
|
+
|
110
114
|
describe Google::Auth::ServiceAccountCredentials do
|
111
115
|
ServiceAccountCredentials = Google::Auth::ServiceAccountCredentials
|
112
116
|
let(:client_email) { "app@developer.gserviceaccount.com" }
|
@@ -169,14 +173,24 @@ describe Google::Auth::ServiceAccountCredentials do
|
|
169
173
|
it_behaves_like "jwt header auth"
|
170
174
|
end
|
171
175
|
|
172
|
-
context "when enable_self_signed_jwt is set" do
|
176
|
+
context "when enable_self_signed_jwt is set with aud" do
|
173
177
|
before :example do
|
178
|
+
@client.scope = nil
|
174
179
|
@client.instance_variable_set(:@enable_self_signed_jwt, true)
|
175
180
|
end
|
176
181
|
|
177
182
|
it_behaves_like "jwt header auth"
|
178
183
|
end
|
179
184
|
|
185
|
+
context "when enable_self_signed_jwt is set with scope" do
|
186
|
+
before :example do
|
187
|
+
@client.scope = ['scope/1', 'scope/2']
|
188
|
+
@client.instance_variable_set(:@enable_self_signed_jwt, true)
|
189
|
+
end
|
190
|
+
|
191
|
+
it_behaves_like "jwt header auth", nil
|
192
|
+
end
|
193
|
+
|
180
194
|
describe "#from_env" do
|
181
195
|
before :example do
|
182
196
|
@var_name = ENV_VAR
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: googleauth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Emiola
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -164,6 +164,7 @@ files:
|
|
164
164
|
- Gemfile
|
165
165
|
- LICENSE
|
166
166
|
- README.md
|
167
|
+
- SECURITY.md
|
167
168
|
- googleauth.gemspec
|
168
169
|
- integration/helper.rb
|
169
170
|
- integration/id_tokens/key_source_test.rb
|
@@ -228,7 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
228
229
|
- !ruby/object:Gem::Version
|
229
230
|
version: '0'
|
230
231
|
requirements: []
|
231
|
-
rubygems_version: 3.2.
|
232
|
+
rubygems_version: 3.2.17
|
232
233
|
signing_key:
|
233
234
|
specification_version: 4
|
234
235
|
summary: Google Auth Library for Ruby
|