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 +4 -4
- data/CHANGELOG.md +19 -2
- data/CODE_OF_CONDUCT.md +1 -1
- data/README.md +143 -6
- data/lib/omniauth/azure_activedirectory_v2/version.rb +3 -3
- data/lib/omniauth/strategies/azure_activedirectory_v2.rb +49 -21
- data/omniauth-azure-activedirectory-v2.gemspec +9 -9
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82d3c5122483452eb3e9b37dba4ae4faab9ccad50e343e8f91834ee87771bcb2
|
4
|
+
data.tar.gz: 75cb855f9c40ea1d0d3186dc3282ad89e6054c1da576e8b9d5e5983a5b617a85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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
|
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@
|
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
|
-
#
|
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.
|
5
|
-
[![License](https://img.shields.io/github/license/
|
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
|
-
|
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/
|
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/
|
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,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
|
-
|
19
|
+
provider = if options.tenant_provider
|
20
|
+
options.tenant_provider.new(self)
|
19
21
|
else
|
20
|
-
|
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
|
-
|
28
|
+
provider.respond_to?(:tenant_id) ? provider.tenant_id : 'common'
|
27
29
|
options.base_azure_url =
|
28
|
-
|
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
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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 =
|
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
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
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
|
76
|
-
|
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 =
|
13
|
-
s.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 = [ '
|
16
|
-
s.email = [ 'dev@
|
15
|
+
s.authors = [ 'RIPA Global' ]
|
16
|
+
s.email = [ 'dev@ripaglobal.com' ]
|
17
17
|
s.licenses = [ 'MIT' ]
|
18
|
-
s.homepage = 'https://github.com/
|
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.
|
43
|
-
'bug_tracker_uri' => 'https://github.com/
|
44
|
-
'changelog_uri' => 'https://github.com/
|
45
|
-
'source_code_uri' => 'https://github.com/
|
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.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- RIPA Global
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
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@
|
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/
|
46
|
+
homepage: https://github.com/RIPAGlobal/omniauth-azure-activedirectory-v2
|
47
47
|
licenses:
|
48
48
|
- MIT
|
49
49
|
metadata:
|
50
|
-
homepage_uri: https://www.
|
51
|
-
bug_tracker_uri: https://github.com/
|
52
|
-
changelog_uri: https://github.com/
|
53
|
-
source_code_uri: https://github.com/
|
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.
|
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.
|