signet 0.13.2 → 0.14.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
2
  SHA256:
3
- metadata.gz: 05bb1f34c74307a1e398665dd2b8ccd1530f35464109bd39419f7652e0615753
4
- data.tar.gz: 0bf44b1bcfaaa5e6f4c9f990c317fc8ef10fb33cdd381ef45a7219a346202197
3
+ metadata.gz: bc147432dec3ce0cfc7dcb2f935b0b7063e65d7831415f58b00a133834b60eac
4
+ data.tar.gz: d3b11b9064d2bb95a4d905a8199a2372ea96a9214ba050cdc7a496108cc90094
5
5
  SHA512:
6
- metadata.gz: ce122ed9f26d33953e23022b2ed98b8dd05b2ee8666a2a3fa5a65d604aa04e316839aa1ce7d3e84c1530ab9007b128927e03a93849fc6752e04949dcf8e8cb1d
7
- data.tar.gz: b2c7bba0437a0306ea77e2cdd07921ab418a0354a57ec5494d0995cc52f364ee773599dfd8348615e5c41cb11938bb0e5a5aa62c22ebfc863543acb6ec128da6
6
+ metadata.gz: 13dd09c6860ee3607e0930ca51485f16b51137c62684288a834eb0b008dbcea7b5ee665320061561838f1d680920f15254cc8acc9d83ef80c6c8dcad72277950
7
+ data.tar.gz: 3052287168b60094c7d87e9f51b7ad89bf57f72e78f188a0f0be60a4914a62a36d2dd3e18ff6d89524665695ac3126c85af330884fe83c9ccf022ad61df2be7b
@@ -1,3 +1,7 @@
1
+ ### 0.14.0 / 2020-03-31
2
+
3
+ * Support for fetching ID tokens from google oauth2 endpoint.
4
+
1
5
  ### 0.13.2 / 2020-03-25
2
6
 
3
7
  Rerelease of 0.13.1.
@@ -46,6 +46,9 @@ module Signet
46
46
  # - <code>:scope</code> -
47
47
  # The scope of the access request, expressed either as an Array
48
48
  # or as a space-delimited String.
49
+ # - <code>:target_audience</code> -
50
+ # The final target audience for ID tokens fetched by this client,
51
+ # as a String.
49
52
  # - <code>:state</code> -
50
53
  # An arbitrary string designed to allow the client to maintain state.
51
54
  # - <code>:code</code> -
@@ -101,6 +104,7 @@ module Signet
101
104
  @principal = nil
102
105
  @redirect_uri = nil
103
106
  @scope = nil
107
+ @target_audience = nil
104
108
  @state = nil
105
109
  @username = nil
106
110
  @access_type = nil
@@ -130,6 +134,9 @@ module Signet
130
134
  # - <code>:scope</code> -
131
135
  # The scope of the access request, expressed either as an Array
132
136
  # or as a space-delimited String.
137
+ # - <code>:target_audience</code> -
138
+ # The final target audience for ID tokens fetched by this client,
139
+ # as a String.
133
140
  # - <code>:state</code> -
134
141
  # An arbitrary string designed to allow the client to maintain state.
135
142
  # - <code>:code</code> -
@@ -181,6 +188,7 @@ module Signet
181
188
  self.client_id = options[:client_id] if options.key? :client_id
182
189
  self.client_secret = options[:client_secret] if options.key? :client_secret
183
190
  self.scope = options[:scope] if options.key? :scope
191
+ self.target_audience = options[:target_audience] if options.key? :target_audience
184
192
  self.state = options[:state] if options.key? :state
185
193
  self.code = options[:code] if options.key? :code
186
194
  self.redirect_uri = options[:redirect_uri] if options.key? :redirect_uri
@@ -423,6 +431,22 @@ module Signet
423
431
  end
424
432
  end
425
433
 
434
+ ##
435
+ # Returns the final target audience for ID tokens fetched by this client.
436
+ #
437
+ # @return [String] The target audience.
438
+ def target_audience
439
+ @target_audience
440
+ end
441
+
442
+ ##
443
+ # Sets the final target audience for ID tokens fetched by this client.
444
+ #
445
+ # @param [String] new_target_audience The new target audience.
446
+ def target_audience= new_target_audience
447
+ @target_audience = new_target_audience
448
+ end
449
+
426
450
  ##
427
451
  # Returns the client's current state value.
428
452
  #
@@ -893,11 +917,13 @@ module Signet
893
917
  "iat" => (now - skew).to_i
894
918
  }
895
919
  assertion["scope"] = scope.join " " unless scope.nil?
920
+ assertion["target_audience"] = target_audience unless target_audience.nil?
896
921
  assertion["prn"] = person unless person.nil?
897
922
  assertion["sub"] = sub unless sub.nil?
898
923
  JWT.encode assertion, signing_key, signing_algorithm
899
924
  end
900
925
  # rubocop:disable Style/MethodDefParentheses
926
+ # rubocop:disable Metrics/AbcSize
901
927
 
902
928
  ##
903
929
  # Serialize the client object to JSON.
@@ -912,6 +938,7 @@ module Signet
912
938
  "client_id" => client_id,
913
939
  "client_secret" => client_secret,
914
940
  "scope" => scope,
941
+ "target_audience" => target_audience,
915
942
  "state" => state,
916
943
  "code" => code,
917
944
  "redirect_uri" => redirect_uri ? redirect_uri.to_s : nil,
@@ -930,7 +957,6 @@ module Signet
930
957
  )
931
958
  end
932
959
  # rubocop:enable Style/MethodDefParentheses
933
- # rubocop:disable Metrics/AbcSize
934
960
  # rubocop:disable Metrics/CyclomaticComplexity
935
961
  # rubocop:disable Metrics/MethodLength
936
962
  # rubocop:disable Metrics/PerceivedComplexity
@@ -13,5 +13,5 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module Signet
16
- VERSION = "0.13.2".freeze
16
+ VERSION = "0.14.0".freeze
17
17
  end
@@ -1212,3 +1212,43 @@ describe Signet::OAuth2::Client, "configured with custom parameters a la JSON.lo
1212
1212
  expect(params).to include("new_param" => "new_val")
1213
1213
  end
1214
1214
  end
1215
+
1216
+ describe Signet::OAuth2::Client, "configured for id tokens" do
1217
+ before do
1218
+ @key = OpenSSL::PKey::RSA.new 2048
1219
+ @client = Signet::OAuth2::Client.new(
1220
+ token_credential_uri: "https://oauth2.googleapis.com/token",
1221
+ target_audience: "https://api.example.com",
1222
+ issuer: "app@example.com",
1223
+ audience: "https://hello.googleapis.com",
1224
+ signing_key: @key
1225
+ )
1226
+ end
1227
+
1228
+ it "should set target_audience" do
1229
+ expect(@client.target_audience).to eq "https://api.example.com"
1230
+ end
1231
+
1232
+ it "should send a valid id token request" do
1233
+ stubs = Faraday::Adapter::Test::Stubs.new do |stub|
1234
+ stub.post "/token" do |env|
1235
+ params = Addressable::URI.form_unencode env[:body]
1236
+ claim, header = JWT.decode params.assoc("assertion").last, @key.public_key, true, algorithm: "RS256"
1237
+ expect(params.assoc("grant_type")).to eq ["grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer"]
1238
+ expect(claim["target_audience"]).to eq "https://api.example.com"
1239
+ expect(claim["iss"]).to eq "app@example.com"
1240
+ expect(claim["aud"]).to eq "https://hello.googleapis.com"
1241
+ build_json_response(
1242
+ "id_token" => "12345id",
1243
+ "refresh_token" => "54321refresh",
1244
+ "expires_in" => "3600"
1245
+ )
1246
+ end
1247
+ end
1248
+ connection = Faraday.new url: "https://www.google.com" do |builder|
1249
+ builder.adapter :test, stubs
1250
+ end
1251
+ @client.fetch_access_token! connection: connection
1252
+ expect(@client.id_token).to eq "12345id"
1253
+ end
1254
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: signet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.2
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Aman
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-03-26 00:00:00.000000000 Z
12
+ date: 2020-04-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: addressable