omniauth-azure-activedirectory-v2 2.0.0 → 2.1.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: 6292ee8af704acb7005d47fa78c9ebae4ae9e49bc677dcaff08e087560004013
4
- data.tar.gz: 418effa55080e12e2371804f2634c67977c782c7fa9a4bbb3fafbae253e69307
3
+ metadata.gz: 82d3c5122483452eb3e9b37dba4ae4faab9ccad50e343e8f91834ee87771bcb2
4
+ data.tar.gz: 75cb855f9c40ea1d0d3186dc3282ad89e6054c1da576e8b9d5e5983a5b617a85
5
5
  SHA512:
6
- metadata.gz: 89d6e827e31cb60be2c30fbc464360bc355b0381ec653874535125da81fa596e7c2ec43134183417c8ff29ce631737e0ce2bb79ff1876354a67a45fd1eccbef6
7
- data.tar.gz: 5e551b04a716d10745cd913af183ba1997c705f16edb39e925c2cdff59b4905a39b113c333fa2f1b927179eef58383be150c6012f31627e5f14776830f6dacf5
6
+ metadata.gz: d26b6339a494b85458791b95b52302456f34930d1ea9dd445fdb24b3eda589602ffb5088bfa2ec8c37a71238317c82759dd07b30f0ae4975c2b295bc3ca6e5eb
7
+ data.tar.gz: 6d1ca0c3c8e6946c2a40cbf3939ab6da98e6f6004a600f09b5096d8a2dc0e65643d0b2028d80c5ce91ca5d7f29998c1cec34d4989b6d01d9c070008dfea1e1d0
data/CHANGELOG.md CHANGED
@@ -1,12 +1,29 @@
1
1
  # Change Log
2
2
 
3
+ ## v2.1.0 (2023-09-16)
4
+
5
+ [Implements](https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2/pull/19) support for custom policies when using Microsoft Azure AD - thanks @stevenchanin!
6
+
7
+ ## v2.0.2 (2023-03-31)
8
+
9
+ [Fixes](https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2/pull/16) inability to override prompt in authorisation parameters - thanks @lamroger!
10
+
11
+ ## v2.0.1 (2023-01-11)
12
+
13
+ Renames:
14
+
15
+ * RIPGlobal -> RIPAGlobal
16
+ * Omniauth -> OmniAuth
17
+
18
+ _No functional change._
19
+
3
20
  ## v2.0.0 (2022-09-14)
4
21
 
5
22
  Makes compatible with OmniAuth 2 and requires it.
6
23
 
7
24
  Note: https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2/pull/6 for reasoning - Thanks @jessieay
8
25
 
9
- _Major version bump as no longer supports Omniauth 1._
26
+ _Major version bump as no longer supports OmniAuth 1._
10
27
 
11
28
  ## v1.0.0 (2020-09-25)
12
29
 
@@ -21,7 +38,7 @@ Removes use of the https://graph.microsoft.com/v1.0/me API.
21
38
  - All the data provided in `info` exists in the JWT anyway, so this
22
39
  cuts down on API calls
23
40
 
24
- * Conforms to the Omniauth Auth Hash Schema (1.0 and later) - see:
41
+ * Conforms to the OmniAuth Auth Hash Schema (1.0 and later) - see:
25
42
  https://github.com/omniauth/omniauth/wiki/Auth-Hash-Schema
26
43
 
27
44
  - Expose `raw_info`
data/CODE_OF_CONDUCT.md CHANGED
@@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
55
55
  ## Enforcement
56
56
 
57
57
  Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
- reported by contacting the project team at dev@ripglobal.com. All
58
+ reported by contacting the project team at dev@ripaglobal.com. All
59
59
  complaints will be reviewed and investigated and will result in a response that
60
60
  is deemed necessary and appropriate to the circumstances. The project team is
61
61
  obligated to maintain confidentiality with regard to the reporter of an incident.
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # Omniauth::Azure::Activedirectory::V2
1
+ # OmniAuth::Azure::Activedirectory::V2
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/omniauth-azure-activedirectory-v2.svg)](https://badge.fury.io/rb/omniauth-azure-activedirectory-v2)
4
- [![Build Status](https://travis-ci.org/RIPGlobal/omniauth-azure-activedirectory-v2.svg)](https://travis-ci.org/RIPGlobal/omniauth-azure-activedirectory-v2)
5
- [![License](https://img.shields.io/github/license/RIPGlobal/omniauth-azure-activedirectory-v2.svg)](LICENSE.md)
4
+ [![Build Status](https://app.travis-ci.com/RIPAGlobal/omniauth-azure-activedirectory-v2.svg?branch=master)](https://app.travis-ci.com/github/RIPAGlobal/omniauth-azure-activedirectory-v2)
5
+ [![License](https://img.shields.io/github/license/RIPAGlobal/omniauth-azure-activedirectory-v2.svg)](LICENSE.md)
6
6
 
7
7
  OAuth 2 authentication with [Azure ActiveDirectory's V2 API](https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-overview). Rationale:
8
8
 
@@ -35,15 +35,152 @@ Or install it yourself as:
35
35
 
36
36
  ## Usage
37
37
 
38
- See https://github.com/marknadig/omniauth-azure-oauth2 for background information.
38
+ Please start by reading https://github.com/marknadig/omniauth-azure-oauth2 for basic configuration and background information. Note that with this gem, you must use strategy name `azure_activedirectory_v2` rather than `azure_oauth2`. Additional configuration information is given below.
39
+
40
+ ### Configuration
41
+
42
+ #### With `OmniAuth::Builder`
43
+
44
+ You can do something like this for a static / fixed configuration:
45
+
46
+ ```ruby
47
+ use OmniAuth::Builder do
48
+ provider(
49
+ :azure_activedirectory_v2,
50
+ {
51
+ client_id: ENV['AZURE_CLIENT_ID'],
52
+ client_secret: ENV['AZURE_CLIENT_SECRET']
53
+ }
54
+ )
55
+ end
56
+ ```
57
+
58
+ ...or, if using a custom provider class (called `YouTenantProvider` in this example):
59
+
60
+ ```ruby
61
+ use OmniAuth::Builder do
62
+ provider(
63
+ :azure_activedirectory_v2,
64
+ YouTenantProvider
65
+ )
66
+ end
67
+ ```
68
+
69
+ #### With Devise
70
+
71
+ In your `config/initializers/devise.rb` file you can do something like this for a static / fixed configuration:
72
+
73
+ ```ruby
74
+ config.omniauth(
75
+ :azure_activedirectory_v2,
76
+ {
77
+ client_id: ENV['AZURE_CLIENT_ID'],
78
+ client_secret: ENV['AZURE_CLIENT_SECRET']
79
+ }
80
+ )
81
+ ```
82
+
83
+ ...or, if using a custom provider class (called `YouTenantProvider` in this example):
84
+
85
+ ```ruby
86
+ config.omniauth(
87
+ :azure_activedirectory_v2,
88
+ YouTenantProvider
89
+ )
90
+ ```
91
+
92
+ ### Configuration options
93
+
94
+ All of the items listed below are optional, unless noted otherwise. They can be provided either in a static configuration Hash as shown in examples above, or via *read accessor instance methods* in a provider class (more on this later).
95
+
96
+ | Option | Use |
97
+ | ------ | --- |
98
+ | `client_id` | **Mandatory.** Client ID for the 'application' (integration) configured on the Azure side. Found via the Azure UI. |
99
+ | `client_secret` | **Mandatory.** Client secret for the 'application' (integration) configured on the Azure side. Found via the Azure UI. |
100
+ | `base_azure_url` | Location of Azure login page, for specialised requirements; default is `OmniAuth::Strategies::AzureActivedirectoryV2::BASE_AZURE_URL` (at the time of writing, this is `https://login.microsoftonline.com`). |
101
+ | `tenant_id` | _Azure_ tenant ID for multi-tenanted use. Default is `common`. Forms part of the Azure OAuth URL - `{base}/{tenant_id}/oauth2/v2.0/...` |
102
+ | `custom_policy` | _Azure_ custom policy. Default is nil. Forms part of the Azure Token URL - `{base}/{tenant_id}/{custom_policy}/oauth2/v2.0/...` |
103
+ | `authorize_params` | Additional parameters passed as URL query data in the initial OAuth redirection to Microsoft. See below for more. Empty Hash default. |
104
+ | `domain_hint` | If defined, sets (overwriting, if already present) `domain_hint` inside `authorize_params`. Default `nil` / none. |
105
+ | `scope` | If defined, sets (overwriting, if already present) `scope` inside `authorize_params`. Default is `OmniAuth::Strategies::AzureActivedirectoryV2::DEFAULT_SCOPE` (at the time of writing, this is `'openid profile email'`). |
106
+
107
+ 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.
108
+
109
+ #### Explaining `custom_policy`
110
+
111
+ In the documentation for [requesting a token](https://learn.microsoft.com/en-us/azure/active-directory-b2c/access-tokens#request-a-token), Microsoft indicate that they want the name of custom policies to be given in the URL rather than in the body of the request:
112
+
113
+ ```
114
+ POST <tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/token
115
+ ```
116
+
117
+ When the underlying `oath2` gem creates the request for getting a token via POST, it places all `params` (which would include anything you've provided in the normal configuration to name your custom policy) in the `body` of the request. Unfortunately, Microsoft ignores custom policies in the body and only looks for them in the URL.
118
+
119
+ If you set a `custom_policy` in your configuration, it will be included in the URL between the `tenant_id` and the remaining parts of the path (`/oauth2/v2.0/token`).
120
+
121
+ #### Explaining `authorize_params`
122
+
123
+ The `authorize_params` hash-like object contains key-value pairs which are transformed into URL query string data and added to existing standard OAuth query data in the URL used for the initial redirection from your web site, to the Microsoft Azure AD login page, at the start of OAuth flow. You can find these listed some way down the table just below an OAuth URL example at:
124
+
125
+ * https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow#code-try-1
126
+
127
+ ...looking for in particular items from `prompt` onwards.
128
+
129
+ #### Dynamic options via a custom provider class
130
+
131
+ Documentation mentioned earlier at https://github.com/marknadig/omniauth-azure-oauth2#usage gives an example of setting tenant ID dynamically via a custom provider class. We can also use that class in other ways. For example, let's rewrite it thus:
132
+
133
+ ```ruby
134
+ class YouTenantProvider
135
+ def initialize(strategy)
136
+ @strategy = strategy
137
+ end
138
+
139
+ def client_id
140
+ ENV['AZURE_CLIENT_ID']
141
+ end
142
+
143
+ def client_secret
144
+ ENV['AZURE_CLIENT_SECRET']
145
+ end
146
+
147
+ def authorize_params
148
+ ap = {}
149
+
150
+ if @strategy.request && @strategy.request.params['login_hint']
151
+ ap['login_hint'] = @strategy.request.params['login_hint']
152
+ end
153
+
154
+ return ap
155
+ end
156
+ end
157
+ ```
158
+
159
+ In this example, we're providing custom `authorize_params`. You can just return a standard Ruby Hash here, using lower case String or Symbol keys. The `strategy` value given to the initializer is an instance of [`OmniAuth::StrategiesAzureActivedirectoryV2`](https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2/blob/master/lib/omniauth/strategies/azure_activedirectory_v2.rb) which is a subclass of [`OmniAuth::Strategies::OAuth2`](https://www.rubydoc.info/gems/omniauth-oauth2/1.8.0/OmniAuth/Strategies/OAuth2), but that's not all that helpful! What's more useful is to know that **the Rails `request` object is available via `@strategy.request` and, likewise, the session store via `@strategy.session`**. This gives you a lot of flexibility for responding to an inbound request or user session, varying the parameters used for the Azure OAuth flow.
160
+
161
+ In method `#authorize_params` above, the request object is used to look for a `login_hint` query string entry, set in whichever view(s) is/are presented by your application for use when your users need to be redirected to the OmniAuth controller in order to kick off OAuth with Azure. The value is copied into the `authorize_params` Hash. Earlier, it was mentioned that there was a special case of `prompt` being pulled from the request URL query data, but that this could also be done via a custom provider - here, you can see how; just check `@strategy.request.params['prompt']` and copy that into `authorize_params` if preset.
162
+
163
+ > **NB:** Naming things is hard! The predecessor gem used the name `YouTenantProvider` since it was focused on custom tenant provision, but if using this in a more generic way, perhaps consider a more generic name such as, say, `CustomOmniAuthAzureProvider`.
39
164
 
40
165
 
41
166
 
42
167
  ## Contributing
43
168
 
44
- Bug reports and pull requests are welcome on GitHub at https://github.com/RIPGlobal/omniauth-azure-activedirectory-v2. This project is intended to be a safe, welcoming space for collaboration so contributors must adhere to the [code of conduct](https://github.com/RIPGlobal/omniauth-azure-activedirectory-v2/blob/master/CODE_OF_CONDUCT.md).
169
+ Bug reports and pull requests are welcome on GitHub at https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2. This project is intended to be a safe, welcoming space for collaboration so contributors must adhere to the [code of conduct](https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2/blob/master/CODE_OF_CONDUCT.md).
170
+
171
+ ### Getting running
172
+
173
+ * Fork the repository
174
+ * Check out your fork
175
+ * `cd` into the repository
176
+ * `bin/setup`
177
+ * `bundle exec rspec` to make sure all the tests run
45
178
 
179
+ ### Making changes
46
180
 
181
+ * Make your change
182
+ * Add tests and check that `bundle exec rspec` still runs successfully
183
+ * For new features (rather than bug fixes), update `README.md` with details
47
184
 
48
185
  ## License
49
186
 
@@ -53,4 +190,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
53
190
 
54
191
  ## Code of Conduct
55
192
 
56
- Everyone interacting in this project's codebases, issue trackers, chat rooms and mailing lists must follow the [code of conduct](https://github.com/RIPGlobal/omniauth-azure-activedirectory-v2/blob/master/CODE_OF_CONDUCT.md).
193
+ Everyone interacting in this project's codebases, issue trackers, chat rooms and mailing lists must follow the [code of conduct](https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2/blob/master/CODE_OF_CONDUCT.md).
@@ -1,9 +1,9 @@
1
- module Omniauth
1
+ module OmniAuth
2
2
  module Azure
3
3
  module Activedirectory
4
4
  module V2
5
- VERSION = "2.0.0"
6
- DATE = "2022-09-14"
5
+ VERSION = "2.1.0"
6
+ DATE = "2023-09-16"
7
7
  end
8
8
  end
9
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'omniauth-oauth2'
2
4
 
3
5
  module OmniAuth
@@ -14,41 +16,60 @@ module OmniAuth
14
16
  args [:tenant_provider]
15
17
 
16
18
  def client
17
- if options.tenant_provider
18
- provider = options.tenant_provider.new(self)
19
+ provider = if options.tenant_provider
20
+ options.tenant_provider.new(self)
19
21
  else
20
- provider = options # if pass has to config, get mapped right on to options
22
+ options
21
23
  end
22
24
 
23
25
  options.client_id = provider.client_id
24
26
  options.client_secret = provider.client_secret
25
27
  options.tenant_id =
26
- provider.respond_to?(:tenant_id) ? provider.tenant_id : 'common'
28
+ provider.respond_to?(:tenant_id) ? provider.tenant_id : 'common'
27
29
  options.base_azure_url =
28
- provider.respond_to?(:base_azure_url) ? provider.base_azure_url : BASE_AZURE_URL
30
+ provider.respond_to?(:base_azure_url) ? provider.base_azure_url : BASE_AZURE_URL
31
+
32
+ if provider.respond_to?(:authorize_params)
33
+ options.authorize_params = provider.authorize_params
34
+ end
29
35
 
30
- options.authorize_params = provider.authorize_params if provider.respond_to?(:authorize_params)
31
- options.authorize_params.domain_hint = provider.domain_hint if provider.respond_to?(:domain_hint) && provider.domain_hint
32
- options.authorize_params.prompt = request.params['prompt'] if defined? request && request.params['prompt']
33
- options.authorize_params.scope = (provider.scope if provider.respond_to?(:scope) && provider.scope) || DEFAULT_SCOPE
36
+ if provider.respond_to?(:domain_hint) && provider.domain_hint
37
+ options.authorize_params.domain_hint = provider.domain_hint
38
+ end
39
+
40
+ if defined?(request) && request.params['prompt']
41
+ options.authorize_params.prompt = request.params['prompt']
42
+ end
43
+
44
+ options.authorize_params.scope = if provider.respond_to?(:scope) && provider.scope
45
+ provider.scope
46
+ else
47
+ DEFAULT_SCOPE
48
+ end
49
+
50
+ options.custom_policy =
51
+ provider.respond_to?(:custom_policy) ? provider.custom_policy : nil
34
52
 
35
53
  options.client_options.authorize_url = "#{options.base_azure_url}/#{options.tenant_id}/oauth2/v2.0/authorize"
36
- options.client_options.token_url = "#{options.base_azure_url}/#{options.tenant_id}/oauth2/v2.0/token"
54
+ options.client_options.token_url =
55
+ if options.custom_policy
56
+ "#{options.base_azure_url}/#{options.tenant_id}/#{options.custom_policy}/oauth2/v2.0/token"
57
+ else
58
+ "#{options.base_azure_url}/#{options.tenant_id}/oauth2/v2.0/token"
59
+ end
37
60
 
38
61
  super
39
62
  end
40
63
 
41
- uid {
42
- raw_info['oid']
43
- }
64
+ uid { raw_info['oid'] }
44
65
 
45
66
  info do
46
67
  {
47
- name: raw_info['name'],
48
- email: raw_info['email'] || raw_info['upn'],
49
- nickname: raw_info['unique_name'],
50
- first_name: raw_info['given_name'],
51
- last_name: raw_info['family_name']
68
+ name: raw_info['name'],
69
+ email: raw_info['email'] || raw_info['upn'],
70
+ nickname: raw_info['unique_name'],
71
+ first_name: raw_info['given_name'],
72
+ last_name: raw_info['family_name']
52
73
  }
53
74
  end
54
75
 
@@ -72,8 +93,16 @@ module OmniAuth
72
93
  #
73
94
  def raw_info
74
95
  if @raw_info.nil?
75
- id_token_data = ::JWT.decode(access_token.params['id_token'], nil, false).first rescue {}
76
- auth_token_data = ::JWT.decode(access_token.token, nil, false).first rescue {}
96
+ id_token_data = begin
97
+ ::JWT.decode(access_token.params['id_token'], nil, false).first
98
+ rescue StandardError
99
+ {}
100
+ end
101
+ auth_token_data = begin
102
+ ::JWT.decode(access_token.token, nil, false).first
103
+ rescue StandardError
104
+ {}
105
+ end
77
106
 
78
107
  id_token_data.merge!(auth_token_data)
79
108
  @raw_info = id_token_data
@@ -81,7 +110,6 @@ module OmniAuth
81
110
 
82
111
  @raw_info
83
112
  end
84
-
85
113
  end
86
114
  end
87
115
  end
@@ -9,13 +9,13 @@ require 'omniauth/azure_activedirectory_v2/version'
9
9
  #
10
10
  Gem::Specification.new do |s|
11
11
  s.name = 'omniauth-azure-activedirectory-v2'
12
- s.version = Omniauth::Azure::Activedirectory::V2::VERSION
13
- s.date = Omniauth::Azure::Activedirectory::V2::DATE
12
+ s.version = OmniAuth::Azure::Activedirectory::V2::VERSION
13
+ s.date = OmniAuth::Azure::Activedirectory::V2::DATE
14
14
  s.summary = 'OAuth 2 authentication with the Azure ActiveDirectory V2 API.'
15
- s.authors = [ 'RIP Global' ]
16
- s.email = [ 'dev@ripglobal.com' ]
15
+ s.authors = [ 'RIPA Global' ]
16
+ s.email = [ 'dev@ripaglobal.com' ]
17
17
  s.licenses = [ 'MIT' ]
18
- s.homepage = 'https://github.com/RIPGlobal/omniauth-azure-activedirectory-v2'
18
+ s.homepage = 'https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2'
19
19
 
20
20
  s.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
21
21
  s.require_paths = ['lib']
@@ -39,10 +39,10 @@ Gem::Specification.new do |s|
39
39
  }
40
40
 
41
41
  s.metadata = {
42
- 'homepage_uri' => 'https://www.ripglobal.com/',
43
- 'bug_tracker_uri' => 'https://github.com/RIPGlobal/omniauth-azure-activedirectory-v2/issues/',
44
- 'changelog_uri' => 'https://github.com/RIPGlobal/omniauth-azure-activedirectory-v2/blob/master/CHANGELOG.md',
45
- 'source_code_uri' => 'https://github.com/RIPGlobal/omniauth-azure-activedirectory-v2'
42
+ 'homepage_uri' => 'https://www.ripaglobal.com/',
43
+ 'bug_tracker_uri' => 'https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2/issues/',
44
+ 'changelog_uri' => 'https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2/blob/master/CHANGELOG.md',
45
+ 'source_code_uri' => 'https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2'
46
46
  }
47
47
 
48
48
  s.add_runtime_dependency('omniauth-oauth2', '~> 1.8')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-azure-activedirectory-v2
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - RIP Global
7
+ - RIPA Global
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-14 00:00:00.000000000 Z
11
+ date: 2023-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: omniauth-oauth2
@@ -26,7 +26,7 @@ dependencies:
26
26
  version: '1.8'
27
27
  description:
28
28
  email:
29
- - dev@ripglobal.com
29
+ - dev@ripaglobal.com
30
30
  executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
@@ -43,14 +43,14 @@ files:
43
43
  - lib/omniauth/azure_activedirectory_v2/version.rb
44
44
  - lib/omniauth/strategies/azure_activedirectory_v2.rb
45
45
  - omniauth-azure-activedirectory-v2.gemspec
46
- homepage: https://github.com/RIPGlobal/omniauth-azure-activedirectory-v2
46
+ homepage: https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2
47
47
  licenses:
48
48
  - MIT
49
49
  metadata:
50
- homepage_uri: https://www.ripglobal.com/
51
- bug_tracker_uri: https://github.com/RIPGlobal/omniauth-azure-activedirectory-v2/issues/
52
- changelog_uri: https://github.com/RIPGlobal/omniauth-azure-activedirectory-v2/blob/master/CHANGELOG.md
53
- source_code_uri: https://github.com/RIPGlobal/omniauth-azure-activedirectory-v2
50
+ homepage_uri: https://www.ripaglobal.com/
51
+ bug_tracker_uri: https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2/issues/
52
+ changelog_uri: https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2/blob/master/CHANGELOG.md
53
+ source_code_uri: https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2
54
54
  post_install_message:
55
55
  rdoc_options: []
56
56
  require_paths:
@@ -66,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  requirements: []
69
- rubygems_version: 3.3.7
69
+ rubygems_version: 3.4.4
70
70
  signing_key:
71
71
  specification_version: 4
72
72
  summary: OAuth 2 authentication with the Azure ActiveDirectory V2 API.