omniauth-mpassid 0.5.0 → 0.6.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 +4 -4
- data/README.md +97 -63
- data/lib/omniauth/strategies/mpassid.rb +110 -113
- data/lib/omniauth-mpassid/test/certificate_generator.rb +2 -2
- data/lib/omniauth-mpassid/test/utility.rb +1 -1
- data/lib/omniauth-mpassid/version.rb +1 -1
- metadata +6 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 17b65779d78646dc1de8ab9199d37fc0493020fd8a6d3b36e2b4badc859622c6
|
|
4
|
+
data.tar.gz: 6ba237b13f26a22109971309d64478b836e8e8e85ab2855b8f39ef7ac82bbd72
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 06b3e8aaaa13509e29bce1586b8197fa62933982707263145e3047878a7800b218cc141874e80cc51c6b1ecf1466f7742b9d3604721a047e44d31052785222f8
|
|
7
|
+
data.tar.gz: 6eae3c513b774c1fa97241cbb7d4122d4054afe6716e7b8bdefc5aa8fa00d258e2a9a9c27adb9296b972cb394f84729e4d59ce5a7fd11028e47e9c52b4988859
|
data/README.md
CHANGED
|
@@ -109,12 +109,11 @@ The user's personal information transmitted from MPASSid can be found under
|
|
|
109
109
|
the `:saml_attributes` key in the OmniAuth extra hash described above.
|
|
110
110
|
|
|
111
111
|
This attributes hash will contain the keys described in this following
|
|
112
|
-
sub-sections.
|
|
113
|
-
MPASSid's own documentation but are available at least in some SAML responses.
|
|
112
|
+
sub-sections.
|
|
114
113
|
|
|
115
114
|
See also the MPASSid data models documentation for more information:
|
|
116
115
|
|
|
117
|
-
https://wiki.eduuni.fi/display/
|
|
116
|
+
https://wiki.eduuni.fi/display/OPHPALV/MPASSid%3An+tietomalli
|
|
118
117
|
|
|
119
118
|
The attributes can be either single or multi type defining whether they can
|
|
120
119
|
have a single or multiple values. The single type values are strings and multi
|
|
@@ -128,15 +127,15 @@ is `nil` for both types.
|
|
|
128
127
|
- SAML FriendlyName: givenName
|
|
129
128
|
- Type: Single (`String`)
|
|
130
129
|
|
|
131
|
-
The
|
|
130
|
+
The given name of the user.
|
|
132
131
|
|
|
133
|
-
#### `:
|
|
132
|
+
#### `:first_name`
|
|
134
133
|
|
|
135
|
-
- SAML URI:
|
|
136
|
-
- SAML FriendlyName:
|
|
134
|
+
- SAML URI: urn:mpass.id:nickname
|
|
135
|
+
- SAML FriendlyName: nickname
|
|
137
136
|
- Type: Single (`String`)
|
|
138
137
|
|
|
139
|
-
|
|
138
|
+
The first name / calling name / nickname of the user.
|
|
140
139
|
|
|
141
140
|
#### `:last_name`
|
|
142
141
|
|
|
@@ -146,39 +145,45 @@ All the first/given names of the user.
|
|
|
146
145
|
|
|
147
146
|
The last/family name of the user.
|
|
148
147
|
|
|
149
|
-
#### `:
|
|
148
|
+
#### `:provider_info`
|
|
150
149
|
|
|
151
|
-
- SAML URI: urn:mpass.id:
|
|
152
|
-
- SAML FriendlyName:
|
|
153
|
-
- Type: Multi (`Array
|
|
150
|
+
- SAML URI: urn:mpass.id:educationProviderInfo
|
|
151
|
+
- SAML FriendlyName: mpassEducationProviderInfo
|
|
152
|
+
- Type: Multi (`Array<String>`)
|
|
154
153
|
|
|
155
|
-
|
|
154
|
+
Information about the educational provider, each value contains multiple fields
|
|
155
|
+
separated with a semicolon (`;`) character.
|
|
156
156
|
|
|
157
|
-
|
|
157
|
+
For instance `1.2.246.562.10.494695390410;Virallinen nimi`.
|
|
158
158
|
|
|
159
|
-
|
|
159
|
+
The description of the fields:
|
|
160
160
|
|
|
161
|
-
|
|
161
|
+
1. The educational provider's OID as specified at the link below (`KOULUTUSTOIMIJA`)
|
|
162
|
+
2. The educational provider's name as specified at the link below
|
|
162
163
|
|
|
163
|
-
|
|
164
|
-
* urn:mpass.id:municipality
|
|
165
|
-
* urn:educloudalliance.org:municipality
|
|
166
|
-
- SAML FriendlyName: one of the following (first found attribute)
|
|
167
|
-
* N/A
|
|
168
|
-
* ecaMunicipality
|
|
169
|
-
- Type: Multi (`Array`)
|
|
164
|
+
The OIDs and information for these OIDs can be found from:
|
|
170
165
|
|
|
171
|
-
|
|
166
|
+
https://virkailija.opintopolku.fi/organisaatio-service/swagger-ui/index.html
|
|
172
167
|
|
|
173
|
-
#### `:
|
|
168
|
+
#### `:school_info`
|
|
174
169
|
|
|
175
|
-
- SAML URI: urn:mpass.id:
|
|
176
|
-
- SAML FriendlyName:
|
|
177
|
-
- Type: Multi (`Array
|
|
170
|
+
- SAML URI: urn:mpass.id:schoolInfo
|
|
171
|
+
- SAML FriendlyName: mpassSchoolInfo
|
|
172
|
+
- Type: Multi (`Array<String>`)
|
|
173
|
+
|
|
174
|
+
Information about the school, each value contains multiple fields separated with
|
|
175
|
+
a semicolon (`;`) character.
|
|
176
|
+
|
|
177
|
+
The values are provided in both of the following formats as separate values:
|
|
178
|
+
|
|
179
|
+
- `30076;Mansikkalan testi peruskoulu`
|
|
180
|
+
- `1.2.246.562.99.00000000002;Mansikkalan testi peruskoulu`
|
|
178
181
|
|
|
179
|
-
|
|
182
|
+
##### First format
|
|
180
183
|
|
|
181
|
-
|
|
184
|
+
The first value format specifies the national educational institution code as
|
|
185
|
+
the first column separated with a semicolon (`;`) as specified at the national
|
|
186
|
+
educational institution registry.
|
|
182
187
|
|
|
183
188
|
For the list of codes, see:
|
|
184
189
|
|
|
@@ -189,37 +194,57 @@ An example for a single school code (04647), JSON format:
|
|
|
189
194
|
|
|
190
195
|
https://virkailija.opintopolku.fi/koodisto-service/rest/codeelement/oppilaitosnumero_04647
|
|
191
196
|
|
|
192
|
-
|
|
197
|
+
##### Second format
|
|
193
198
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
199
|
+
The second value format specifies the OID of the educational institution as
|
|
200
|
+
the first column separated with a semicolon (`;`). These values are specified
|
|
201
|
+
at (filter with `OPPILAITOS`):
|
|
197
202
|
|
|
198
|
-
|
|
203
|
+
https://virkailija.opintopolku.fi/organisaatio-service/swagger-ui/index.html
|
|
199
204
|
|
|
200
|
-
#### `:
|
|
205
|
+
#### `:class_level`
|
|
201
206
|
|
|
202
|
-
- SAML URI:
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
* ecaGroup
|
|
208
|
-
- Type: Multi (`Array`)
|
|
207
|
+
- SAML URI: urn:mpass.id:classLevel
|
|
208
|
+
- SAML FriendlyName: N/A
|
|
209
|
+
- Type: Single (`String`)
|
|
210
|
+
|
|
211
|
+
The class level information (0-10) of the authenticated user.
|
|
209
212
|
|
|
210
|
-
|
|
213
|
+
For instance 8 or 3.
|
|
211
214
|
|
|
212
|
-
For
|
|
215
|
+
For further information, see:
|
|
213
216
|
|
|
214
|
-
|
|
217
|
+
https://www.stat.fi/meta/kas/vuosiluokka.html
|
|
218
|
+
|
|
219
|
+
This information is available for pre-primary education and comprehensive
|
|
220
|
+
education students.
|
|
221
|
+
|
|
222
|
+
This information is not available for secondary level students (upper secondary
|
|
223
|
+
education or vocational education).
|
|
224
|
+
|
|
225
|
+
#### `:learning_materials_charge`
|
|
215
226
|
|
|
216
227
|
- SAML URI: urn:mpass.id:classLevel
|
|
217
228
|
- SAML FriendlyName: N/A
|
|
218
|
-
- Type: Multi (`Array
|
|
229
|
+
- Type: Multi (`Array<String>`)
|
|
219
230
|
|
|
220
|
-
|
|
231
|
+
Specifies for secondary level education pupils whether their learning materials
|
|
232
|
+
are paid or not, each value contains multiple fields separated with a semicolon
|
|
233
|
+
(`;`) character.
|
|
221
234
|
|
|
222
|
-
|
|
235
|
+
The values are provided in both of the following formats as separate values:
|
|
236
|
+
|
|
237
|
+
- `0;00000`
|
|
238
|
+
- `0;1.2.246.562.99.00000000003`
|
|
239
|
+
|
|
240
|
+
Similarly to the `:school_info` field, the values are provided with the national
|
|
241
|
+
educational institution code as well as the educational institution's OID.
|
|
242
|
+
|
|
243
|
+
The first column specifies the value for the field which is explained as
|
|
244
|
+
follows:
|
|
245
|
+
|
|
246
|
+
- `0` = Learning material is free for the pupil
|
|
247
|
+
- `1` = Learning material is paid for the pupil
|
|
223
248
|
|
|
224
249
|
#### `:role`
|
|
225
250
|
|
|
@@ -229,33 +254,34 @@ For instance 8 or 3.
|
|
|
229
254
|
- SAML FriendlyName: one of the following (first found attribute)
|
|
230
255
|
* N/A
|
|
231
256
|
* ecaStructuredRole
|
|
232
|
-
- Type: Multi (`Array
|
|
257
|
+
- Type: Multi (`Array<String>`)
|
|
233
258
|
|
|
234
259
|
The roles of the user in four parts, divided with a semicolon (;) character.
|
|
235
260
|
First municipality, followed by school code, group and role in the group.
|
|
236
261
|
|
|
237
|
-
For instance
|
|
262
|
+
For instance `1.2.246.562.99.00000000001;00000;1A;Oppilas;1;1.2.246.562.99.00000000003;`.
|
|
238
263
|
|
|
239
|
-
|
|
264
|
+
Each value consists of the following fields:
|
|
240
265
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
266
|
+
1. Educational provider OID (e.g. `1.2.246.562.99.00000000001`)
|
|
267
|
+
2. National educational institution code (e.g. `00000`)
|
|
268
|
+
3. Class or group information of the pupil (e.g. `1A`)
|
|
269
|
+
4. Role of the user (e.g. `Oppilas`)
|
|
270
|
+
5. Role code of the user (e.g. `1`)
|
|
271
|
+
6. Educational institution OID (e.g. `1.2.246.562.99.00000000003`)
|
|
272
|
+
7. The office / branch OID (similar format as other OIDs, can be also empty)
|
|
244
273
|
|
|
245
|
-
|
|
274
|
+
The OIDs for the educational provider (`KOULUTUSTOIMIJA`), educational
|
|
275
|
+
institution (`OPPILAITOS`) and office / branch (`TOIMIPISTE`) can be found from:
|
|
246
276
|
|
|
247
|
-
|
|
277
|
+
https://virkailija.opintopolku.fi/organisaatio-service/swagger-ui/index.html
|
|
248
278
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
#### `:funet_person_learner_id` (undocumented)
|
|
279
|
+
#### `:learner_id`
|
|
252
280
|
|
|
253
281
|
- SAML URI: urn:oid:1.3.6.1.4.1.16161.1.1.27
|
|
254
|
-
- SAML FriendlyName:
|
|
282
|
+
- SAML FriendlyName: learnerId
|
|
255
283
|
- Type: Single (`String`)
|
|
256
284
|
|
|
257
|
-
NOTE: This attribute is undocumented by MPASSid.
|
|
258
|
-
|
|
259
285
|
11-digit identifier, which may be used to identify a person while storing,
|
|
260
286
|
managing or transferring personal data.
|
|
261
287
|
|
|
@@ -263,6 +289,14 @@ See:
|
|
|
263
289
|
|
|
264
290
|
https://wiki.eduuni.fi/display/CSCHAKA/funetEduPersonSchema2dot2#funetEduPersonSchema2dot2-funetEduPersonLearnerId
|
|
265
291
|
|
|
292
|
+
#### `:original_issuer`
|
|
293
|
+
|
|
294
|
+
Information about the user's home organization that is relying the information
|
|
295
|
+
to MPASSid. This information is added by the Finnish National Agency for
|
|
296
|
+
Education.
|
|
297
|
+
|
|
298
|
+
For instance `1.2.246.562.99.00000000001`.
|
|
299
|
+
|
|
266
300
|
## License
|
|
267
301
|
|
|
268
302
|
MIT, see [LICENSE](LICENSE).
|
|
@@ -10,6 +10,12 @@ module OmniAuth
|
|
|
10
10
|
# :test - MPASSid test environment
|
|
11
11
|
option :mode, :production
|
|
12
12
|
|
|
13
|
+
# The certificate file to define the certificate.
|
|
14
|
+
option :certificate_file, nil
|
|
15
|
+
|
|
16
|
+
# The private key file to define the private key.
|
|
17
|
+
option :private_key_file, nil
|
|
18
|
+
|
|
13
19
|
# Defines the lang parameters to check from the request phase request
|
|
14
20
|
# parameters. A valid language will be added to the IdP sign in redirect
|
|
15
21
|
# URL as the last parameter (with the name `lang` as expected by
|
|
@@ -33,44 +39,41 @@ module OmniAuth
|
|
|
33
39
|
|
|
34
40
|
# The request attributes for MPASSid
|
|
35
41
|
option :request_attributes, [
|
|
36
|
-
# The
|
|
37
|
-
# identifier for identifying the user. NOTE: will change if the user
|
|
38
|
-
# moves to another user registry.
|
|
39
|
-
# (single value)
|
|
40
|
-
{
|
|
41
|
-
name: 'urn:mpass.id:uid',
|
|
42
|
-
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
43
|
-
friendly_name: 'mpassUsername'
|
|
44
|
-
},
|
|
45
|
-
# Funet EDU person learner ID
|
|
42
|
+
# The last/family name of the user.
|
|
46
43
|
# (single value)
|
|
47
44
|
{
|
|
48
|
-
name: 'urn:oid:
|
|
45
|
+
name: 'urn:oid:2.5.4.4',
|
|
49
46
|
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
50
|
-
friendly_name: '
|
|
47
|
+
friendly_name: 'sn'
|
|
51
48
|
},
|
|
52
|
-
# The
|
|
49
|
+
# The given name of the user.
|
|
53
50
|
# (single value)
|
|
54
51
|
{
|
|
55
52
|
name: 'urn:oid:2.5.4.42',
|
|
56
53
|
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
57
54
|
friendly_name: 'givenName'
|
|
58
55
|
},
|
|
59
|
-
#
|
|
56
|
+
# The first name/nickname of the user (calling name / kutsumanimi).
|
|
60
57
|
# (single value)
|
|
61
58
|
{
|
|
62
|
-
name: '
|
|
59
|
+
name: 'urn:mpass.id:nickname',
|
|
63
60
|
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
64
|
-
friendly_name: '
|
|
61
|
+
friendly_name: 'nickname'
|
|
65
62
|
},
|
|
66
|
-
# The
|
|
63
|
+
# The unique identifier of the authenticated user. Currently recommended
|
|
64
|
+
# identifier for identifying the user. NOTE: will change if the user
|
|
65
|
+
# moves to another user registry.
|
|
67
66
|
# (single value)
|
|
68
67
|
{
|
|
69
|
-
name: 'urn:
|
|
68
|
+
name: 'urn:mpass.id:uid',
|
|
70
69
|
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
71
|
-
friendly_name: '
|
|
70
|
+
friendly_name: 'mpassUsername'
|
|
72
71
|
},
|
|
73
|
-
#
|
|
72
|
+
# Combination of the school code and official name of the educational
|
|
73
|
+
# institution separated with semicolon.
|
|
74
|
+
# For instance: 30076;Mansikkalan testi peruskoulu AND 1.2.246.562.99.00000000002;Mansikkalan testi peruskoulu
|
|
75
|
+
#
|
|
76
|
+
# Contains the school code of the authenticated user. See
|
|
74
77
|
# https://virkailija.opintopolku.fi/koodisto-service/rest/json/oppilaitosnumero/koodi
|
|
75
78
|
# (JSON format)
|
|
76
79
|
# https://virkailija.opintopolku.fi/koodisto-service/rest/oppilaitosnumero/koodi
|
|
@@ -79,93 +82,77 @@ module OmniAuth
|
|
|
79
82
|
# https://virkailija.opintopolku.fi/koodisto-service/rest/codeelement/oppilaitosnumero_04647
|
|
80
83
|
# for school code 04647.
|
|
81
84
|
# (multi value)
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
friendly_name: 'mpassSchoolCode'
|
|
86
|
-
},
|
|
87
|
-
# The human-readable name of the school of the authenticated user.
|
|
88
|
-
# (multi value)
|
|
89
|
-
{
|
|
90
|
-
name: 'urn:mpass.id:school',
|
|
91
|
-
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
92
|
-
friendly_name: 'school'
|
|
93
|
-
},
|
|
94
|
-
# Combination of the school code and official name of the educational
|
|
95
|
-
# institution separated with semicolon.
|
|
96
|
-
# For instance: 00000;Tuntematon
|
|
85
|
+
#
|
|
86
|
+
# The OIDs for educational institution (`OPPILAITOS`) can be found from:
|
|
87
|
+
# https://virkailija.opintopolku.fi/organisaatio-service/swagger-ui/index.html
|
|
97
88
|
{
|
|
98
89
|
name: 'urn:mpass.id:schoolInfo',
|
|
99
90
|
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
100
91
|
friendly_name: 'mpassSchoolInfo'
|
|
101
92
|
},
|
|
102
|
-
# The class/group-information of the authenticated user.
|
|
103
|
-
# For instance: 8A or 3B.
|
|
104
|
-
# (multi value)
|
|
105
|
-
{
|
|
106
|
-
name: 'urn:mpass.id:class',
|
|
107
|
-
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
108
|
-
friendly_name: 'mpassClass'
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
name: 'urn:educloudalliance.org:group',
|
|
112
|
-
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
113
|
-
friendly_name: 'ecaGroup'
|
|
114
|
-
},
|
|
115
93
|
# The class/level-information of the authenticated user.
|
|
116
94
|
# For instance 8 or 3.
|
|
117
|
-
# (
|
|
95
|
+
# (single value)
|
|
118
96
|
{
|
|
119
97
|
name: 'urn:mpass.id:classLevel',
|
|
120
98
|
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
121
99
|
friendly_name: 'mpassClassLevel'
|
|
122
100
|
},
|
|
123
|
-
# The
|
|
124
|
-
# For instance
|
|
101
|
+
# The learning material charge.
|
|
102
|
+
# For instance 0;00000 AND 0;1.2.246.562.99.00000000003.
|
|
125
103
|
# (multi value)
|
|
126
104
|
{
|
|
127
|
-
name: 'urn:
|
|
105
|
+
name: 'urn:mpass.id:learningMaterialsCharge',
|
|
128
106
|
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
129
|
-
friendly_name: '
|
|
107
|
+
friendly_name: 'mpassLearningMaterialsCharge'
|
|
130
108
|
},
|
|
131
109
|
# The role of the user in four parts, divided with a semicolon (;)
|
|
132
110
|
# character. First educational provider's organization OID, followed by
|
|
133
|
-
# school code, group
|
|
134
|
-
#
|
|
111
|
+
# school code, group (e.g. the class), role in the group (e.g.
|
|
112
|
+
# "Oppilas"), the role code (e.g. "1"), the educational institution's
|
|
113
|
+
# OID and finally the office OID (can be undefined).
|
|
114
|
+
# For instance 1.2.246.562.99.00000000001;00000;1A;Oppilas;1;1.2.246.562.99.00000000003;
|
|
135
115
|
# (multi value)
|
|
136
116
|
#
|
|
137
|
-
# The educational providers
|
|
138
|
-
#
|
|
117
|
+
# The OIDs for educational providers (`KOULUTUSTOIMIJA`), educational
|
|
118
|
+
# institutions (`OPPILAITOS`) and offices/branches (`TOIMIPISTE`) can be
|
|
119
|
+
# found from:
|
|
120
|
+
# https://virkailija.opintopolku.fi/organisaatio-service/swagger-ui/index.html
|
|
121
|
+
#
|
|
122
|
+
# The test entries are in:
|
|
123
|
+
# https://github.com/Opetushallitus/aitu/blob/master/ttk-db/resources/db/migration/V12_0__oppilaitosten_puuttuvat_koulutustoimijat.sql
|
|
139
124
|
{
|
|
140
125
|
name: 'urn:mpass.id:role',
|
|
141
126
|
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
142
127
|
friendly_name: 'mpassRole'
|
|
143
128
|
},
|
|
144
|
-
#
|
|
145
|
-
# (
|
|
146
|
-
#
|
|
147
|
-
# The educational providers' organization OIDs can be found from:
|
|
148
|
-
# https://github.com/Opetushallitus/aitu/blob/master/ttk-db/resources/db/migration/V11_2__koulutustoimijat.sql
|
|
149
|
-
{
|
|
150
|
-
name: 'urn:mpass.id:educationProviderId',
|
|
151
|
-
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
152
|
-
friendly_name: 'mpassEducationProviderOid'
|
|
153
|
-
},
|
|
154
|
-
# The educational provider's human-readable name.
|
|
155
|
-
# (multi value)
|
|
129
|
+
# Funet EDU person learner ID
|
|
130
|
+
# (single value)
|
|
156
131
|
{
|
|
157
|
-
name: 'urn:
|
|
132
|
+
name: 'urn:oid:1.3.6.1.4.1.16161.1.1.27',
|
|
158
133
|
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
159
|
-
friendly_name: '
|
|
134
|
+
friendly_name: 'learnerId'
|
|
160
135
|
},
|
|
161
136
|
# Combination of the education provider's organisation-OID and official
|
|
162
137
|
# name. Separated by semicolon.
|
|
163
138
|
# For instance: 1.2.246.562.10.494695390410;Virallinen nimi
|
|
164
139
|
# (multi value)
|
|
140
|
+
#
|
|
141
|
+
# The OIDs for educational providers (`KOULUTUSTOIMIJA`) can be found
|
|
142
|
+
# from:
|
|
143
|
+
# https://virkailija.opintopolku.fi/organisaatio-service/swagger-ui/index.html
|
|
165
144
|
{
|
|
166
145
|
name: 'urn:mpass.id:educationProviderInfo',
|
|
167
146
|
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
168
147
|
friendly_name: 'mpassEducationProviderInfo'
|
|
148
|
+
},
|
|
149
|
+
# The relaying organization for the information.
|
|
150
|
+
# For instance: 1.2.246.562.10.00000000000
|
|
151
|
+
# (single value)
|
|
152
|
+
{
|
|
153
|
+
name: 'urn:mpass.id:originalIssuer',
|
|
154
|
+
name_format: 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
|
|
155
|
+
friendly_name: 'originalIssuer'
|
|
169
156
|
}
|
|
170
157
|
]
|
|
171
158
|
|
|
@@ -173,38 +160,43 @@ module OmniAuth
|
|
|
173
160
|
# https://github.com/omniauth/omniauth/wiki/Auth-Hash-Schema#schema-10-and-later
|
|
174
161
|
option(
|
|
175
162
|
:attribute_statements,
|
|
176
|
-
#
|
|
177
|
-
first_name: ['urn:oid:2.5.4.42'
|
|
178
|
-
last_name: ['urn:oid:2.5.4.4']
|
|
179
|
-
# The education provider (e.g. municipality) of the person (literal format in Finnish)
|
|
180
|
-
location: ['urn:mpass.id:educationProvider']
|
|
163
|
+
# First name/calling name or given name (in case first name/calling name is not found)
|
|
164
|
+
first_name: ['urn:mpass.id:nickname', 'urn:oid:2.5.4.42'],
|
|
165
|
+
last_name: ['urn:oid:2.5.4.4']
|
|
181
166
|
)
|
|
182
167
|
|
|
183
168
|
info do
|
|
184
169
|
# Generate the full name to the info hash
|
|
185
170
|
first_name = find_attribute_by(
|
|
186
171
|
[
|
|
187
|
-
'urn:
|
|
188
|
-
'
|
|
172
|
+
'urn:mpass.id:nickname',
|
|
173
|
+
'urn:oid:2.5.4.42'
|
|
189
174
|
]
|
|
190
175
|
)
|
|
191
176
|
last_name = find_attribute_by(['urn:oid:2.5.4.4'])
|
|
192
177
|
display_name = "#{first_name} #{last_name}".strip
|
|
193
|
-
display_name = nil if display_name.length.zero?
|
|
178
|
+
display_name = nil if display_name.length.zero? # rubocop:disable Style/ZeroLengthPredicate
|
|
194
179
|
|
|
195
180
|
found_attributes = [[:name, display_name]]
|
|
196
181
|
|
|
182
|
+
provider = find_attribute_by(['urn:mpass.id:educationProviderInfo'])
|
|
183
|
+
if provider
|
|
184
|
+
provider_parts = provider.split(';')
|
|
185
|
+
found_attributes << [:location, provider_parts[1]] if provider_parts[1]
|
|
186
|
+
end
|
|
187
|
+
|
|
197
188
|
# Default functionality from omniauth-saml
|
|
198
189
|
found_attributes += options.attribute_statements.map do |key, values|
|
|
199
190
|
attribute = find_attribute_by(values)
|
|
200
|
-
[key, attribute]
|
|
191
|
+
[key.to_sym, attribute]
|
|
201
192
|
end
|
|
202
193
|
|
|
203
|
-
|
|
194
|
+
found_attributes.to_h
|
|
204
195
|
end
|
|
205
196
|
|
|
206
197
|
option(
|
|
207
198
|
:security_settings,
|
|
199
|
+
authn_requests_signed: true,
|
|
208
200
|
digest_method: XMLSecurity::Document::SHA256,
|
|
209
201
|
signature_method: XMLSecurity::Document::RSA_SHA256
|
|
210
202
|
)
|
|
@@ -215,43 +207,27 @@ module OmniAuth
|
|
|
215
207
|
option(
|
|
216
208
|
:saml_attributes_map,
|
|
217
209
|
given_name: ['urn:oid:2.5.4.42'],
|
|
218
|
-
|
|
210
|
+
first_name: ['urn:mpass.id:nickname'],
|
|
219
211
|
last_name: ['urn:oid:2.5.4.4'],
|
|
220
|
-
|
|
221
|
-
name: ['urn:mpass.id:
|
|
212
|
+
provider_info: {
|
|
213
|
+
name: ['urn:mpass.id:educationProviderInfo'],
|
|
222
214
|
type: :multi
|
|
223
215
|
},
|
|
224
|
-
|
|
225
|
-
name: ['urn:mpass.id:
|
|
216
|
+
school_info: {
|
|
217
|
+
name: ['urn:mpass.id:schoolInfo'],
|
|
226
218
|
type: :multi
|
|
227
219
|
},
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
},
|
|
232
|
-
school_name: {
|
|
233
|
-
name: ['urn:mpass.id:school'],
|
|
234
|
-
type: :multi
|
|
235
|
-
},
|
|
236
|
-
class: {
|
|
237
|
-
name: ['urn:mpass.id:class', 'urn:educloudalliance.org:group'],
|
|
238
|
-
type: :multi
|
|
239
|
-
},
|
|
240
|
-
class_level: {
|
|
241
|
-
name: ['urn:mpass.id:classLevel'],
|
|
220
|
+
class_level: ['urn:mpass.id:classLevel'],
|
|
221
|
+
learning_materials_charge: {
|
|
222
|
+
name: ['urn:mpass.id:learningMaterialsCharge'],
|
|
242
223
|
type: :multi
|
|
243
224
|
},
|
|
244
225
|
role: {
|
|
245
|
-
name: ['urn:mpass.id:role'
|
|
246
|
-
type: :multi
|
|
247
|
-
},
|
|
248
|
-
role_name: {
|
|
249
|
-
name: ['urn:educloudalliance.org:role'],
|
|
226
|
+
name: ['urn:mpass.id:role'],
|
|
250
227
|
type: :multi
|
|
251
228
|
},
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
funet_person_learner_id: ['urn:oid:1.3.6.1.4.1.16161.1.1.27']
|
|
229
|
+
learner_id: ['urn:oid:1.3.6.1.4.1.16161.1.1.27'],
|
|
230
|
+
original_issuer: ['urn:mpass.id:originalIssuer']
|
|
255
231
|
)
|
|
256
232
|
|
|
257
233
|
# Defines the SAML attribute from which to determine the OmniAuth `uid`.
|
|
@@ -264,6 +240,9 @@ module OmniAuth
|
|
|
264
240
|
# Add the SAML attributes to the extra hash for easier access.
|
|
265
241
|
extra { {saml_attributes: saml_attributes} }
|
|
266
242
|
|
|
243
|
+
attr_accessor :options
|
|
244
|
+
attr_reader :mpassid_thread
|
|
245
|
+
|
|
267
246
|
def initialize(app, *args, &block)
|
|
268
247
|
super
|
|
269
248
|
|
|
@@ -271,15 +250,19 @@ module OmniAuth
|
|
|
271
250
|
# fetched from the metadata. The options array is the one that gets
|
|
272
251
|
# priority in case it overrides some of the metadata or locally defined
|
|
273
252
|
# option values.
|
|
274
|
-
@
|
|
275
|
-
|
|
276
|
-
|
|
253
|
+
@mpassid_thread = Thread.new do
|
|
254
|
+
@options = OmniAuth::Strategy::Options.new(
|
|
255
|
+
mpassid_options.merge(options)
|
|
256
|
+
)
|
|
257
|
+
options[:security][:authn_requests_signed] = false unless options[:certificate] && options[:private_key]
|
|
258
|
+
end
|
|
277
259
|
end
|
|
278
260
|
|
|
279
261
|
# Override the request phase to be able to pass the lang parameter to
|
|
280
262
|
# the redirect URL. Note that this needs to be the last parameter to
|
|
281
263
|
# be passed to the redirect URL.
|
|
282
264
|
def request_phase
|
|
265
|
+
mpassid_thread.join if mpassid_thread.alive?
|
|
283
266
|
authn_request = OneLogin::RubySaml::Authrequest.new
|
|
284
267
|
lang = lang_for_authn_request
|
|
285
268
|
|
|
@@ -314,6 +297,14 @@ module OmniAuth
|
|
|
314
297
|
|
|
315
298
|
private
|
|
316
299
|
|
|
300
|
+
def certificate
|
|
301
|
+
File.read(options.certificate_file) if options.certificate_file
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
def private_key
|
|
305
|
+
File.read(options.private_key_file) if options.private_key_file
|
|
306
|
+
end
|
|
307
|
+
|
|
317
308
|
def idp_metadata_url
|
|
318
309
|
case options.mode
|
|
319
310
|
when :test
|
|
@@ -337,10 +328,16 @@ module OmniAuth
|
|
|
337
328
|
sso_binding: ['urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect']
|
|
338
329
|
)
|
|
339
330
|
|
|
331
|
+
# Local certificate and private key to decrypt the responses
|
|
332
|
+
settings[:certificate] = certificate
|
|
333
|
+
settings[:private_key] = private_key
|
|
334
|
+
|
|
340
335
|
# Define the security settings as there are some defaults that need to be
|
|
341
336
|
# modified
|
|
342
337
|
security_defaults = OneLogin::RubySaml::Settings::DEFAULTS[:security]
|
|
343
|
-
settings[:security] = security_defaults.merge(
|
|
338
|
+
settings[:security] = security_defaults.merge(
|
|
339
|
+
options.security_settings.to_h.transform_keys(&:to_sym)
|
|
340
|
+
)
|
|
344
341
|
|
|
345
342
|
settings
|
|
346
343
|
end
|
|
@@ -357,7 +354,7 @@ module OmniAuth
|
|
|
357
354
|
|
|
358
355
|
value = definition[:name].map do |key|
|
|
359
356
|
@attributes.public_send(definition[:type], key)
|
|
360
|
-
end.
|
|
357
|
+
end.compact.first
|
|
361
358
|
|
|
362
359
|
attrs[target] = value
|
|
363
360
|
end
|
|
@@ -17,14 +17,14 @@ module OmniAuth
|
|
|
17
17
|
cert = OpenSSL::X509::Certificate.new
|
|
18
18
|
cert.subject = cert.issuer = OpenSSL::X509::Name.parse(subject)
|
|
19
19
|
cert.not_before = Time.now
|
|
20
|
-
cert.not_after = Time.now + 365 * 24 * 60 * 60
|
|
20
|
+
cert.not_after = Time.now + (365 * 24 * 60 * 60)
|
|
21
21
|
cert.public_key = public_key
|
|
22
22
|
cert.serial = 0x0
|
|
23
23
|
cert.version = 2
|
|
24
24
|
|
|
25
25
|
inject_certificate_extensions(cert)
|
|
26
26
|
|
|
27
|
-
cert.sign(private_key, OpenSSL::Digest
|
|
27
|
+
cert.sign(private_key, OpenSSL::Digest.new('SHA1'))
|
|
28
28
|
|
|
29
29
|
cert
|
|
30
30
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: omniauth-mpassid
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Antti Hukkanen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2024-01-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: omniauth-saml
|
|
@@ -133,7 +133,8 @@ files:
|
|
|
133
133
|
homepage: https://github.com/mainio/omniauth-mpassid
|
|
134
134
|
licenses:
|
|
135
135
|
- MIT
|
|
136
|
-
metadata:
|
|
136
|
+
metadata:
|
|
137
|
+
rubygems_mfa_required: 'true'
|
|
137
138
|
post_install_message:
|
|
138
139
|
rdoc_options: []
|
|
139
140
|
require_paths:
|
|
@@ -142,14 +143,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
142
143
|
requirements:
|
|
143
144
|
- - ">="
|
|
144
145
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '
|
|
146
|
+
version: '2.5'
|
|
146
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
147
148
|
requirements:
|
|
148
149
|
- - ">="
|
|
149
150
|
- !ruby/object:Gem::Version
|
|
150
151
|
version: '0'
|
|
151
152
|
requirements: []
|
|
152
|
-
rubygems_version: 3.
|
|
153
|
+
rubygems_version: 3.2.33
|
|
153
154
|
signing_key:
|
|
154
155
|
specification_version: 4
|
|
155
156
|
summary: Provides an MPASSid strategy for OmniAuth.
|