omniauth-entra-id 3.0.0 → 3.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12d51e6e7781fc58e98afb3631c673ffe033f6b606ddb549df20e8baaae1c5af
4
- data.tar.gz: 8b507bae0a8bbf2e72601e3e3be9c9d0513977528988ee04f9f70b5a8ce1672d
3
+ metadata.gz: ddd915751370dcbd9611821ce2e0c853737f92b9a4a3c0751199787dd41af788
4
+ data.tar.gz: 72b7bde2f8365d41b6c2f8429410df3cd9a2ceb4b7c820cb53ab4626c45b59c1
5
5
  SHA512:
6
- metadata.gz: 3595a1f659a7429216de6f00a39949b4a70655e4505bf6d126e9ea158569b977f0a7af8ebddb3df7791f89e85ad1ca35b53d926fc8bc6727d5477a06b20fc18a
7
- data.tar.gz: c090da890e3c2c2edd5a4f36e922f5eadae2caf498c5cd9ba398eaba6c62c2ef055ff4cf4da487dc353cf79438abd8004c2c6cb09e9fe8024184c51b2e77642d
6
+ metadata.gz: c78e6a6790f3ecdfc8e81381a7873fa7f389d1289ae56666e278ccc965f2fab090ae41de88c7eabcac4d3542f9678e2aee74c70e42dfd7b445fc6d646c459ece
7
+ data.tar.gz: 32a9a37f322f690b09653db3161c0400c435400b3f8a3670f0e673ca3a83451d42d629f69efd339ee7132bd540aba6cb80b93babf435868a59f1eda8a8aa80f5
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Change Log
2
2
 
3
+ ## v3.1.0 (2025-06-17)
4
+
5
+ * Provides a way to ignore TID when constructing a user UID, easing migration from v2.x, via the new `ignore_tid` option, resolving #42 (reported by @s-andringa)
6
+ * Handles a missing (`nil`) TID, via #46 (thanks to @frenkel)
7
+ * Ruby 3.4 "officially" supported through coverage in CI, via #47 (thanks to @hakeem0114)
8
+ * Supports JWT gem v2.9.x or v3.x, via #48 (thanks to @djpremier)
9
+
10
+ ## v3.0.1 (2024-11-21)
11
+
12
+ * Fixes a minor error in [`UPGRADING.md`](UPGRADING.md) reported in #38, via #40 (thanks to @kennethgeerts)
13
+ * Fixes incorrect attempt to verify JWT token issuer when the AD FS tenant `adfs` is specified, via #39 (thanks to @washu)
14
+
3
15
  ## v3.0.0 (2024-10-22)
4
16
 
5
17
  * To upgrade from the Azure ActiveDirectory V2 gem, please see [`UPGRADING.md`](UPGRADING.md)
data/README.md CHANGED
@@ -104,19 +104,20 @@ To have your application authenticate with Entra via a client secret, specify `c
104
104
 
105
105
  If you're using the client assertion flow, you need to register your certificate in the Entra portal. For more information, please see [the documentation](https://learn.microsoft.com/en-us/entra/identity-platform/certificate-credentials).
106
106
 
107
- | Option | Use |
108
- | ------ | --- |
109
- | `client_id` | **Mandatory.** Client ID for the 'application' (integration) configured on the Entra side. Found via the Entra UI. |
110
- | `client_secret` | **Mandatory for client secret flow.** Client secret for the 'application' (integration) configured on the Entra side. Found via the Entra UI. Don't give this if using client assertion flow. |
111
- | `certificate_path` | **Mandatory for client assertion flow.** Don't give this if using a client secret instead of client assertion. This should be the filepath to a PKCS#12 file. |
112
- | `tenant_id` | **Mandatory for client assertion flow.** Entra Tenant ID for multi-tenanted use. Default is `common`. Forms part of the Entra OAuth URL - `{base}/{tenant_id}/oauth2/v2.0/...` |
113
- | `base_url` | Location of Entra login page, for specialised requirements; default is `OmniAuth::Strategies::EntraId::BASE_URL` (at the time of writing, this is `https://login.microsoftonline.com`). |
114
- | `tenant_name` | For what is currently known by its old name of "Azure ActiveDirectory B2C" (and only active if `custom_policy` is also provided - see below), set the tenancy name to constructs the correct B2C endpoint of `{tenant_name}.b2clogin.com/{tenant_name}.onmicrosoft.com/{custom_policy>}" and uses that for auth calls. This is a convenience feature; the `base_entra_url` option could also be manually built up in the same way. |
115
- | `custom_policy` | Custom policy. Default is nil. Used in conjunction with `tenant_name`- see above. |
116
- | `authorize_params` | Additional parameters passed as URL query data in the initial OAuth redirection to Microsoft. See below for more. Empty Hash default. |
117
- | `domain_hint` | If defined, sets (overwriting, if already present) `domain_hint` inside `authorize_params`. Default `nil` / none. |
118
- | `scope` | If defined, sets (overwriting, if already present) `scope` inside `authorize_params`. Default is `OmniAuth::Strategies::EntraId::DEFAULT_SCOPE` (at the time of writing, this is `'openid profile email'`). |
119
- | `adfs` | If defined, modifies the URLs so they work with an on premise ADFS server. In order to use this you also need to set the `base_url` correctly and fill the `tenant_id` with `'adfs'`. |
107
+ | Option | Use |
108
+ | ----------------------------- | --- |
109
+ | `client_id` | **Mandatory.** Client ID for the 'application' (integration) configured on the Entra side. Found via the Entra UI. |
110
+ | `client_secret` | **Mandatory for client secret flow.** Client secret for the 'application' (integration) configured on the Entra side. Found via the Entra UI. Don't give this if using client assertion flow. |
111
+ | `certificate_path` | **Mandatory for client assertion flow.** Don't give this if using a client secret instead of client assertion. This should be the filepath to a PKCS#12 file. |
112
+ | `tenant_id` | **Mandatory for client assertion flow.** Entra Tenant ID for multi-tenanted use. Default is `common`. Forms part of the Entra OAuth URL - `{base}/{tenant_id}/oauth2/v2.0/...` |
113
+ | `base_url` | Location of Entra login page, for specialised requirements; default is `OmniAuth::Strategies::EntraId::BASE_URL` (at the time of writing, this is `https://login.microsoftonline.com`). |
114
+ | `tenant_name` | For what is currently known by its old name of "Azure ActiveDirectory B2C" (and only active if `custom_policy` is also provided - see below), set the tenancy name to constructs the correct B2C endpoint of `{tenant_name}.b2clogin.com/{tenant_name}.onmicrosoft.com/{custom_policy>}" and uses that for auth calls. This is a convenience feature; the `base_entra_url` option could also be manually built up in the same way. |
115
+ | `custom_policy` | Custom policy. Default is nil. Used in conjunction with `tenant_name`- see above. |
116
+ | `authorize_params` | Additional parameters passed as URL query data in the initial OAuth redirection to Microsoft. See below for more. Empty Hash default. |
117
+ | `domain_hint` | If defined, sets (overwriting, if already present) `domain_hint` inside `authorize_params`. Default `nil` / none. |
118
+ | `scope` | If defined, sets (overwriting, if already present) `scope` inside `authorize_params`. Default is `OmniAuth::Strategies::EntraId::DEFAULT_SCOPE` (at the time of writing, this is `'openid profile email'`). |
119
+ | `ìgnore_tid?` or `ignore_tid` | If set to `true`, tenant ID (TID) is *not* included for a user's UID from Entra. Use if you are confident that an Entra OID will be globally unique and have existing OID-only UIDs in use. Default is `false`; both TID and OID are used to form a UID. Note that the option name variation without the question mark only works for directly-specified options; provider classes must always define an override method called `ignore_tid?`. |
120
+ | `adfs?` or `adfs` | If set to `true`, modifies the URLs so they work with an on-premise AD FS server (Active Directory Federation Services). In order to use this you also need to set the `base_url` correctly and fill the `tenant_id` with `'adfs'`. Note that the option name variation without the question mark only works for directly-specified options; provider classes must always define an override method called `adfs?`. |
120
121
 
121
122
  In addition, as a special case, if the request URL contains a query parameter `prompt`, then this will be written into `authorize_params` under that key, overwriting if present any other value there. Note that this comes from the current request URL at the time OAuth flow is commencing, _not_ via static options Hash data or via a custom provider class - but you _could_ just as easily set `scope` inside a custom `authorize_params` returned from a provider class, as shown in an example later; the request URL query mechanism is just another way of doing the same thing.
122
123
 
data/UPGRADING.md CHANGED
@@ -45,7 +45,7 @@ https://example.com/v1/auth/azure_activedirectory_v2/callback
45
45
  ...is now:
46
46
 
47
47
  ```
48
- https://example.com/v1/auth/entra/callback
48
+ https://example.com/v1/auth/entra_id/callback
49
49
  ```
50
50
 
51
51
  ### URL generation
@@ -65,17 +65,19 @@ omniauth_authorize_url('resource_name_eg_user', 'entra_id', scope: '...')
65
65
 
66
66
 
67
67
  ## Updates due to other breaking changes
68
-
69
- ### Critical breaking change for all gem users
68
+ ### Change affecting all gem users
69
+ #### UIDs will change
70
70
 
71
71
  This change is for UIDs and is the main reason for creating a V3 gem, whether or not it included the Entra name change.
72
72
 
73
73
  * The UID returned by OmniAuth for a user previously depended upon the `oid` (object ID) returned by Microsoft. As noted in #33 and fixed in #34, this _might not be unique_ and tenant ID (`tid`) is supposed to be considered too.
74
74
  * Out-of-box, Entra ID will do this. If you were an Azure ActiveDirectory V2 (old-name gem, version 2.x) user, then you will have been receiving different UIDs based only on the `oid` from Microsoft.
75
75
  * **The change of OID might break the connection between a previously-registered and logged in user and a new login** as usually, you need to store the OmniAuth UID somewhere alongside or within your User records when a user is "connected to" an external OAuth service such as Entra ID.
76
+ * **However, there is a strong argument that TID is not needed** - see https://github.com/pond/omniauth-entra-id/issues/42 for a good argument to that end.
76
77
 
77
- You have two options, should the issue affect you (and it almost certainly will).
78
+ You have three options, should the issue affect you (and it almost certainly will).
78
79
 
80
+ * If you are confident that you still only need the OID, set the `ignore_tid` option to `true` alongside `client_id` and `client_secret` in your OmniAuth Entra ID initialiser or your custom provider class given to that initialiser, if you use one. See the top-level `README.md` for more.
79
81
  * If you can determine the tenant IDs for all users in your database, you can just migrate the UIDs. The new UID is just a simple concatenation of tenant ID and object ID, so treating the UID as a string, add the tenant ID as a prefix without any other changes in your migration and things should work fine thereafter.
80
82
  * Otherwise, you should lazy-migrate:
81
83
  - As usual, in your OAuth callback handler, `request.env['omniauth.auth'].uid` gives the UID - but now that's the "new" Entra gem's value which includes tenant ID.
@@ -85,13 +87,68 @@ You have two options, should the issue affect you (and it almost certainly will)
85
87
  - For better security add something like an indexed boolean column indicating whether or not the user has been thus migrated and only perform old OID lookups on users which have not yet been migrated.
86
88
  - If the user can't be found by either means, then they've not been connected to your system yet. Your existing handling path for such a condition applies.
87
89
 
88
- ### Applications that handle multiple OAuth providers
90
+ #### Applications that handle multiple OAuth providers
89
91
 
90
92
  If your user records contain users that have 'connected' to more than one kind of OAuth provider, then as well as the third party's UID being stored for future logins, you'll most likely have stored the OmniAuth provider name too so that the UID can be looked up in a provider's context (there's no guarantee, of course, that UIDs are unique *between providers* since they're entirely independent entities with their own strategies for allocating unique IDs).
91
93
 
92
94
  In that case, you will need to migrate records from the old `azure_activedirectory_v2` name to `entra_id`. **Zero-downtime deployment of this change would be very hard since your codebase would need to update from the Azure ActiveDirectory V2 gem to the Entra ID gem with the migration running simultaneously**, so if you need to do such a migration, then you probably should plan for a small maintenance window. At the scheduled time, go into maintenance mode, migrate, deploy, and restore normal service. Even without this, though, the 'worst that can happen' (in theory!) would be temporary user login failures. Either the Entra gem will be causing you to look for a user with an `entra_id` provider but the migration to set this hasn't run yet, or the other way round, with the old gem looking for the old provider name but it's already updated.
93
95
 
94
- ### Breaking changes that depend on whether or not you use a certain feature
96
+ #### Example migration code
97
+
98
+ Suppose you support multiple providers and your User table stores their chosen provider in a column `auth_provider`, with their UID in `auth_uid`. An (irreversible) database migration might do this:
99
+
100
+ ```ruby
101
+ def up
102
+ add_column :users, :migrated_to_entra, :boolean
103
+
104
+ User
105
+ .where(auth_provider: 'azure_activedirectory_v2')
106
+ .update_all(
107
+ auth_provider: 'entra_id',
108
+ migrated_to_entra: false
109
+ )
110
+ end
111
+
112
+ def down
113
+ raise ActiveRecord::IrreversibleMigration
114
+ end
115
+ ```
116
+
117
+ This means the `migrated_to_entra` column is only ever `false` for existing users that were linked using the V2 gem. Everything else will be at `NULL`. Now you lazy-move those users to the new UID format in the code you use to look up a user in your OmniAuth OAuth 2 callback handler, e.g. via a method such as this:
118
+
119
+ ```ruby
120
+ # Here, "raw_info" comes from e.g.:
121
+ #
122
+ # request.env['omniauth.auth'].extra&.dig('raw_info') || {}
123
+ #
124
+ def find_user_for_omniauth(auth_provider:, auth_uid:, raw_info:)
125
+ found_user = User.find_by(
126
+ auth_provider: auth_provider,
127
+ auth_uid: auth_uid
128
+ )
129
+
130
+ if found_user.nil? && auth_provider == 'entra_id'
131
+ found = User.find_by(
132
+ auth_provider: 'entra_id',
133
+ auth_uid: raw_info['oid'],
134
+ migrated_to_entra: false
135
+ )
136
+
137
+ if found
138
+ found.update_columns(
139
+ auth_uid: auth_uid,
140
+ migrated_to_entra: true
141
+ )
142
+ end
143
+ end
144
+
145
+ return found_user
146
+ end
147
+ ```
148
+
149
+ Once there are no rows with a `migrated_to_entra` value of `false` for _active_ users, you will be able to drop the column and remove the lazy migration code.
150
+
151
+ ### Other changes that might affect you
95
152
 
96
153
  * If you refer to `OmniAuth::Strategies::AzureActivedirectoryV2` at all, then this becomes `OmniAuth::Strategies::EntraId` (note lower case "d").
97
154
  * `base_azure_url` option renamed to just `base_url` with corresponding rename of `OmniAuth::Strategies::AzureActivedirectoryV2::BASE_AZURE_URL` to `OmniAuth::Strategies::EntraId::BASE_URL`.
@@ -1,8 +1,8 @@
1
1
  module OmniAuth
2
2
  module Entra
3
3
  module Id
4
- VERSION = "3.0.0"
5
- DATE = "2024-10-22"
4
+ VERSION = "3.1.0"
5
+ DATE = "2025-06-17"
6
6
  end
7
7
  end
8
8
  end
@@ -9,13 +9,15 @@ module OmniAuth
9
9
 
10
10
  option :name, 'entra_id'
11
11
  option :tenant_provider, nil
12
+ option :ignore_tid, false
12
13
  option :jwt_leeway, 60
13
14
 
14
15
  DEFAULT_SCOPE = 'openid profile email'
15
16
  COMMON_TENANT_ID = 'common'
17
+ AD_FS_TENANT_ID = 'adfs'
16
18
 
17
- # The tenant_provider must return client_id, client_secret and,
18
- # optionally, tenant_id and base_url.
19
+ # The tenant_provider argument is how the provider class is eventually
20
+ # passed to us, if one is used instead of an options Hash.
19
21
  #
20
22
  args [:tenant_provider]
21
23
 
@@ -57,6 +59,7 @@ module OmniAuth
57
59
  options.custom_policy = provider.custom_policy if provider.respond_to?(:custom_policy)
58
60
  options.authorize_params = provider.authorize_params if provider.respond_to?(:authorize_params)
59
61
  options.authorize_params.domain_hint = provider.domain_hint if provider.respond_to?(:domain_hint) && provider.domain_hint
62
+ options.ignore_tid = provider.ignore_tid? if provider.respond_to?(:ignore_tid?) && provider.ignore_tid?
60
63
  options.authorize_params.prompt = request.params['prompt'] if defined?(request) && request.params['prompt']
61
64
 
62
65
  options.authorize_params.scope = if defined?(request) && request.params['scope']
@@ -87,14 +90,32 @@ module OmniAuth
87
90
 
88
91
  uid do
89
92
  #
90
- # https://learn.microsoft.com/en-us/entra/identity-platform/migrate-off-email-claim-authorization
93
+ # Note 1:
94
+ #
95
+ # https://learn.microsoft.com/en-us/entra/identity-platform/migrate-off-email-claim-authorization
91
96
  #
92
97
  # OID alone might not be unique; TID must be included. An alternative
93
98
  # would be to use 'sub' but this is only unique in client/app
94
99
  # registration context. If a different app registration is used, the
95
- # 'sub' values can be different too.
100
+ # 'sub' values can be different too...
101
+ #
102
+ # Note 2:
103
+ #
104
+ # https://github.com/pond/omniauth-entra-id/issues/42
96
105
  #
97
- raw_info['tid'] + raw_info['oid']
106
+ # ...but not everyone agrees on the necessity of a TID and if migrating
107
+ # from an earlier version of this gem where user data already includes
108
+ # OID-only identifiers, you might elect to avoid a difficult migration
109
+ # by opting out - set the "ignore_tid" option to 'true'.
110
+ #
111
+ # NB: If the TID is missing or blank the UID uses only the OID, just as
112
+ # if the "ignore_tid" option were set.
113
+ #
114
+ if options.ignore_tid? || raw_info['tid'].nil?
115
+ raw_info['oid']
116
+ else
117
+ raw_info['tid'] + raw_info['oid']
118
+ end
98
119
  end
99
120
 
100
121
  info do
@@ -135,9 +156,17 @@ module OmniAuth
135
156
 
136
157
  # For multi-tenant apps (the 'common' tenant_id) it doesn't make any
137
158
  # sense to verify the token issuer, because the value of 'iss' in the
138
- # token depends on the 'tid' in the token itself.
159
+ # token depends on the 'tid' in the token itself. We should also skip
160
+ # for AD FS local instances, as we don't put a valid tenant ID in its
161
+ # place, but "adfs" (see AD_FS_TENANT_ID) instead.
139
162
  #
140
- issuer = if options.tenant_id.nil? || options.tenant_id == COMMON_TENANT_ID
163
+ do_not_verify = (
164
+ options.tenant_id.nil? ||
165
+ options.tenant_id == COMMON_TENANT_ID ||
166
+ options.tenant_id == AD_FS_TENANT_ID
167
+ )
168
+
169
+ issuer = if do_not_verify
141
170
  nil
142
171
  else
143
172
  "#{options.base_url || BASE_URL}/#{options.tenant_id}/v2.0"
@@ -145,16 +174,14 @@ module OmniAuth
145
174
 
146
175
  # https://learn.microsoft.com/en-us/entra/identity-platform/id-tokens#validate-tokens
147
176
  #
148
- JWT::Verify.verify_claims(
149
- id_token_data,
150
- verify_iss: !issuer.nil?,
151
- iss: issuer,
152
- verify_aud: true,
153
- aud: options.client_id,
154
- verify_expiration: true,
155
- verify_not_before: true,
156
- leeway: options[:jwt_leeway]
157
- )
177
+ verify_params = {
178
+ aud: options.client_id,
179
+ exp: { leeway: options.jwt_leeway },
180
+ nbf: { leeway: options.jwt_leeway }
181
+ }
182
+ verify_params[:iss] = issuer unless issuer.nil?
183
+
184
+ ::JWT::Claims.verify_payload!(id_token_data, verify_params)
158
185
 
159
186
  auth_token_data = begin
160
187
  ::JWT.decode(access_token.token, nil, false).first
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
14
14
  s.authors = [ 'RIPA Global' ]
15
15
  s.email = [ 'dev@ripaglobal.com' ]
16
16
  s.licenses = [ 'MIT' ]
17
- s.homepage = 'https://github.com/RIPAGlobal/omniauth-entra-id'
17
+ s.homepage = 'https://github.com/pond/scimitar/'
18
18
 
19
19
  s.required_ruby_version = Gem::Requirement.new('>= 3.0.0')
20
20
  s.require_paths = ['lib']
@@ -39,15 +39,16 @@ Gem::Specification.new do |s|
39
39
  }
40
40
 
41
41
  s.metadata = {
42
- 'homepage_uri' => 'https://www.ripaglobal.com/',
43
- 'bug_tracker_uri' => 'https://github.com/RIPAGlobal/omniauth-entra-id/issues/',
44
- 'changelog_uri' => 'https://github.com/RIPAGlobal/omniauth-entra-id/blob/master/CHANGELOG.md',
45
- 'source_code_uri' => 'https://github.com/RIPAGlobal/omniauth-entra-id'
42
+ 'homepage_uri' => s.homepage,
43
+ 'bug_tracker_uri' => 'https://github.com/pond/omniauth-entra-id/issues/',
44
+ 'changelog_uri' => 'https://github.com/pond/omniauth-entra-id/blob/master/CHANGELOG.md',
45
+ 'source_code_uri' => 'https://github.com/pond/omniauth-entra-id'
46
46
  }
47
47
 
48
- s.add_runtime_dependency('omniauth-oauth2', '~> 1.8')
48
+ s.add_runtime_dependency 'jwt', '>= 2.9.2'
49
+ s.add_runtime_dependency 'omniauth-oauth2', '~> 1.8'
49
50
 
50
- s.add_development_dependency('debug', '~> 1.9 ')
51
- s.add_development_dependency('rake', '~> 13.2 ')
52
- s.add_development_dependency('rspec', '~> 3.13')
51
+ s.add_development_dependency 'debug', '~> 1.10'
52
+ s.add_development_dependency 'rake', '~> 13.3'
53
+ s.add_development_dependency 'rspec', '~> 3.13'
53
54
  end
metadata CHANGED
@@ -1,15 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-entra-id
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - RIPA Global
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-10-22 00:00:00.000000000 Z
10
+ date: 2025-06-17 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: jwt
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 2.9.2
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 2.9.2
13
26
  - !ruby/object:Gem::Dependency
14
27
  name: omniauth-oauth2
15
28
  requirement: !ruby/object:Gem::Requirement
@@ -30,28 +43,28 @@ dependencies:
30
43
  requirements:
31
44
  - - "~>"
32
45
  - !ruby/object:Gem::Version
33
- version: '1.9'
46
+ version: '1.10'
34
47
  type: :development
35
48
  prerelease: false
36
49
  version_requirements: !ruby/object:Gem::Requirement
37
50
  requirements:
38
51
  - - "~>"
39
52
  - !ruby/object:Gem::Version
40
- version: '1.9'
53
+ version: '1.10'
41
54
  - !ruby/object:Gem::Dependency
42
55
  name: rake
43
56
  requirement: !ruby/object:Gem::Requirement
44
57
  requirements:
45
58
  - - "~>"
46
59
  - !ruby/object:Gem::Version
47
- version: '13.2'
60
+ version: '13.3'
48
61
  type: :development
49
62
  prerelease: false
50
63
  version_requirements: !ruby/object:Gem::Requirement
51
64
  requirements:
52
65
  - - "~>"
53
66
  - !ruby/object:Gem::Version
54
- version: '13.2'
67
+ version: '13.3'
55
68
  - !ruby/object:Gem::Dependency
56
69
  name: rspec
57
70
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +79,6 @@ dependencies:
66
79
  - - "~>"
67
80
  - !ruby/object:Gem::Version
68
81
  version: '3.13'
69
- description:
70
82
  email:
71
83
  - dev@ripaglobal.com
72
84
  executables: []
@@ -86,15 +98,14 @@ files:
86
98
  - lib/omniauth/entra_id/version.rb
87
99
  - lib/omniauth/strategies/entra_id.rb
88
100
  - omniauth-entra-id.gemspec
89
- homepage: https://github.com/RIPAGlobal/omniauth-entra-id
101
+ homepage: https://github.com/pond/scimitar/
90
102
  licenses:
91
103
  - MIT
92
104
  metadata:
93
- homepage_uri: https://www.ripaglobal.com/
94
- bug_tracker_uri: https://github.com/RIPAGlobal/omniauth-entra-id/issues/
95
- changelog_uri: https://github.com/RIPAGlobal/omniauth-entra-id/blob/master/CHANGELOG.md
96
- source_code_uri: https://github.com/RIPAGlobal/omniauth-entra-id
97
- post_install_message:
105
+ homepage_uri: https://github.com/pond/scimitar/
106
+ bug_tracker_uri: https://github.com/pond/omniauth-entra-id/issues/
107
+ changelog_uri: https://github.com/pond/omniauth-entra-id/blob/master/CHANGELOG.md
108
+ source_code_uri: https://github.com/pond/omniauth-entra-id
98
109
  rdoc_options: []
99
110
  require_paths:
100
111
  - lib
@@ -109,8 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
120
  - !ruby/object:Gem::Version
110
121
  version: '0'
111
122
  requirements: []
112
- rubygems_version: 3.5.21
113
- signing_key:
123
+ rubygems_version: 3.6.2
114
124
  specification_version: 4
115
125
  summary: OAuth 2 authentication with the Entra ID API.
116
126
  test_files: []