googleauth 0.17.1 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +112 -62
- data/README.md +49 -14
- data/lib/googleauth/application_default.rb +11 -26
- data/lib/googleauth/base_client.rb +80 -0
- data/lib/googleauth/client_id.rb +10 -25
- data/lib/googleauth/compute_engine.rb +10 -25
- data/lib/googleauth/credentials.rb +12 -27
- data/lib/googleauth/credentials_loader.rb +27 -43
- data/lib/googleauth/default_credentials.rb +15 -25
- data/lib/googleauth/external_account/aws_credentials.rb +378 -0
- data/lib/googleauth/external_account/base_credentials.rb +158 -0
- data/lib/googleauth/external_account/external_account_utils.rb +103 -0
- data/lib/googleauth/external_account/identity_pool_credentials.rb +118 -0
- data/lib/googleauth/external_account/pluggable_credentials.rb +156 -0
- data/lib/googleauth/external_account.rb +93 -0
- data/lib/googleauth/helpers/connection.rb +35 -0
- data/lib/googleauth/iam.rb +10 -25
- data/lib/googleauth/id_tokens/errors.rb +9 -23
- data/lib/googleauth/id_tokens/key_sources.rb +19 -33
- data/lib/googleauth/id_tokens/verifier.rb +9 -23
- data/lib/googleauth/id_tokens.rb +11 -25
- data/lib/googleauth/json_key_reader.rb +10 -25
- data/lib/googleauth/oauth2/sts_client.rb +109 -0
- data/lib/googleauth/scope_util.rb +10 -25
- data/lib/googleauth/service_account.rb +11 -28
- data/lib/googleauth/signet.rb +16 -58
- data/lib/googleauth/stores/file_token_store.rb +10 -25
- data/lib/googleauth/stores/redis_token_store.rb +10 -25
- data/lib/googleauth/token_store.rb +10 -25
- data/lib/googleauth/user_authorizer.rb +10 -25
- data/lib/googleauth/user_refresh.rb +15 -27
- data/lib/googleauth/version.rb +11 -26
- data/lib/googleauth/web_user_authorizer.rb +10 -25
- data/lib/googleauth.rb +10 -25
- metadata +26 -11
data/lib/googleauth/iam.rb
CHANGED
@@ -1,31 +1,16 @@
|
|
1
|
-
# Copyright 2015
|
2
|
-
# All rights reserved.
|
1
|
+
# Copyright 2015 Google, Inc.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
7
6
|
#
|
8
|
-
#
|
9
|
-
# notice, this list of conditions and the following disclaimer.
|
10
|
-
# * Redistributions in binary form must reproduce the above
|
11
|
-
# copyright notice, this list of conditions and the following disclaimer
|
12
|
-
# in the documentation and/or other materials provided with the
|
13
|
-
# distribution.
|
14
|
-
# * Neither the name of Google Inc. nor the names of its
|
15
|
-
# contributors may be used to endorse or promote products derived from
|
16
|
-
# this software without specific prior written permission.
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
17
8
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
24
|
-
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
25
|
-
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
26
|
-
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
27
|
-
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
28
|
-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
29
14
|
|
30
15
|
require "googleauth/signet"
|
31
16
|
require "googleauth/credentials_loader"
|
@@ -2,31 +2,17 @@
|
|
2
2
|
|
3
3
|
# Copyright 2020 Google LLC
|
4
4
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
8
|
#
|
9
|
-
#
|
10
|
-
# notice, this list of conditions and the following disclaimer.
|
11
|
-
# * Redistributions in binary form must reproduce the above
|
12
|
-
# copyright notice, this list of conditions and the following disclaimer
|
13
|
-
# in the documentation and/or other materials provided with the
|
14
|
-
# distribution.
|
15
|
-
# * Neither the name of Google Inc. nor the names of its
|
16
|
-
# contributors may be used to endorse or promote products derived from
|
17
|
-
# this software without specific prior written permission.
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
18
10
|
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
25
|
-
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
26
|
-
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
27
|
-
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
28
|
-
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
30
16
|
|
31
17
|
|
32
18
|
module Google
|
@@ -2,31 +2,18 @@
|
|
2
2
|
|
3
3
|
# Copyright 2020 Google LLC
|
4
4
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
8
|
#
|
9
|
-
#
|
10
|
-
# notice, this list of conditions and the following disclaimer.
|
11
|
-
# * Redistributions in binary form must reproduce the above
|
12
|
-
# copyright notice, this list of conditions and the following disclaimer
|
13
|
-
# in the documentation and/or other materials provided with the
|
14
|
-
# distribution.
|
15
|
-
# * Neither the name of Google Inc. nor the names of its
|
16
|
-
# contributors may be used to endorse or promote products derived from
|
17
|
-
# this software without specific prior written permission.
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
18
10
|
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
|
25
|
-
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
26
|
-
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
27
|
-
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
28
|
-
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
30
17
|
|
31
18
|
require "base64"
|
32
19
|
require "json"
|
@@ -143,13 +130,8 @@ module Google
|
|
143
130
|
end
|
144
131
|
n_bn = OpenSSL::BN.new n_data, 2
|
145
132
|
e_bn = OpenSSL::BN.new e_data, 2
|
146
|
-
|
147
|
-
|
148
|
-
rsa_key.set_key n_bn, e_bn, nil
|
149
|
-
else
|
150
|
-
rsa_key.n = n_bn
|
151
|
-
rsa_key.e = e_bn
|
152
|
-
end
|
133
|
+
sequence = [OpenSSL::ASN1::Integer.new(n_bn), OpenSSL::ASN1::Integer.new(e_bn)]
|
134
|
+
rsa_key = OpenSSL::PKey::RSA.new OpenSSL::ASN1::Sequence(sequence).to_der
|
153
135
|
rsa_key.public_key
|
154
136
|
end
|
155
137
|
|
@@ -174,9 +156,13 @@ module Google
|
|
174
156
|
x_hex = x_data.unpack1 "H*"
|
175
157
|
y_hex = y_data.unpack1 "H*"
|
176
158
|
bn = OpenSSL::BN.new ["04#{x_hex}#{y_hex}"].pack("H*"), 2
|
177
|
-
|
178
|
-
|
179
|
-
|
159
|
+
point = OpenSSL::PKey::EC::Point.new group, bn
|
160
|
+
sequence = OpenSSL::ASN1::Sequence([
|
161
|
+
OpenSSL::ASN1::Sequence([OpenSSL::ASN1::ObjectId("id-ecPublicKey"),
|
162
|
+
OpenSSL::ASN1::ObjectId(curve_name)]),
|
163
|
+
OpenSSL::ASN1::BitString(point.to_octet_string(:uncompressed))
|
164
|
+
])
|
165
|
+
OpenSSL::PKey::EC.new sequence.to_der
|
180
166
|
end
|
181
167
|
end
|
182
168
|
end
|
@@ -2,31 +2,17 @@
|
|
2
2
|
|
3
3
|
# Copyright 2020 Google LLC
|
4
4
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
8
|
#
|
9
|
-
#
|
10
|
-
# notice, this list of conditions and the following disclaimer.
|
11
|
-
# * Redistributions in binary form must reproduce the above
|
12
|
-
# copyright notice, this list of conditions and the following disclaimer
|
13
|
-
# in the documentation and/or other materials provided with the
|
14
|
-
# distribution.
|
15
|
-
# * Neither the name of Google Inc. nor the names of its
|
16
|
-
# contributors may be used to endorse or promote products derived from
|
17
|
-
# this software without specific prior written permission.
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
18
10
|
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
25
|
-
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
26
|
-
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
27
|
-
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
28
|
-
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
30
16
|
|
31
17
|
require "jwt"
|
32
18
|
|
data/lib/googleauth/id_tokens.rb
CHANGED
@@ -2,31 +2,17 @@
|
|
2
2
|
|
3
3
|
# Copyright 2020 Google LLC
|
4
4
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
8
|
#
|
9
|
-
#
|
10
|
-
# notice, this list of conditions and the following disclaimer.
|
11
|
-
# * Redistributions in binary form must reproduce the above
|
12
|
-
# copyright notice, this list of conditions and the following disclaimer
|
13
|
-
# in the documentation and/or other materials provided with the
|
14
|
-
# distribution.
|
15
|
-
# * Neither the name of Google Inc. nor the names of its
|
16
|
-
# contributors may be used to endorse or promote products derived from
|
17
|
-
# this software without specific prior written permission.
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
18
10
|
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
25
|
-
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
26
|
-
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
27
|
-
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
28
|
-
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
30
16
|
|
31
17
|
require "googleauth/id_tokens/errors"
|
32
18
|
require "googleauth/id_tokens/key_sources"
|
@@ -167,7 +153,7 @@ module Google
|
|
167
153
|
# one of the provided values, or the verification will fail with
|
168
154
|
# {Google::Auth::IDToken::AuthorizedPartyMismatchError}. If `nil`
|
169
155
|
# (the default), no azp checking is performed.
|
170
|
-
# @param
|
156
|
+
# @param iss [String,Array<String>,nil] The expected issuer. At least
|
171
157
|
# one `iss` field in the token must match at least one of the
|
172
158
|
# provided issuers, or the verification will fail with
|
173
159
|
# {Google::Auth::IDToken::IssuerMismatchError}. If `nil`, no issuer
|
@@ -205,7 +191,7 @@ module Google
|
|
205
191
|
# one of the provided values, or the verification will fail with
|
206
192
|
# {Google::Auth::IDToken::AuthorizedPartyMismatchError}. If `nil`
|
207
193
|
# (the default), no azp checking is performed.
|
208
|
-
# @param
|
194
|
+
# @param iss [String,Array<String>,nil] The expected issuer. At least
|
209
195
|
# one `iss` field in the token must match at least one of the
|
210
196
|
# provided issuers, or the verification will fail with
|
211
197
|
# {Google::Auth::IDToken::IssuerMismatchError}. If `nil`, no issuer
|
@@ -1,31 +1,16 @@
|
|
1
|
-
# Copyright 2015
|
2
|
-
# All rights reserved.
|
1
|
+
# Copyright 2015 Google, Inc.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
7
6
|
#
|
8
|
-
#
|
9
|
-
# notice, this list of conditions and the following disclaimer.
|
10
|
-
# * Redistributions in binary form must reproduce the above
|
11
|
-
# copyright notice, this list of conditions and the following disclaimer
|
12
|
-
# in the documentation and/or other materials provided with the
|
13
|
-
# distribution.
|
14
|
-
# * Neither the name of Google Inc. nor the names of its
|
15
|
-
# contributors may be used to endorse or promote products derived from
|
16
|
-
# this software without specific prior written permission.
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
17
8
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
24
|
-
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
25
|
-
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
26
|
-
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
27
|
-
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
28
|
-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
29
14
|
|
30
15
|
module Google
|
31
16
|
# Module Auth provides classes that provide Google-specific authorization
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# Copyright 2023 Google LLC
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require "googleauth/helpers/connection"
|
16
|
+
|
17
|
+
module Google
|
18
|
+
module Auth
|
19
|
+
module OAuth2
|
20
|
+
# OAuth 2.0 Token Exchange Spec.
|
21
|
+
# This module defines a token exchange utility based on the
|
22
|
+
# [OAuth 2.0 Token Exchange](https://tools.ietf.org/html/rfc8693) spec. This will be mainly
|
23
|
+
# used to exchange external credentials for GCP access tokens in workload identity pools to
|
24
|
+
# access Google APIs.
|
25
|
+
# The implementation will support various types of client authentication as allowed in the spec.
|
26
|
+
#
|
27
|
+
# A deviation on the spec will be for additional Google specific options that cannot be easily
|
28
|
+
# mapped to parameters defined in the RFC.
|
29
|
+
# The returned dictionary response will be based on the [rfc8693 section 2.2.1]
|
30
|
+
# (https://tools.ietf.org/html/rfc8693#section-2.2.1) spec JSON response.
|
31
|
+
#
|
32
|
+
class STSClient
|
33
|
+
include Helpers::Connection
|
34
|
+
|
35
|
+
URLENCODED_HEADERS = { "Content-Type": "application/x-www-form-urlencoded" }.freeze
|
36
|
+
|
37
|
+
# Create a new instance of the STSClient.
|
38
|
+
#
|
39
|
+
# @param [String] token_exchange_endpoint
|
40
|
+
# The token exchange endpoint.
|
41
|
+
def initialize options = {}
|
42
|
+
raise "Token exchange endpoint can not be nil" if options[:token_exchange_endpoint].nil?
|
43
|
+
self.default_connection = options[:connection]
|
44
|
+
@token_exchange_endpoint = options[:token_exchange_endpoint]
|
45
|
+
end
|
46
|
+
|
47
|
+
# Exchanges the provided token for another type of token based on the
|
48
|
+
# rfc8693 spec
|
49
|
+
#
|
50
|
+
# @param [Faraday instance] connection
|
51
|
+
# A callable faraday instance used to make HTTP requests.
|
52
|
+
# @param [String] grant_type
|
53
|
+
# The OAuth 2.0 token exchange grant type.
|
54
|
+
# @param [String] subject_token
|
55
|
+
# The OAuth 2.0 token exchange subject token.
|
56
|
+
# @param [String] subject_token_type
|
57
|
+
# The OAuth 2.0 token exchange subject token type.
|
58
|
+
# @param [String] resource
|
59
|
+
# The optional OAuth 2.0 token exchange resource field.
|
60
|
+
# @param [String] audience
|
61
|
+
# The optional OAuth 2.0 token exchange audience field.
|
62
|
+
# @param [Array<String>] scopes
|
63
|
+
# The optional list of scopes to use.
|
64
|
+
# @param [String] requested_token_type
|
65
|
+
# The optional OAuth 2.0 token exchange requested token type.
|
66
|
+
# @param additional_headers (Hash<String,String>):
|
67
|
+
# The optional additional headers to pass to the token exchange endpoint.
|
68
|
+
#
|
69
|
+
# @return [Hash] A hash containing the token exchange response.
|
70
|
+
def exchange_token options = {}
|
71
|
+
missing_required_opts = [:grant_type, :subject_token, :subject_token_type] - options.keys
|
72
|
+
unless missing_required_opts.empty?
|
73
|
+
raise ArgumentError, "Missing required options: #{missing_required_opts.join ', '}"
|
74
|
+
end
|
75
|
+
|
76
|
+
# TODO: Add the ability to add authentication to the headers
|
77
|
+
headers = URLENCODED_HEADERS.dup.merge(options[:additional_headers] || {})
|
78
|
+
|
79
|
+
request_body = make_request options
|
80
|
+
|
81
|
+
response = connection.post @token_exchange_endpoint, URI.encode_www_form(request_body), headers
|
82
|
+
|
83
|
+
if response.status != 200
|
84
|
+
raise "Token exchange failed with status #{response.status}"
|
85
|
+
end
|
86
|
+
|
87
|
+
MultiJson.load response.body
|
88
|
+
end
|
89
|
+
|
90
|
+
private
|
91
|
+
|
92
|
+
def make_request options = {}
|
93
|
+
request_body = {
|
94
|
+
grant_type: options[:grant_type],
|
95
|
+
audience: options[:audience],
|
96
|
+
scope: Array(options[:scopes])&.join(" ") || [],
|
97
|
+
requested_token_type: options[:requested_token_type],
|
98
|
+
subject_token: options[:subject_token],
|
99
|
+
subject_token_type: options[:subject_token_type]
|
100
|
+
}
|
101
|
+
unless options[:additional_options].nil?
|
102
|
+
request_body[:options] = CGI.escape MultiJson.dump(options[:additional_options], symbolize_name: true)
|
103
|
+
end
|
104
|
+
request_body
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -1,31 +1,16 @@
|
|
1
|
-
# Copyright 2015
|
2
|
-
# All rights reserved.
|
1
|
+
# Copyright 2015 Google, Inc.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
7
6
|
#
|
8
|
-
#
|
9
|
-
# notice, this list of conditions and the following disclaimer.
|
10
|
-
# * Redistributions in binary form must reproduce the above
|
11
|
-
# copyright notice, this list of conditions and the following disclaimer
|
12
|
-
# in the documentation and/or other materials provided with the
|
13
|
-
# distribution.
|
14
|
-
# * Neither the name of Google Inc. nor the names of its
|
15
|
-
# contributors may be used to endorse or promote products derived from
|
16
|
-
# this software without specific prior written permission.
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
17
8
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
24
|
-
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
25
|
-
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
26
|
-
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
27
|
-
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
28
|
-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
29
14
|
|
30
15
|
require "googleauth/signet"
|
31
16
|
require "googleauth/credentials_loader"
|
@@ -1,31 +1,16 @@
|
|
1
|
-
# Copyright 2015
|
2
|
-
# All rights reserved.
|
1
|
+
# Copyright 2015 Google, Inc.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
7
6
|
#
|
8
|
-
#
|
9
|
-
# notice, this list of conditions and the following disclaimer.
|
10
|
-
# * Redistributions in binary form must reproduce the above
|
11
|
-
# copyright notice, this list of conditions and the following disclaimer
|
12
|
-
# in the documentation and/or other materials provided with the
|
13
|
-
# distribution.
|
14
|
-
# * Neither the name of Google Inc. nor the names of its
|
15
|
-
# contributors may be used to endorse or promote products derived from
|
16
|
-
# this software without specific prior written permission.
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
17
8
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
24
|
-
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
25
|
-
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
26
|
-
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
27
|
-
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
28
|
-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
29
14
|
|
30
15
|
require "googleauth/signet"
|
31
16
|
require "googleauth/credentials_loader"
|
@@ -145,7 +130,7 @@ module Google
|
|
145
130
|
# cf [Application Default Credentials](https://cloud.google.com/docs/authentication/production)
|
146
131
|
class ServiceAccountJwtHeaderCredentials
|
147
132
|
JWT_AUD_URI_KEY = :jwt_aud_uri
|
148
|
-
AUTH_METADATA_KEY =
|
133
|
+
AUTH_METADATA_KEY = Google::Auth::BaseClient::AUTH_METADATA_KEY
|
149
134
|
TOKEN_CRED_URI = "https://www.googleapis.com/oauth2/v4/token".freeze
|
150
135
|
SIGNING_ALGORITHM = "RS256".freeze
|
151
136
|
EXPIRY = 60
|
@@ -207,8 +192,6 @@ module Google
|
|
207
192
|
proc { |a_hash, opts = {}| apply a_hash, opts }
|
208
193
|
end
|
209
194
|
|
210
|
-
protected
|
211
|
-
|
212
195
|
# Creates a jwt uri token.
|
213
196
|
def new_jwt_token jwt_aud_uri = nil, options = {}
|
214
197
|
now = Time.new
|
data/lib/googleauth/signet.rb
CHANGED
@@ -1,74 +1,39 @@
|
|
1
|
-
# Copyright 2015
|
2
|
-
# All rights reserved.
|
1
|
+
# Copyright 2015 Google, Inc.
|
3
2
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
7
6
|
#
|
8
|
-
#
|
9
|
-
# notice, this list of conditions and the following disclaimer.
|
10
|
-
# * Redistributions in binary form must reproduce the above
|
11
|
-
# copyright notice, this list of conditions and the following disclaimer
|
12
|
-
# in the documentation and/or other materials provided with the
|
13
|
-
# distribution.
|
14
|
-
# * Neither the name of Google Inc. nor the names of its
|
15
|
-
# contributors may be used to endorse or promote products derived from
|
16
|
-
# this software without specific prior written permission.
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
17
8
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
24
|
-
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
25
|
-
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
26
|
-
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
27
|
-
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
28
|
-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
29
14
|
|
30
15
|
require "signet/oauth_2/client"
|
16
|
+
require "googleauth/base_client"
|
31
17
|
|
32
18
|
module Signet
|
33
19
|
# OAuth2 supports OAuth2 authentication.
|
34
20
|
module OAuth2
|
35
|
-
AUTH_METADATA_KEY = :authorization
|
36
21
|
# Signet::OAuth2::Client creates an OAuth2 client
|
37
22
|
#
|
38
23
|
# This reopens Client to add #apply and #apply! methods which update a
|
39
24
|
# hash with the fetched authentication token.
|
40
25
|
class Client
|
26
|
+
include Google::Auth::BaseClient
|
27
|
+
|
41
28
|
def configure_connection options
|
42
29
|
@connection_info =
|
43
30
|
options[:connection_builder] || options[:default_connection]
|
44
31
|
self
|
45
32
|
end
|
46
33
|
|
47
|
-
#
|
48
|
-
def
|
49
|
-
|
50
|
-
# has expired
|
51
|
-
token_type = target_audience ? :id_token : :access_token
|
52
|
-
fetch_access_token! opts if send(token_type).nil? || expires_within?(60)
|
53
|
-
a_hash[AUTH_METADATA_KEY] = "Bearer #{send token_type}"
|
54
|
-
end
|
55
|
-
|
56
|
-
# Returns a clone of a_hash updated with the authentication token
|
57
|
-
def apply a_hash, opts = {}
|
58
|
-
a_copy = a_hash.clone
|
59
|
-
apply! a_copy, opts
|
60
|
-
a_copy
|
61
|
-
end
|
62
|
-
|
63
|
-
# Returns a reference to the #apply method, suitable for passing as
|
64
|
-
# a closure
|
65
|
-
def updater_proc
|
66
|
-
proc { |a_hash, opts = {}| apply a_hash, opts }
|
67
|
-
end
|
68
|
-
|
69
|
-
def on_refresh &block
|
70
|
-
@refresh_listeners = [] unless defined? @refresh_listeners
|
71
|
-
@refresh_listeners << block
|
34
|
+
# The token type as symbol, either :id_token or :access_token
|
35
|
+
def token_type
|
36
|
+
target_audience ? :id_token : :access_token
|
72
37
|
end
|
73
38
|
|
74
39
|
alias orig_fetch_access_token! fetch_access_token!
|
@@ -84,13 +49,6 @@ module Signet
|
|
84
49
|
info
|
85
50
|
end
|
86
51
|
|
87
|
-
def notify_refresh_listeners
|
88
|
-
listeners = defined?(@refresh_listeners) ? @refresh_listeners : []
|
89
|
-
listeners.each do |block|
|
90
|
-
block.call self
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
52
|
def build_default_connection
|
95
53
|
if !defined?(@connection_info)
|
96
54
|
nil
|