Skip to content

Commit 36d2136

Browse files
authored
Always include Access-Control-Allow-Origin header in authn related responses (#319)
* Update docker certs * Always include Access-Control-Allow-Origin header in authn related endpoint responses
1 parent 020cfe3 commit 36d2136

14 files changed

+296
-135
lines changed

docker/nginx-certs/default.crt

Lines changed: 43 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,48 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIFTzCCBDegAwIBAgISA/Jlept1Qhhdiz41X6VdaHJLMA0GCSqGSIb3DQEBCwUA
3-
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
4-
EwJSMzAeFw0yMTExMzAyMjU4MjNaFw0yMjAyMjgyMjU4MjJaMC8xLTArBgNVBAMM
5-
JCoubG9jYWwuc3RhY2stZGV2LmNpcnJ1c2lkZW50aXR5LmNvbTCCASIwDQYJKoZI
6-
hvcNAQEBBQADggEPADCCAQoCggEBANUGI0JUZ0AHg3xRivLRsRh0t+YcHw+N+dND
7-
5e1xGyON8rxiUNxZjIJhUX6UrspSPDQj437xDdvH1M8XbdhpR5sx4/K4T20PtTSM
8-
DpuFnpVdM3zfhy8m9o0ikhx44tlg1T7+LvjDF9yY4fFUy83iHesd/P8L/cefr5kz
9-
gXnZthyWF+soUcFJ3NuTI8nI9ppWTahAxQ5cq20HQ6hu+thUiPE39bz6zDPUjkhM
10-
g/xWAemNQj3tEpnlBi6ewbS4vWy1dJ+HCE4kfz3FjBx+jXURWQ2OLqCIH/2iT8wQ
11-
oaqB1zKjX2Avp03t66ElnMxo4x+Fb9wJB5vVwVxMa4zXbVNQGocCAwEAAaOCAmAw
12-
ggJcMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH
13-
AwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUv/yi/9NC/ZtcfQqtkb4A+MW77p4w
14-
HwYDVR0jBBgwFoAUFC6zF7dYVsuuUAlA5h+vnYsUwsYwVQYIKwYBBQUHAQEESTBH
15-
MCEGCCsGAQUFBzABhhVodHRwOi8vcjMuby5sZW5jci5vcmcwIgYIKwYBBQUHMAKG
16-
Fmh0dHA6Ly9yMy5pLmxlbmNyLm9yZy8wLwYDVR0RBCgwJoIkKi5sb2NhbC5zdGFj
17-
ay1kZXYuY2lycnVzaWRlbnRpdHkuY29tMEwGA1UdIARFMEMwCAYGZ4EMAQIBMDcG
18-
CysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5
19-
cHQub3JnMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHYARqVV63X6kSAwtaKJafTz
20-
fREsQXS+/Um4havy/HD+bUcAAAF9c0j/QgAABAMARzBFAiBZ4oleDpke0bMLZhs8
21-
SVWrLCo71PRFOjhnJDUO+BCo2QIhAIF5OhvMPTlooFlsPGdgMOHGQuxne/URjF7Z
22-
7HqhggNyAHcA36Veq2iCTx9sre64X04+WurNohKkal6OOxLAIERcKnMAAAF9c0kB
23-
DwAABAMASDBGAiEAnBJQMiPsS9nbUWGzSU+Z+4Aho9aUZiyleFD17XZE5tgCIQCB
24-
vBG2YcQNDkTiDHCGs4IcPGj8pYkr/Cn5WXIh1iJs8TANBgkqhkiG9w0BAQsFAAOC
25-
AQEAslzvucE9ykWgCLkaq3mGaSLT/UD/2K2w/KoXXth0d0c5iRFHJljVsMVhkAFK
26-
dJUz8TLpY+5Z9NFVm+ycDlWmn9VIeSwkrh4LtTHVTr1jg9JX97kQcvFjrwTdmPbm
27-
G8tej+AZ7Qp8dL7ZbxvHz076zbA/TmzKVg++rToV6QObxSrXqWzmV5REKvrsM8KQ
28-
tTw0Olk3FikFS0qu5y8zXh8Nd7e0G8vDD4e/4oWbhjoNzr6gJSgrjhiyBNZ3gvzH
29-
hq/iUZ1gpBa3Wk5oTpceEZV5lMlI2hkV/AVXfSbZ3xBqHMpP36J63nv7vUBhhSkk
30-
/OOUGcEGCNqBo5MaluzKJQFVCA==
2+
MIIDtTCCAzqgAwIBAgISBS+VOayc1kxCgE5+ZOoS+qWOMAoGCCqGSM49BAMDMDIx
3+
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
4+
NzAeFw0yNTEwMDIyMzAwNDVaFw0yNTEyMzEyMzAwNDRaMC8xLTArBgNVBAMMJCou
5+
bG9jYWwuc3RhY2stZGV2LmNpcnJ1c2lkZW50aXR5LmNvbTBZMBMGByqGSM49AgEG
6+
CCqGSM49AwEHA0IABHn6Eefi38XP9c3P+I9mbgkJl9v4DWvaHj0BjbMTRtB++uMx
7+
1S3V9KMvfrd3WJQTZHJC5rjg9m8RP8MeoozBGbujggIxMIICLTAOBgNVHQ8BAf8E
8+
BAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQC
9+
MAAwHQYDVR0OBBYEFKHUgyvBC/jq523zzkq9y0614qi3MB8GA1UdIwQYMBaAFK5I
10+
ntyHHUSgb9qi5WB0BHjCnACAMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAoYW
11+
aHR0cDovL2U3LmkubGVuY3Iub3JnLzAvBgNVHREEKDAmgiQqLmxvY2FsLnN0YWNr
12+
LWRldi5jaXJydXNpZGVudGl0eS5jb20wEwYDVR0gBAwwCjAIBgZngQwBAgEwLQYD
13+
VR0fBCYwJDAioCCgHoYcaHR0cDovL2U3LmMubGVuY3Iub3JnLzE1LmNybDCCAQMG
14+
CisGAQQB1nkCBAIEgfQEgfEA7wB1AKRCxQZJYGFUjw/U6pz7ei0mRU2HqX8v30VZ
15+
9idPOoRUAAABmaddo28AAAQDAEYwRAIgfHBeIowNXBEq+XstySnAnbijEG4+v0ul
16+
aY7lFGMCIjkCIBMIpzZAqFjZFSeAIebvgCkZ/bhalknDjq6h2adS62hMAHYAzPsP
17+
aoVxCWX+lZtTzumyfCLphVwNl422qX5UwP5MDbAAAAGZp12jgAAABAMARzBFAiEA
18+
oVR6XksBDPCVonCG2ugt4blqtrlLzvLTPPZsDVU3tYICICQBzR6ciu0UO4CVZF5M
19+
8jxJj/uHwgKBn9Zhz/SsAsluMAoGCCqGSM49BAMDA2kAMGYCMQCkGM/V5auizug/
20+
GOsW1xUMOOzP3M3s1ml5GLgUuJkSGmiM0VIGo70YztzWkB4g7hoCMQDkYn40g6qc
21+
MgCT3DvgL3krwyWck/upamARO0mDApIvnihiEMKrWXWkyUV0H457hy4=
3122
-----END CERTIFICATE-----
3223
-----BEGIN CERTIFICATE-----
33-
MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw
24+
MIIEVzCCAj+gAwIBAgIRAKp18eYrjwoiCWbTi7/UuqEwDQYJKoZIhvcNAQELBQAw
3425
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
35-
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw
36-
WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
37-
RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
38-
AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP
39-
R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx
40-
sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm
41-
NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg
42-
Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG
43-
/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC
44-
AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB
45-
Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA
46-
FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw
47-
AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw
48-
Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB
49-
gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W
50-
PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl
51-
ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz
52-
CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm
53-
lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4
54-
avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2
55-
yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O
56-
yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids
57-
hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+
58-
HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv
59-
MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX
60-
nLRbwHOoq7hHwg==
61-
-----END CERTIFICATE-----
62-
-----BEGIN CERTIFICATE-----
63-
MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/
64-
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
65-
DkRTVCBSb290IENBIFgzMB4XDTIxMDEyMDE5MTQwM1oXDTI0MDkzMDE4MTQwM1ow
66-
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
67-
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwggIiMA0GCSqGSIb3DQEB
68-
AQUAA4ICDwAwggIKAoICAQCt6CRz9BQ385ueK1coHIe+3LffOJCMbjzmV6B493XC
69-
ov71am72AE8o295ohmxEk7axY/0UEmu/H9LqMZshftEzPLpI9d1537O4/xLxIZpL
70-
wYqGcWlKZmZsj348cL+tKSIG8+TA5oCu4kuPt5l+lAOf00eXfJlII1PoOK5PCm+D
71-
LtFJV4yAdLbaL9A4jXsDcCEbdfIwPPqPrt3aY6vrFk/CjhFLfs8L6P+1dy70sntK
72-
4EwSJQxwjQMpoOFTJOwT2e4ZvxCzSow/iaNhUd6shweU9GNx7C7ib1uYgeGJXDR5
73-
bHbvO5BieebbpJovJsXQEOEO3tkQjhb7t/eo98flAgeYjzYIlefiN5YNNnWe+w5y
74-
sR2bvAP5SQXYgd0FtCrWQemsAXaVCg/Y39W9Eh81LygXbNKYwagJZHduRze6zqxZ
75-
Xmidf3LWicUGQSk+WT7dJvUkyRGnWqNMQB9GoZm1pzpRboY7nn1ypxIFeFntPlF4
76-
FQsDj43QLwWyPntKHEtzBRL8xurgUBN8Q5N0s8p0544fAQjQMNRbcTa0B7rBMDBc
77-
SLeCO5imfWCKoqMpgsy6vYMEG6KDA0Gh1gXxG8K28Kh8hjtGqEgqiNx2mna/H2ql
78-
PRmP6zjzZN7IKw0KKP/32+IVQtQi0Cdd4Xn+GOdwiK1O5tmLOsbdJ1Fu/7xk9TND
79-
TwIDAQABo4IBRjCCAUIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
80-
SwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5pZGVudHJ1
81-
c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTEp7Gkeyxx
82-
+tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEB
83-
ATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQu
84-
b3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0LmNvbS9E
85-
U1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFHm0WeZ7tuXkAXOACIjIGlj26Ztu
86-
MA0GCSqGSIb3DQEBCwUAA4IBAQAKcwBslm7/DlLQrt2M51oGrS+o44+/yQoDFVDC
87-
5WxCu2+b9LRPwkSICHXM6webFGJueN7sJ7o5XPWioW5WlHAQU7G75K/QosMrAdSW
88-
9MUgNTP52GE24HGNtLi1qoJFlcDyqSMo59ahy2cI2qBDLKobkx/J3vWraV0T9VuG
89-
WCLKTVXkcGdtwlfFRjlBz4pYg1htmf5X6DYO8A4jqv2Il9DjXA6USbW1FzXSLr9O
90-
he8Y4IWS6wY7bCkjCWDcRQJMEhg76fsO3txE+FiYruq9RUWhiF1myv4Q6W+CyBFC
91-
Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5
26+
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
27+
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
28+
RW5jcnlwdDELMAkGA1UEAxMCRTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARB6AST
29+
CFh/vjcwDMCgQer+VtqEkz7JANurZxLP+U9TCeioL6sp5Z8VRvRbYk4P1INBmbef
30+
QHJFHCxcSjKmwtvGBWpl/9ra8HW0QDsUaJW2qOJqceJ0ZVFT3hbUHifBM/2jgfgw
31+
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
32+
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuSJ7chx1EoG/aouVgdAR4
33+
wpwAgDAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
34+
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
35+
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
36+
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAjx66fDdLk5ywFn3CzA1w1qfylHUD
37+
aEf0QZpXcJseddJGSfbUUOvbNR9N/QQ16K1lXl4VFyhmGXDT5Kdfcr0RvIIVrNxF
38+
h4lqHtRRCP6RBRstqbZ2zURgqakn/Xip0iaQL0IdfHBZr396FgknniRYFckKORPG
39+
yM3QKnd66gtMst8I5nkRQlAg/Jb+Gc3egIvuGKWboE1G89NTsN9LTDD3PLj0dUMr
40+
OIuqVjLB8pEC6yk9enrlrqjXQgkLEYhXzq7dLafv5Vkig6Gl0nuuqjqfp0Q1bi1o
41+
yVNAlXe6aUXw92CcghC9bNsKEO1+M52YY5+ofIXlS/SEQbvVYYBLZ5yeiglV6t3S
42+
M6H+vTG0aP9YHzLn/KVOHzGQfXDP7qM5tkf+7diZe7o2fw6O7IvN6fsQXEQQj8TJ
43+
UXJxv2/uJhcuy/tSDgXwHM8Uk34WNbRT7zGTGkQRX0gsbjAea/jYAoWv0ZvQRwpq
44+
Pe79D/i7Cep8qWnA+7AE/3B3S/3dEEYmc0lpe1366A/6GEgk3ktr9PEoQrLChs6I
45+
tu3wnNLB2euC8IKGLQFpGtOO/2/hiAKjyajaBP25w1jF0Wl8Bbqne3uZ2q1GyPFJ
46+
YRmT7/OXpmOH/FVLtwS+8ng1cAmpCujPwteJZNcDG0sF2n/sc0+SQf49fdyUK0ty
47+
+VUwFj9tmWxyR/M=
9248
-----END CERTIFICATE-----

docker/nginx-certs/default.key

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,5 @@
11
-----BEGIN PRIVATE KEY-----
2-
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDVBiNCVGdAB4N8
3-
UYry0bEYdLfmHB8PjfnTQ+XtcRsjjfK8YlDcWYyCYVF+lK7KUjw0I+N+8Q3bx9TP
4-
F23YaUebMePyuE9tD7U0jA6bhZ6VXTN834cvJvaNIpIceOLZYNU+/i74wxfcmOHx
5-
VMvN4h3rHfz/C/3Hn6+ZM4F52bYclhfrKFHBSdzbkyPJyPaaVk2oQMUOXKttB0Oo
6-
bvrYVIjxN/W8+swz1I5ITIP8VgHpjUI97RKZ5QYunsG0uL1stXSfhwhOJH89xYwc
7-
fo11EVkNji6giB/9ok/MEKGqgdcyo19gL6dN7euhJZzMaOMfhW/cCQeb1cFcTGuM
8-
121TUBqHAgMBAAECggEAB/UCvCeK88lUEAC7v/Y1N0Sk2eOTBXG4MzwGCqh+6wUS
9-
XBcQDisKJJSeBqxnGweXWBs/FC7M5bjBKjslzz+ffRyP9zELRnefvSa+JPEIy2t/
10-
0NpIompCK2NvMcESOCx1yrST7Jbc/VB4oBsawcYAeBfWq3A3Oo2scXyLCZIoS0j+
11-
fuEM+s1gg5+vqbYb2+0KUcth2pPRSnHzJXtu6nN5YICgnQpHXfhCyWV2XS36lbeN
12-
m6+hRz4w+VJUAomfIo5ahe6LuYbZt77thOPgf1xWYU+GM+HQUytJPRFjfJPna39G
13-
88SVxvqWAxlfb2tdVeIM6EiSpUr2ncgITylYFy7DgQKBgQD6PQhoK35Cw2SEwWNX
14-
BnoeZvC4YmGJEK8fkp3hri/A3NJ3y0GvLQV8e5LGt9O1xgFp6PdxwpbJhyMy97sN
15-
GxNQcxn8+Xa89JsQQGbjz7LHfUMKqVg+xq8E4a4rKauYOReVvr98grBxLdm0DZNO
16-
Vb6ntbbtsEkO3mBniUDrfES4swKBgQDZ7cD5E+ArjvVjfOrlo6lV3FMDrrv8DwnA
17-
ls1Kvs8MQ9+E4YZ01/+DZ3iCbeKH/NbKm4XXVoZEPA1nvulvdrTaGr7bowzKzHHh
18-
hpz0mfzsKZxXeogemiDYQ6BQO3Z0lHQbTJJOZSMFkXp+agt2ikJOmTLXNxgAN8nq
19-
KeYQAdS43QKBgB+SxdXG7xZjavJpKCyZz5y4ZlUNbLsLlN0J9cu825+c/R1KUw5U
20-
QuXy/ZD/LsI3qoP/dgEviTECUQmkQkCkEurKqxPFMhsjTdFeHt1NnoQXJPdaaJz7
21-
GqgmBYDCsDjzsysctzJxluug2mAielye6wBkKCGTZZRvsIA/zCYqNs2LAoGBANNx
22-
xnElIrTAoUClPDgRIkSHYBhLmmNGp/yvlII4PiW1WRLRyqZlyKlTZG6QdWHiJPky
23-
CptTfTSJW6xUZKPcdj7EAniSa9/8m2XpOTJukiMFgIa0AYxHmSScANi3yQf13e16
24-
zt23bVKCw2oSNAsQvKMMK3L7JpNXjdZgTrMrQ50VAoGBAIqSg3w2wnjsHrqryGQa
25-
jIUCm80EDx5t2tqGAn23RbR3ps+tSRB6KLjaZM+S90SzFRZjI3shA60tXTj2Mra/
26-
xcJpc828KgGnyZIRB2gmO/YFURwLEx3dOwWlTS8wfRb3inCGydwQu2A+V59CLmck
27-
VTUEdI5qZrc1Aq/5OjkFI1GJ
2+
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgTVrOmRapta1bw8iJ
3+
p4e0OhYa2uwz7iIiYsaGQuhqQDKhRANCAAR5+hHn4t/Fz/XNz/iPZm4JCZfb+A1r
4+
2h49AY2zE0bQfvrjMdUt1fSjL363d1iUE2RyQua44PZvET/DHqKMwRm7
285
-----END PRIVATE KEY-----

src/Controllers/AccessTokenController.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,16 @@ public function token(Request $request): Response
6161
* @psalm-suppress DeprecatedMethod Until we drop support for old public/*.php routes, we need to bridge
6262
* between PSR and Symfony HTTP messages.
6363
*/
64-
return $this->psrHttpBridge->getHttpFoundationFactory()->createResponse(
64+
$response = $this->psrHttpBridge->getHttpFoundationFactory()->createResponse(
6565
$this->__invoke($this->psrHttpBridge->getPsrHttpFactory()->createRequest($request)),
6666
);
67+
68+
// If not already handled, allow CORS (for JS clients).
69+
if (!$response->headers->has('Access-Control-Allow-Origin')) {
70+
$response->headers->set('Access-Control-Allow-Origin', '*');
71+
}
72+
73+
return $response;
6774
} catch (OAuthServerException $exception) {
6875
return $this->errorResponder->forException($exception);
6976
}

src/Controllers/AuthorizationController.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,16 @@ public function authorization(Request $request): Response
106106
* @psalm-suppress DeprecatedMethod Until we drop support for old public/*.php routes, we need to bridge
107107
* between PSR and Symfony HTTP messages.
108108
*/
109-
return $this->psrHttpBridge->getHttpFoundationFactory()->createResponse(
109+
$response = $this->psrHttpBridge->getHttpFoundationFactory()->createResponse(
110110
$this->__invoke($this->psrHttpBridge->getPsrHttpFactory()->createRequest($request)),
111111
);
112+
113+
// If not already handled, allow CORS (for JS clients).
114+
if (!$response->headers->has('Access-Control-Allow-Origin')) {
115+
$response->headers->set('Access-Control-Allow-Origin', '*');
116+
}
117+
118+
return $response;
112119
} catch (OAuthServerException $exception) {
113120
return $this->errorResponder->forException($exception);
114121
}

src/Controllers/ConfigurationDiscoveryController.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ public function __construct(private readonly OpMetadataService $opMetadataServic
2727

2828
public function __invoke(): JsonResponse
2929
{
30-
return new JsonResponse($this->opMetadataService->getMetadata());
30+
return new JsonResponse(
31+
$this->opMetadataService->getMetadata(),
32+
headers: ['Access-Control-Allow-Origin' => '*'],
33+
);
3134
}
3235
}

src/Controllers/Federation/EntityStatementController.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,10 @@ protected function prepareEntityStatementResponse(string $entityStatementToken):
310310
return $this->routes->newResponse(
311311
$entityStatementToken,
312312
200,
313-
[HttpHeadersEnum::ContentType->value => ContentTypesEnum::ApplicationEntityStatementJwt->value,],
313+
[
314+
HttpHeadersEnum::ContentType->value => ContentTypesEnum::ApplicationEntityStatementJwt->value,
315+
'Access-Control-Allow-Origin' => '*',
316+
],
314317
);
315318
}
316319
}

src/Controllers/Federation/SubordinateListingsController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ function (ClientEntityInterface $clientEntity): ?string {
6363

6464
return $this->routes->newJsonResponse(
6565
$subordinateEntityIdList,
66+
headers: ['Access-Control-Allow-Origin' => '*'],
6667
);
6768
}
6869
}

src/Controllers/JwksController.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public function __invoke(): JsonResponse
3838

3939
public function jwks(): Response
4040
{
41-
return $this->psrHttpBridge->getHttpFoundationFactory()->createResponse($this->__invoke());
41+
$response = $this->psrHttpBridge->getHttpFoundationFactory()->createResponse($this->__invoke());
42+
$response->headers->set('Access-Control-Allow-Origin', '*');
43+
return $response;
4244
}
4345
}

src/Controllers/UserInfoController.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,16 @@ public function userInfo(Request $request): Response
9292
* @psalm-suppress DeprecatedMethod Until we drop support for old public/*.php routes, we need to bridge
9393
* between PSR and Symfony HTTP messages.
9494
*/
95-
return $this->psrHttpBridge->getHttpFoundationFactory()->createResponse(
95+
$response = $this->psrHttpBridge->getHttpFoundationFactory()->createResponse(
9696
$this->__invoke($this->psrHttpBridge->getPsrHttpFactory()->createRequest($request)),
9797
);
98+
99+
// If not already handled, allow CORS (for JS clients).
100+
if (!$response->headers->has('Access-Control-Allow-Origin')) {
101+
$response->headers->set('Access-Control-Allow-Origin', '*');
102+
}
103+
104+
return $response;
98105
} catch (OAuthServerException $exception) {
99106
return $this->errorResponder->forException($exception);
100107
}

tests/unit/src/Controllers/AccessTokenControllerTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
use SimpleSAML\Module\oidc\Repositories\AllowedOriginRepository;
1717
use SimpleSAML\Module\oidc\Server\AuthorizationServer;
1818
use SimpleSAML\Module\oidc\Services\ErrorResponder;
19+
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
20+
use Symfony\Component\HttpFoundation\Request;
21+
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
1922

2023
/**
2124
* @covers \SimpleSAML\Module\oidc\Controllers\AccessTokenController
@@ -31,6 +34,14 @@ class AccessTokenControllerTest extends TestCase
3134
protected MockObject $requestFactoryMock;
3235
protected MockObject $responseFactoryMock;
3336

37+
protected MockObject $symfonyRequestMock;
38+
39+
protected MockObject $symfonyResponseMock;
40+
41+
protected MockObject $httpFoundationFactoryMock;
42+
43+
protected MockObject $responseHeaderBagMock;
44+
3445

3546
/**
3647
* @throws \Exception
@@ -47,6 +58,15 @@ protected function setUp(): void
4758
$this->responseFactoryMock = $this->createMock(ResponseFactoryInterface::class);
4859
$this->responseFactoryMock->method('createResponse')->willReturn($this->responseMock);
4960
$this->psrHttpBridgeMock->method('getResponseFactory')->willReturn($this->responseFactoryMock);
61+
62+
$this->symfonyRequestMock = $this->createMock(Request::class);
63+
$this->symfonyResponseMock = $this->createMock(\Symfony\Component\HttpFoundation\Response::class);
64+
$this->responseHeaderBagMock = $this->createMock(ResponseHeaderBag::class);
65+
$this->symfonyResponseMock->headers = $this->responseHeaderBagMock;
66+
67+
$this->httpFoundationFactoryMock = $this->createMock(HttpFoundationFactory::class);
68+
$this->httpFoundationFactoryMock->method('createResponse')->willReturn($this->symfonyResponseMock);
69+
$this->psrHttpBridgeMock->method('getHttpFoundationFactory')->willReturn($this->httpFoundationFactoryMock);
5070
}
5171

5272
protected function mock(): AccessTokenController
@@ -100,6 +120,20 @@ public function testItHandlesCorsRequest(): void
100120
$this->mock()->__invoke($this->serverRequestMock);
101121
}
102122

123+
public function testItAlwaysReturnsAccessControlAllowOrigin(): void
124+
{
125+
$this->authorizationServerMock
126+
->expects($this->once())
127+
->method('respondToAccessTokenRequest')
128+
->willReturn($this->responseMock);
129+
130+
$this->responseHeaderBagMock->expects($this->once())
131+
->method('set')
132+
->with('Access-Control-Allow-Origin', '*');
133+
134+
$this->mock()->token($this->symfonyRequestMock);
135+
}
136+
103137
public function testItUsesRequestTrait(): void
104138
{
105139
$this->assertContains(RequestTrait::class, class_uses(AccessTokenController::class));

0 commit comments

Comments
 (0)