Fix auth-token middleware to understand v3 tokens
Now that the Identity server supports v3 tokens, the auth_token middleware should permit the in-line validation of such a token. This essentially means just setting any new environment items that correspond to the new attributes that may be in a v3 token (such as domains), as well as allowing for the slight format differences. Most of the work in this change is actually in the unit tests, where it was important to try and enable the existing tests to be run against an auth_token middleware configured for both v2 and v3. This meant restructing the test class so that the token format is separated from the individual tests and is initialized by the class Setup(). Since there are some new signed token formats included in this testing, a new set of the signed tokens was generated. Fixes Bug #1132390 Change-Id: I78b232d30f5310c39089fbbc8e56c23df291f89f
This commit is contained in:
@@ -1,18 +1,18 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIC0TCCAjqgAwIBAgIJAP2TNFqmE1KUMA0GCSqGSIb3DQEBBQUAMIGeMQowCAYD
|
MIIC0TCCAjqgAwIBAgIJAK6p/UfYvENdMA0GCSqGSIb3DQEBBQUAMIGeMQowCAYD
|
||||||
VQQFEwE1MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEjAQBgNVBAcTCVN1bm55
|
VQQFEwE1MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEjAQBgNVBAcTCVN1bm55
|
||||||
dmFsZTESMBAGA1UEChMJT3BlblN0YWNrMREwDwYDVQQLEwhLZXlzdG9uZTElMCMG
|
dmFsZTESMBAGA1UEChMJT3BlblN0YWNrMREwDwYDVQQLEwhLZXlzdG9uZTElMCMG
|
||||||
CSqGSIb3DQEJARYWa2V5c3RvbmVAb3BlbnN0YWNrLm9yZzEUMBIGA1UEAxMLU2Vs
|
CSqGSIb3DQEJARYWa2V5c3RvbmVAb3BlbnN0YWNrLm9yZzEUMBIGA1UEAxMLU2Vs
|
||||||
ZiBTaWduZWQwIBcNMTIxMTExMTA1NDA2WhgPMjA3MTA1MDYxMDU0MDZaMIGeMQow
|
ZiBTaWduZWQwIBcNMTMwMzA3MTcxMzEyWhgPMjA3MTA4MzAxNzEzMTJaMIGeMQow
|
||||||
CAYDVQQFEwE1MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEjAQBgNVBAcTCVN1
|
CAYDVQQFEwE1MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEjAQBgNVBAcTCVN1
|
||||||
bm55dmFsZTESMBAGA1UEChMJT3BlblN0YWNrMREwDwYDVQQLEwhLZXlzdG9uZTEl
|
bm55dmFsZTESMBAGA1UEChMJT3BlblN0YWNrMREwDwYDVQQLEwhLZXlzdG9uZTEl
|
||||||
MCMGCSqGSIb3DQEJARYWa2V5c3RvbmVAb3BlbnN0YWNrLm9yZzEUMBIGA1UEAxML
|
MCMGCSqGSIb3DQEJARYWa2V5c3RvbmVAb3BlbnN0YWNrLm9yZzEUMBIGA1UEAxML
|
||||||
U2VsZiBTaWduZWQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMXgnd5wlHAp
|
U2VsZiBTaWduZWQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOw4quFzQ/xb
|
||||||
GxZ58LrpEkHU995lT9PxtMgkp0tpFhg7R5HQw9K7TfQk5NHB28hNzf8UE/c0z2pJ
|
UOKuLtXdiZLPA0Wi38iGEa+T8tp7j3US44wAamckdZb4cq9/Qx03EBKd2mcJvUoP
|
||||||
XggPnAzvdx27NQeJGX5CWsi6fITZ8vH/+SxgfxxC+CE/6BkDpzw21MgBtq11vWL7
|
rLnSlnHQMH2VGA1whZpZTWqt8ydQdDYB1SUKeUoxcjq8EKl8X8Sd3dP5amlyFCOI
|
||||||
XVaxNeU12Ax889U66i3CrObuCYt2mbpzAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB
|
GVhFyAXYgaYlmf+s6FIzpY55Uy2zX+nZAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB
|
||||||
Af8wDQYJKoZIhvcNAQEFBQADgYEAkFIbnr2/0/XWp+f80Gl6GAC7tdmZFlT9udVF
|
Af8wDQYJKoZIhvcNAQEFBQADgYEAp5nII86N8ISu2FGEW/Ja7zU0diZpv7h/8enR
|
||||||
q794rXyMlYY64pq34SzfQAn+4DztT4B9yzrTx03tLNr6Uf+5TS+ubcwG41UBBMs/
|
06uwksv722ArOzQ22Y0xezZN3TEc5GVKPbHPSXfvvha09K5QlIp9idLy65Mu/DXa
|
||||||
Icf9zBMRqr+IXhijS49gQ7dPjqNTCqX+6ILbRWjdXP15ZWymI3ayQL/CMwFt/E+0
|
Fo+kJoq7rMW6Det/mOoWp3O4zgYlxvKTFjyNo300nRir4nvHmbrF/vhXVqDm2roS
|
||||||
kT6MLes=
|
vLoyVvY=
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
@@ -3,31 +3,31 @@ MIICoTCCAgoCARAwDQYJKoZIhvcNAQEFBQAwgZ4xCjAIBgNVBAUTATUxCzAJBgNV
|
|||||||
BAYTAlVTMQswCQYDVQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQK
|
BAYTAlVTMQswCQYDVQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQK
|
||||||
EwlPcGVuU3RhY2sxETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZr
|
EwlPcGVuU3RhY2sxETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZr
|
||||||
ZXlzdG9uZUBvcGVuc3RhY2sub3JnMRQwEgYDVQQDEwtTZWxmIFNpZ25lZDAgFw0x
|
ZXlzdG9uZUBvcGVuc3RhY2sub3JnMRQwEgYDVQQDEwtTZWxmIFNpZ25lZDAgFw0x
|
||||||
MjExMTExMDU0MDZaGA8yMDcxMDUwNjEwNTQwNlowgZAxCzAJBgNVBAYTAlVTMQsw
|
MzAzMDcxNzEzMTJaGA8yMDcxMDgzMDE3MTMxMlowgZAxCzAJBgNVBAYTAlVTMQsw
|
||||||
CQYDVQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQKEwlPcGVuU3Rh
|
CQYDVQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQKEwlPcGVuU3Rh
|
||||||
Y2sxETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZrZXlzdG9uZUBv
|
Y2sxETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZrZXlzdG9uZUBv
|
||||||
cGVuc3RhY2sub3JnMRIwEAYDVQQDEwlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEB
|
cGVuc3RhY2sub3JnMRIwEAYDVQQDEwlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEB
|
||||||
BQADgY0AMIGJAoGBALVu4bjaOH33yAx0WdpEqj4UDVsLxVjWxEpIbOlDlc6IfJd+
|
BQADgY0AMIGJAoGBAM323GVGJ6UImf6nfz9P+9MURBo0okaV/3ewyfSMri8DbM0s
|
||||||
cUriQtxf6ahjxtzLPERS81SnwZmrICWZngbOn733pULMTZktTJH+o7C74NdKwUSN
|
CqDtC43R1jIrHtEdnUU7kHguFXc09p9pHSRbblZ3TNUuZgfoLTNUUY5LETrXdlIQ
|
||||||
xjlCeWUy+FqIQoje4ygoJRPpMdkp1wHNO0ZERwRN9e8M5TIlx/LRtk+q8bT5AgMB
|
8WQDqUZq2kSbUBWYkHOYlzmowoWa2hKUC1ifHcleI2dVMW+LIkDhXPEc4XO1AgMB
|
||||||
AAEwDQYJKoZIhvcNAQEFBQADgYEAcp9ancue9Oq+MkaPucCrIqFhiUsdUThulJlB
|
AAEwDQYJKoZIhvcNAQEFBQADgYEAchynxfP/FQC8FNhKs/dGI196qBq4MVobvNjQ
|
||||||
etPpUDGgStBSHgze/oxG2+flIjRoI6gG9Chfw//vWHOwDT7N32AHSgaI4b8/k/+s
|
trdLAjbZwp1/i6SHLxXEDm9bIWyInE7D8hGqXXQAImzAaH0t3oYR3C4XQWOSPPwU
|
||||||
hAV2khYkV4PW2oS1TfeU/vxQzXbgApqhLBNqfFmJVW48aGAr/aqsJi3MYWN3269+
|
6tamnsXDVR2w3aHbEh6AuIahZQaau5tnGopwiWRDNZllbSlfay60r6Vj4ex5LtVM
|
||||||
6vChaVw=
|
eBLz1Jg=
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
-----BEGIN PRIVATE KEY-----
|
-----BEGIN PRIVATE KEY-----
|
||||||
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALVu4bjaOH33yAx0
|
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAM323GVGJ6UImf6n
|
||||||
WdpEqj4UDVsLxVjWxEpIbOlDlc6IfJd+cUriQtxf6ahjxtzLPERS81SnwZmrICWZ
|
fz9P+9MURBo0okaV/3ewyfSMri8DbM0sCqDtC43R1jIrHtEdnUU7kHguFXc09p9p
|
||||||
ngbOn733pULMTZktTJH+o7C74NdKwUSNxjlCeWUy+FqIQoje4ygoJRPpMdkp1wHN
|
HSRbblZ3TNUuZgfoLTNUUY5LETrXdlIQ8WQDqUZq2kSbUBWYkHOYlzmowoWa2hKU
|
||||||
O0ZERwRN9e8M5TIlx/LRtk+q8bT5AgMBAAECgYAmwq6EYFJrTvE0//JmN/8qzfvg
|
C1ifHcleI2dVMW+LIkDhXPEc4XO1AgMBAAECgYBOZfMKkaOxjA6iAjvLa7Sdag9q
|
||||||
dI5PoWpD+F8UInUxr2T2tHOdrOLd07vGVrKYXu7cJeCIOGKa4r02azAggioL/nE9
|
MjK6z4nIk4CsF4iN2K3ngyYgj1pgh0kTG5rFWpJssfmR5WjCUWS21RoEptDeZf/A
|
||||||
FgPpqEC+QROvLuhFsk1gLZ2pGQ06sveKZVMH22h59BKZkYlhjh5qd4vlmhPqkmPp
|
jRqzW3u493JAhyOjTK4DYbB9CwCmeGkoImC3nn2PrBgG1OPrSQMB3ODqVA2Pa1eF
|
||||||
gdXj7ZjDCJhhQdFVkQJBANp18k2mVksn8q29LMieVTSIZNN3ucDA1QHbim+3fp/O
|
omqKQmAqCCijtmllmQJBAOnpN3sjykUlGVWY7HxdBAOsQ5DkkCXL6ZSjA3pRYvJQ
|
||||||
GxCzU7Mv1Xfnu1zoRFu5/sF3YG0Zy3TGPDrEljBC3rUCQQDUnBjVFXL35OkBZqXW
|
12pKELZyxZ8GtVCFvOjaCpdxL+1MsRHkEfZpWz9o9BsCQQDhagjUFbgAQzo/TH1X
|
||||||
taJPzGbsPoqAO+Ls2juS97zNzeGxUNhvcKuEvHO63PXqDxp1535DpvJEBN1rT2FF
|
iblrnWUi7rs+IIDOF48qy/t1FKFlyCHbMYQLB/rPSN1G+5uMEapCuOBpVQsO9v5n
|
||||||
iaO1AkEAt/QTWWFUTqrPxY6DNFdm5fpn9E1fg7icZJkKBDJeFJCH59MpCryfovzl
|
wJRvAkBQXOPG1sEDiH9vvR5ii8J5UJHWEfDES45wlqD3QUbxYXzg85lSVZQ30qIw
|
||||||
n0ERtq9ynlQ4RQYwdR8rvkylLvRP9QJAOiXHFOAc5XeR0nREfwiGL9TzgUFJl/DJ
|
jAIfLeo9pZGFwbeEIgtZ0VCcNH7JAkBK3FEkRjY+eBUvEnMKEGYw9CuzZz9uCZNd
|
||||||
C4ZULMnctVzNkTVPPItQHal87WppR26CCiUZ/161e6zo8eRv8hjG0QJABWqfYQuK
|
Xnughe/z2S8kw0tjJVWp6DOGhbdfLI5i/TbjQ8zbjm/Gv4aL5GwnAkEA42UWJKNQ
|
||||||
dWH8nxlXS+NFUDbsCdL+XpOVE7iEH7hvSw/A/kz40mLx8sDp/Fz1ysrogR/L+NGC
|
ztq73xmVmihToMjMe6k2DDPQpq+e2b/522Vz1ZDJlIV9tpoykFX2XiPnRz1o1oWd
|
||||||
Vrlwm4q/WYJO0Q==
|
DXQBvYeFzthvKA==
|
||||||
-----END PRIVATE KEY-----
|
-----END PRIVATE KEY-----
|
||||||
|
@@ -3,15 +3,15 @@ MIICoDCCAgkCAREwDQYJKoZIhvcNAQEFBQAwgZ4xCjAIBgNVBAUTATUxCzAJBgNV
|
|||||||
BAYTAlVTMQswCQYDVQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQK
|
BAYTAlVTMQswCQYDVQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQK
|
||||||
EwlPcGVuU3RhY2sxETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZr
|
EwlPcGVuU3RhY2sxETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZr
|
||||||
ZXlzdG9uZUBvcGVuc3RhY2sub3JnMRQwEgYDVQQDEwtTZWxmIFNpZ25lZDAgFw0x
|
ZXlzdG9uZUBvcGVuc3RhY2sub3JnMRQwEgYDVQQDEwtTZWxmIFNpZ25lZDAgFw0x
|
||||||
MjExMTExMDU0MDZaGA8yMDcxMDUwNjEwNTQwNlowgY8xCzAJBgNVBAYTAlVTMQsw
|
MzAzMDcxNzEzMTJaGA8yMDcxMDgzMDE3MTMxMlowgY8xCzAJBgNVBAYTAlVTMQsw
|
||||||
CQYDVQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQKEwlPcGVuU3Rh
|
CQYDVQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQKEwlPcGVuU3Rh
|
||||||
Y2sxETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZrZXlzdG9uZUBv
|
Y2sxETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZrZXlzdG9uZUBv
|
||||||
cGVuc3RhY2sub3JnMREwDwYDVQQDEwhLZXlzdG9uZTCBnzANBgkqhkiG9w0BAQEF
|
cGVuc3RhY2sub3JnMREwDwYDVQQDEwhLZXlzdG9uZTCBnzANBgkqhkiG9w0BAQEF
|
||||||
AAOBjQAwgYkCgYEAuoQC6IBqMxC5845c/ZkLsdcQbTHqIpYJHEkwEoxyeEjwiGFf
|
AAOBjQAwgYkCgYEApibRgDiDl4u73oeVQjkiNBN+VYYSQ82UJoQvuoYbzYndAik9
|
||||||
iZmiZ91pSFNc9MfjdJnN+be/ndVS19w1nrrJvV/udVsf6JZWkTPX5HyxnllwznCH
|
P63vf42lu2tSMs8U/oNl/EqHvI92rZhGpzr9wRVAQuaKYlrPk1Sn9hJHFjjotSHY
|
||||||
pP7gfvMZzGsqzWlSdiD6mcRbCYRX9hCCauG3jhCtISINCVYMYQGH6QSib9sCAwEA
|
Sq+ivlG7WmLoIrQkYYzFr3r+yiiYtzL0cv68objKEwGMZasn95nJSjqAxFUCAwEA
|
||||||
ATANBgkqhkiG9w0BAQUFAAOBgQBCssELi+1RSjEmzeqSnpgUqmtpvB9oxbcwl+xH
|
ATANBgkqhkiG9w0BAQUFAAOBgQAmFHIcvPC3G+DFM8Ke8kZi/UGl4ugUlkdIVmCG
|
||||||
rIrYvqMU6pV2aSxgLDqpGjjusLHUau9Bmu3Myc/fm9/mlPUQHNj0AWl8vvfSlq1b
|
yokdR0b7v72r8ocQ/QSIRcw/Y0t3lPsAt1Dq6m2zN8PAC30m4QQqCu4o1xEWU51N
|
||||||
vsWMUa1h4UFlPWoF2DIUFd+noBxe5CbcLUV6K0oyJAcPO433OyuGl5oQkhxmoy1J
|
sUfNaw55qjpYEpZ2DmUjJc0kzYIsmaDkqM4t5lTJ7K7+zoWdW9joJV+VAyEq6NiS
|
||||||
w59KRg==
|
RhjOeg==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
@@ -3,15 +3,15 @@ MIICoTCCAgoCARAwDQYJKoZIhvcNAQEFBQAwgZ4xCjAIBgNVBAUTATUxCzAJBgNV
|
|||||||
BAYTAlVTMQswCQYDVQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQK
|
BAYTAlVTMQswCQYDVQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQK
|
||||||
EwlPcGVuU3RhY2sxETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZr
|
EwlPcGVuU3RhY2sxETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZr
|
||||||
ZXlzdG9uZUBvcGVuc3RhY2sub3JnMRQwEgYDVQQDEwtTZWxmIFNpZ25lZDAgFw0x
|
ZXlzdG9uZUBvcGVuc3RhY2sub3JnMRQwEgYDVQQDEwtTZWxmIFNpZ25lZDAgFw0x
|
||||||
MjExMTExMDU0MDZaGA8yMDcxMDUwNjEwNTQwNlowgZAxCzAJBgNVBAYTAlVTMQsw
|
MzAzMDcxNzEzMTJaGA8yMDcxMDgzMDE3MTMxMlowgZAxCzAJBgNVBAYTAlVTMQsw
|
||||||
CQYDVQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQKEwlPcGVuU3Rh
|
CQYDVQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQKEwlPcGVuU3Rh
|
||||||
Y2sxETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZrZXlzdG9uZUBv
|
Y2sxETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZrZXlzdG9uZUBv
|
||||||
cGVuc3RhY2sub3JnMRIwEAYDVQQDEwlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEB
|
cGVuc3RhY2sub3JnMRIwEAYDVQQDEwlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEB
|
||||||
BQADgY0AMIGJAoGBALVu4bjaOH33yAx0WdpEqj4UDVsLxVjWxEpIbOlDlc6IfJd+
|
BQADgY0AMIGJAoGBAM323GVGJ6UImf6nfz9P+9MURBo0okaV/3ewyfSMri8DbM0s
|
||||||
cUriQtxf6ahjxtzLPERS81SnwZmrICWZngbOn733pULMTZktTJH+o7C74NdKwUSN
|
CqDtC43R1jIrHtEdnUU7kHguFXc09p9pHSRbblZ3TNUuZgfoLTNUUY5LETrXdlIQ
|
||||||
xjlCeWUy+FqIQoje4ygoJRPpMdkp1wHNO0ZERwRN9e8M5TIlx/LRtk+q8bT5AgMB
|
8WQDqUZq2kSbUBWYkHOYlzmowoWa2hKUC1ifHcleI2dVMW+LIkDhXPEc4XO1AgMB
|
||||||
AAEwDQYJKoZIhvcNAQEFBQADgYEAcp9ancue9Oq+MkaPucCrIqFhiUsdUThulJlB
|
AAEwDQYJKoZIhvcNAQEFBQADgYEAchynxfP/FQC8FNhKs/dGI196qBq4MVobvNjQ
|
||||||
etPpUDGgStBSHgze/oxG2+flIjRoI6gG9Chfw//vWHOwDT7N32AHSgaI4b8/k/+s
|
trdLAjbZwp1/i6SHLxXEDm9bIWyInE7D8hGqXXQAImzAaH0t3oYR3C4XQWOSPPwU
|
||||||
hAV2khYkV4PW2oS1TfeU/vxQzXbgApqhLBNqfFmJVW48aGAr/aqsJi3MYWN3269+
|
6tamnsXDVR2w3aHbEh6AuIahZQaau5tnGopwiWRDNZllbSlfay60r6Vj4ex5LtVM
|
||||||
6vChaVw=
|
eBLz1Jg=
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
@@ -35,8 +35,8 @@ ZXJuYW1lMSJ9fX0NCjGCAUkwggFFAgEBMIGkMIGeMQowCAYDVQQFEwE1MQswCQYD
|
|||||||
VQQGEwJVUzELMAkGA1UECBMCQ0ExEjAQBgNVBAcTCVN1bm55dmFsZTESMBAGA1UE
|
VQQGEwJVUzELMAkGA1UECBMCQ0ExEjAQBgNVBAcTCVN1bm55dmFsZTESMBAGA1UE
|
||||||
ChMJT3BlblN0YWNrMREwDwYDVQQLEwhLZXlzdG9uZTElMCMGCSqGSIb3DQEJARYW
|
ChMJT3BlblN0YWNrMREwDwYDVQQLEwhLZXlzdG9uZTElMCMGCSqGSIb3DQEJARYW
|
||||||
a2V5c3RvbmVAb3BlbnN0YWNrLm9yZzEUMBIGA1UEAxMLU2VsZiBTaWduZWQCAREw
|
a2V5c3RvbmVAb3BlbnN0YWNrLm9yZzEUMBIGA1UEAxMLU2VsZiBTaWduZWQCAREw
|
||||||
BwYFKw4DAhowDQYJKoZIhvcNAQEBBQAEgYBhV5KrVjcdACPUNafkPY+lgCSlh6uc
|
BwYFKw4DAhowDQYJKoZIhvcNAQEBBQAEgYB3HICZ2Jj9edPkhmic5Td/qzod2FpQ
|
||||||
N55SATBcQmg1/argEUFg/cx2GcF7ftQV384iGepLEgsq+6om2wPw6DWA0RknpVLJ
|
tB5EUL32Qw33FrMo6ALxG2znmiR3F2rf2kSmOVpBRQgysnkVXjDGPuBt/qMq41VR
|
||||||
vMsHbWdGoXIZ5jRuAQTPtkXcJQOR677baDHvGJ+5zwBBDT2CmN2Tcv348+Xpjp7D
|
NvvoM+Cf2HtDYGFvyyO3QNRf9NLaFije71pRQUBFR8iEz0zjvdouyuHVZsbQuke5
|
||||||
hF/cmAXnYYo00g==
|
XdEgB8F3fQ6/Pg==
|
||||||
-----END CMS-----
|
-----END CMS-----
|
||||||
|
@@ -35,7 +35,7 @@ AQEwgaQwgZ4xCjAIBgNVBAUTATUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTES
|
|||||||
MBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQKEwlPcGVuU3RhY2sxETAPBgNVBAsT
|
MBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQKEwlPcGVuU3RhY2sxETAPBgNVBAsT
|
||||||
CEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZrZXlzdG9uZUBvcGVuc3RhY2sub3Jn
|
CEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZrZXlzdG9uZUBvcGVuc3RhY2sub3Jn
|
||||||
MRQwEgYDVQQDEwtTZWxmIFNpZ25lZAIBETAHBgUrDgMCGjANBgkqhkiG9w0BAQEF
|
MRQwEgYDVQQDEwtTZWxmIFNpZ25lZAIBETAHBgUrDgMCGjANBgkqhkiG9w0BAQEF
|
||||||
AASBgFizBVs3dCvlHx04nUHgXHpaA9RL+e3uaaNszK9UwCBpBlv8c6+74sz6i3+G
|
AASBgFbBja47P7p32dQ+wAXKDn9/JL/RjImAKvT/f8bBZxmc+SbnmpDd0lwH44eE
|
||||||
eYDIpL9bc6QgNJ6cKhmW5yLmS8/+mmAMAcm06bdWc7p/mqC3Ild+xmQ+OHDYyyJg
|
cVFfq55Ny0+SmYaLP6ZgtvGYpiP9TqxuySHQP1EKxAmIFA2yRa3YTviTsSvH0OCC
|
||||||
DvtRUgtidFUCvxne/nwKK0WHJlpY+iwWqel5F+Xqmb8vheb1
|
WEnlYLxxdqh97whF3H5bDOMh6aVEyHPRS2m8oOqcPW+5o4gX
|
||||||
-----END CMS-----
|
-----END CMS-----
|
||||||
|
@@ -10,8 +10,8 @@ dXNlcl9uYW1lMSJ9fX0xggFJMIIBRQIBATCBpDCBnjEKMAgGA1UEBRMBNTELMAkG
|
|||||||
A1UEBhMCVVMxCzAJBgNVBAgTAkNBMRIwEAYDVQQHEwlTdW5ueXZhbGUxEjAQBgNV
|
A1UEBhMCVVMxCzAJBgNVBAgTAkNBMRIwEAYDVQQHEwlTdW5ueXZhbGUxEjAQBgNV
|
||||||
BAoTCU9wZW5TdGFjazERMA8GA1UECxMIS2V5c3RvbmUxJTAjBgkqhkiG9w0BCQEW
|
BAoTCU9wZW5TdGFjazERMA8GA1UECxMIS2V5c3RvbmUxJTAjBgkqhkiG9w0BCQEW
|
||||||
FmtleXN0b25lQG9wZW5zdGFjay5vcmcxFDASBgNVBAMTC1NlbGYgU2lnbmVkAgER
|
FmtleXN0b25lQG9wZW5zdGFjay5vcmcxFDASBgNVBAMTC1NlbGYgU2lnbmVkAgER
|
||||||
MAcGBSsOAwIaMA0GCSqGSIb3DQEBAQUABIGAITCwkW7cAbcWbCBD5GfGMGHB9hP/
|
MAcGBSsOAwIaMA0GCSqGSIb3DQEBAQUABIGARUpIQsA8a2g9HC1ZjpX37oXZz/3n
|
||||||
UagaCZ8HFhlzjdQoJjvC+Mtu+3lWlwqPGR8ztY9kBc1401S2qJxD4FGo+M3CkNpF
|
hdpRUyKTWbjd2mi2rC68DVnyHLhZ3SQfBN896fPG1HW6LFuFrserYwBYVrX1rGDz
|
||||||
s0mtaT2PUJfFkDCzHqeBQNFHyZeqLjkPYnokPcw4s3i60DBGTFfAiUT3xumn8a4h
|
OS2dBigPzeP1301X3IRdbDrnMvzmEX2eTSmBEZ/CMMOXTTSYAYutyOtzATW9v639
|
||||||
C+zEAee35C/A+Iw=
|
rRT4L/yQFcIxfCo=
|
||||||
-----END CMS-----
|
-----END CMS-----
|
||||||
|
11
examples/pki/cms/auth_v3_token_revoked.json
Normal file
11
examples/pki/cms/auth_v3_token_revoked.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{"token":
|
||||||
|
{"catalog": [{"endpoints": [{"adminURL": "http://127.0.0.1:8776/v1/64b6f3fbcc53435e8a60fcf89bb6617a", "region": "regionOne", "internalURL": "http://127.0.0.1:8776/v1/64b6f3fbcc53435e8a60fcf89bb6617a", "publicURL": "http://127.0.0.1:8776/v1/64b6f3fbcc53435e8a60fcf89bb6617a"}], "endpoints_links": [], "type": "volume", "name": "volume"},
|
||||||
|
{"endpoints": [{"adminURL": "http://127.0.0.1:9292/v1", "region": "regionOne", "internalURL": "http://127.0.0.1:9292/v1", "publicURL": "http://127.0.0.1:9292/v1"}], "endpoints_links": [], "type": "image", "name": "glance"},
|
||||||
|
{"endpoints": [{"adminURL": "http://127.0.0.1:8774/v1.1/64b6f3fbcc53435e8a60fcf89bb6617a", "region": "regionOne", "internalURL": "http://127.0.0.1:8774/v1.1/64b6f3fbcc53435e8a60fcf89bb6617a", "publicURL": "http://127.0.0.1:8774/v1.1/64b6f3fbcc53435e8a60fcf89bb6617a"}], "endpoints_links": [], "type": "compute", "name": "nova"},
|
||||||
|
{"endpoints": [{"adminURL": "http://127.0.0.1:35357/v3", "region": "RegionOne", "internalURL": "http://127.0.0.1:35357/v3", "publicURL": "http://127.0.0.1:5000/v3"}], "endpoints_links": [], "type": "identity", "name": "keystone"}],
|
||||||
|
"expires": "2012-06-02T14:47:34Z",
|
||||||
|
"project": {"enabled": true, "description": null, "name": "tenant_name1", "id": "tenant_id1", "domain": {"id": "domain_id1", "name": "domain_name1"}},
|
||||||
|
"user": {"name": "revoked_username1", "id": "revoked_user_id1", "domain": {"id": "domain_id1", "name": "domain_name1"}},
|
||||||
|
"roles": [{"name": "role1"}, {"name": "role2"}]
|
||||||
|
}
|
||||||
|
}
|
44
examples/pki/cms/auth_v3_token_revoked.pem
Normal file
44
examples/pki/cms/auth_v3_token_revoked.pem
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
-----BEGIN CMS-----
|
||||||
|
MIIHsgYJKoZIhvcNAQcCoIIHozCCB58CAQExCTAHBgUrDgMCGjCCBkAGCSqGSIb3
|
||||||
|
DQEHAaCCBjEEggYteyJ0b2tlbiI6DQogICAgeyJjYXRhbG9nIjogW3siZW5kcG9p
|
||||||
|
bnRzIjogW3siYWRtaW5VUkwiOiAiaHR0cDovLzEyNy4wLjAuMTo4Nzc2L3YxLzY0
|
||||||
|
YjZmM2ZiY2M1MzQzNWU4YTYwZmNmODliYjY2MTdhIiwgInJlZ2lvbiI6ICJyZWdp
|
||||||
|
b25PbmUiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cDovLzEyNy4wLjAuMTo4Nzc2L3Yx
|
||||||
|
LzY0YjZmM2ZiY2M1MzQzNWU4YTYwZmNmODliYjY2MTdhIiwgInB1YmxpY1VSTCI6
|
||||||
|
ICJodHRwOi8vMTI3LjAuMC4xOjg3NzYvdjEvNjRiNmYzZmJjYzUzNDM1ZThhNjBm
|
||||||
|
Y2Y4OWJiNjYxN2EifV0sICJlbmRwb2ludHNfbGlua3MiOiBbXSwgInR5cGUiOiAi
|
||||||
|
dm9sdW1lIiwgIm5hbWUiOiAidm9sdW1lIn0sDQogICAgICAgICAgICAgICAgIHsi
|
||||||
|
ZW5kcG9pbnRzIjogW3siYWRtaW5VUkwiOiAiaHR0cDovLzEyNy4wLjAuMTo5Mjky
|
||||||
|
L3YxIiwgInJlZ2lvbiI6ICJyZWdpb25PbmUiLCAiaW50ZXJuYWxVUkwiOiAiaHR0
|
||||||
|
cDovLzEyNy4wLjAuMTo5MjkyL3YxIiwgInB1YmxpY1VSTCI6ICJodHRwOi8vMTI3
|
||||||
|
LjAuMC4xOjkyOTIvdjEifV0sICJlbmRwb2ludHNfbGlua3MiOiBbXSwgInR5cGUi
|
||||||
|
OiAiaW1hZ2UiLCAibmFtZSI6ICJnbGFuY2UifSwNCiAgICAgICAgICAgICAgICAg
|
||||||
|
eyJlbmRwb2ludHMiOiBbeyJhZG1pblVSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjg3
|
||||||
|
NzQvdjEuMS82NGI2ZjNmYmNjNTM0MzVlOGE2MGZjZjg5YmI2NjE3YSIsICJyZWdp
|
||||||
|
b24iOiAicmVnaW9uT25lIiwgImludGVybmFsVVJMIjogImh0dHA6Ly8xMjcuMC4w
|
||||||
|
LjE6ODc3NC92MS4xLzY0YjZmM2ZiY2M1MzQzNWU4YTYwZmNmODliYjY2MTdhIiwg
|
||||||
|
InB1YmxpY1VSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjg3NzQvdjEuMS82NGI2ZjNm
|
||||||
|
YmNjNTM0MzVlOGE2MGZjZjg5YmI2NjE3YSJ9XSwgImVuZHBvaW50c19saW5rcyI6
|
||||||
|
IFtdLCAidHlwZSI6ICJjb21wdXRlIiwgIm5hbWUiOiAibm92YSJ9LA0KICAgICAg
|
||||||
|
ICAgICAgICAgICB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8x
|
||||||
|
MjcuMC4wLjE6MzUzNTcvdjMiLCAicmVnaW9uIjogIlJlZ2lvbk9uZSIsICJpbnRl
|
||||||
|
cm5hbFVSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjM1MzU3L3YzIiwgInB1YmxpY1VS
|
||||||
|
TCI6ICJodHRwOi8vMTI3LjAuMC4xOjUwMDAvdjMifV0sICJlbmRwb2ludHNfbGlu
|
||||||
|
a3MiOiBbXSwgInR5cGUiOiAiaWRlbnRpdHkiLCAibmFtZSI6ICJrZXlzdG9uZSJ9
|
||||||
|
XSwNCiAgICAgImV4cGlyZXMiOiAiMjAxMi0wNi0wMlQxNDo0NzozNFoiLA0KICAg
|
||||||
|
ICAicHJvamVjdCI6IHsiZW5hYmxlZCI6IHRydWUsICJkZXNjcmlwdGlvbiI6IG51
|
||||||
|
bGwsICJuYW1lIjogInRlbmFudF9uYW1lMSIsICJpZCI6ICJ0ZW5hbnRfaWQxIiwg
|
||||||
|
ImRvbWFpbiI6IHsiaWQiOiAiZG9tYWluX2lkMSIsICJuYW1lIjogImRvbWFpbl9u
|
||||||
|
YW1lMSJ9fSwNCiAgICAgInVzZXIiOiB7Im5hbWUiOiAicmV2b2tlZF91c2VybmFt
|
||||||
|
ZTEiLCAiaWQiOiAicmV2b2tlZF91c2VyX2lkMSIsICJkb21haW4iOiB7ImlkIjog
|
||||||
|
ImRvbWFpbl9pZDEiLCAibmFtZSI6ICJkb21haW5fbmFtZTEifX0sDQogICAgICJy
|
||||||
|
b2xlcyI6IFt7Im5hbWUiOiAicm9sZTEifSwgeyJuYW1lIjogInJvbGUyIn1dDQog
|
||||||
|
ICAgfQ0KfQ0KMYIBSTCCAUUCAQEwgaQwgZ4xCjAIBgNVBAUTATUxCzAJBgNVBAYT
|
||||||
|
AlVTMQswCQYDVQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQKEwlP
|
||||||
|
cGVuU3RhY2sxETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZrZXlz
|
||||||
|
dG9uZUBvcGVuc3RhY2sub3JnMRQwEgYDVQQDEwtTZWxmIFNpZ25lZAIBETAHBgUr
|
||||||
|
DgMCGjANBgkqhkiG9w0BAQEFAASBgD8S/YsERhsYgxNTHQ+AohaWBCxS2eMJDG1e
|
||||||
|
lZBabrMHra5DkP5PAeHKApcagNo4UfcN9dVeGFi+VzHD/lLHaR1r1VI0SiSb+pQ4
|
||||||
|
dTZGEtMVsfPbReWS9RaLt3YePGkZ410Nhx2STF1kmMmVhGGXDzyMbIGGQu6BmQsF
|
||||||
|
G8+izx9v
|
||||||
|
-----END CMS-----
|
11
examples/pki/cms/auth_v3_token_scoped.json
Normal file
11
examples/pki/cms/auth_v3_token_scoped.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{"token":
|
||||||
|
{"catalog": [{"endpoints": [{"adminURL": "http://127.0.0.1:8776/v1/64b6f3fbcc53435e8a60fcf89bb6617a", "region": "regionOne", "internalURL": "http://127.0.0.1:8776/v1/64b6f3fbcc53435e8a60fcf89bb6617a", "publicURL": "http://127.0.0.1:8776/v1/64b6f3fbcc53435e8a60fcf89bb6617a"}], "endpoints_links": [], "type": "volume", "name": "volume"},
|
||||||
|
{"endpoints": [{"adminURL": "http://127.0.0.1:9292/v1", "region": "regionOne", "internalURL": "http://127.0.0.1:9292/v1", "publicURL": "http://127.0.0.1:9292/v1"}], "endpoints_links": [], "type": "image", "name": "glance"},
|
||||||
|
{"endpoints": [{"adminURL": "http://127.0.0.1:8774/v1.1/64b6f3fbcc53435e8a60fcf89bb6617a", "region": "regionOne", "internalURL": "http://127.0.0.1:8774/v1.1/64b6f3fbcc53435e8a60fcf89bb6617a", "publicURL": "http://127.0.0.1:8774/v1.1/64b6f3fbcc53435e8a60fcf89bb6617a"}], "endpoints_links": [], "type": "compute", "name": "nova"},
|
||||||
|
{"endpoints": [{"adminURL": "http://127.0.0.1:35357/v3", "region": "RegionOne", "internalURL": "http://127.0.0.1:35357/v3", "publicURL": "http://127.0.0.1:5000/v3"}], "endpoints_links": [], "type": "identity", "name": "keystone"}],
|
||||||
|
"expires": "2012-06-02T14:47:34Z",
|
||||||
|
"project": {"enabled": true, "description": null, "name": "tenant_name1", "id": "tenant_id1", "domain": {"id": "domain_id1", "name": "domain_name1"}},
|
||||||
|
"user": {"name": "user_name1", "id": "user_id1", "domain": {"id": "domain_id1", "name": "domain_name1"}},
|
||||||
|
"roles": [{"name": "role1"}, {"name": "role2"}]
|
||||||
|
}
|
||||||
|
}
|
42
examples/pki/cms/auth_v3_token_scoped.pem
Normal file
42
examples/pki/cms/auth_v3_token_scoped.pem
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
-----BEGIN CMS-----
|
||||||
|
MIIHeAYJKoZIhvcNAQcCoIIHaTCCB2UCAQExCTAHBgUrDgMCGjCCBgYGCSqGSIb3
|
||||||
|
DQEHAaCCBfcEggXzeyJ0b2tlbiI6IA0KCXsiY2F0YWxvZyI6IFt7ImVuZHBvaW50
|
||||||
|
cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6ODc3Ni92MS82NGI2
|
||||||
|
ZjNmYmNjNTM0MzVlOGE2MGZjZjg5YmI2NjE3YSIsICJyZWdpb24iOiAicmVnaW9u
|
||||||
|
T25lIiwgImludGVybmFsVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6ODc3Ni92MS82
|
||||||
|
NGI2ZjNmYmNjNTM0MzVlOGE2MGZjZjg5YmI2NjE3YSIsICJwdWJsaWNVUkwiOiAi
|
||||||
|
aHR0cDovLzEyNy4wLjAuMTo4Nzc2L3YxLzY0YjZmM2ZiY2M1MzQzNWU4YTYwZmNm
|
||||||
|
ODliYjY2MTdhIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogInZv
|
||||||
|
bHVtZSIsICJuYW1lIjogInZvbHVtZSJ9LA0KCQkJICAgICB7ImVuZHBvaW50cyI6
|
||||||
|
IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xMjcuMC4wLjE6OTI5Mi92MSIsICJyZWdp
|
||||||
|
b24iOiAicmVnaW9uT25lIiwgImludGVybmFsVVJMIjogImh0dHA6Ly8xMjcuMC4w
|
||||||
|
LjE6OTI5Mi92MSIsICJwdWJsaWNVUkwiOiAiaHR0cDovLzEyNy4wLjAuMTo5Mjky
|
||||||
|
L3YxIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogImltYWdlIiwg
|
||||||
|
Im5hbWUiOiAiZ2xhbmNlIn0sDQoJCQkgICAgIHsiZW5kcG9pbnRzIjogW3siYWRt
|
||||||
|
aW5VUkwiOiAiaHR0cDovLzEyNy4wLjAuMTo4Nzc0L3YxLjEvNjRiNmYzZmJjYzUz
|
||||||
|
NDM1ZThhNjBmY2Y4OWJiNjYxN2EiLCAicmVnaW9uIjogInJlZ2lvbk9uZSIsICJp
|
||||||
|
bnRlcm5hbFVSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjg3NzQvdjEuMS82NGI2ZjNm
|
||||||
|
YmNjNTM0MzVlOGE2MGZjZjg5YmI2NjE3YSIsICJwdWJsaWNVUkwiOiAiaHR0cDov
|
||||||
|
LzEyNy4wLjAuMTo4Nzc0L3YxLjEvNjRiNmYzZmJjYzUzNDM1ZThhNjBmY2Y4OWJi
|
||||||
|
NjYxN2EifV0sICJlbmRwb2ludHNfbGlua3MiOiBbXSwgInR5cGUiOiAiY29tcHV0
|
||||||
|
ZSIsICJuYW1lIjogIm5vdmEifSwNCgkJCSAgICAgeyJlbmRwb2ludHMiOiBbeyJh
|
||||||
|
ZG1pblVSTCI6ICJodHRwOi8vMTI3LjAuMC4xOjM1MzU3L3YzIiwgInJlZ2lvbiI6
|
||||||
|
ICJSZWdpb25PbmUiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cDovLzEyNy4wLjAuMToz
|
||||||
|
NTM1Ny92MyIsICJwdWJsaWNVUkwiOiAiaHR0cDovLzEyNy4wLjAuMTo1MDAwL3Yz
|
||||||
|
In1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogImlkZW50aXR5Iiwg
|
||||||
|
Im5hbWUiOiAia2V5c3RvbmUifV0sDQoJICJleHBpcmVzIjogIjIwMTItMDYtMDJU
|
||||||
|
MTQ6NDc6MzRaIiwNCgkgInByb2plY3QiOiB7ImVuYWJsZWQiOiB0cnVlLCAiZGVz
|
||||||
|
Y3JpcHRpb24iOiBudWxsLCAibmFtZSI6ICJ0ZW5hbnRfbmFtZTEiLCAiaWQiOiAi
|
||||||
|
dGVuYW50X2lkMSIsICJkb21haW4iOiB7ImlkIjogImRvbWFpbl9pZDEiLCAibmFt
|
||||||
|
ZSI6ICJkb21haW5fbmFtZTEifX0sDQoJICJ1c2VyIjogeyJuYW1lIjogInVzZXJf
|
||||||
|
bmFtZTEiLCAiaWQiOiAidXNlcl9pZDEiLCAiZG9tYWluIjogeyJpZCI6ICJkb21h
|
||||||
|
aW5faWQxIiwgIm5hbWUiOiAiZG9tYWluX25hbWUxIn19LA0KCSAicm9sZXMiOiBb
|
||||||
|
eyJuYW1lIjogInJvbGUxIn0sIHsibmFtZSI6ICJyb2xlMiJ9XQ0KCSB9DQp9DQox
|
||||||
|
ggFJMIIBRQIBATCBpDCBnjEKMAgGA1UEBRMBNTELMAkGA1UEBhMCVVMxCzAJBgNV
|
||||||
|
BAgTAkNBMRIwEAYDVQQHEwlTdW5ueXZhbGUxEjAQBgNVBAoTCU9wZW5TdGFjazER
|
||||||
|
MA8GA1UECxMIS2V5c3RvbmUxJTAjBgkqhkiG9w0BCQEWFmtleXN0b25lQG9wZW5z
|
||||||
|
dGFjay5vcmcxFDASBgNVBAMTC1NlbGYgU2lnbmVkAgERMAcGBSsOAwIaMA0GCSqG
|
||||||
|
SIb3DQEBAQUABIGAMyJ/o4F6kFPZJ1oGPOaJywv7WKia3x2IOxlDSGBOSfiH64MA
|
||||||
|
Im3kv3AUSfVd9S+ulTHHWST9XGD3eWx8dBMVYO/RcFk6+qala2ryrUYhlOWMkFsB
|
||||||
|
LCNl0HJoUElEPJuqrwVW7Uy90IE0oGbW5uxsm7qoGBHp1B5z2CikaJBKhgg=
|
||||||
|
-----END CMS-----
|
@@ -6,7 +6,7 @@ MYIBSTCCAUUCAQEwgaQwgZ4xCjAIBgNVBAUTATUxCzAJBgNVBAYTAlVTMQswCQYD
|
|||||||
VQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQKEwlPcGVuU3RhY2sx
|
VQQIEwJDQTESMBAGA1UEBxMJU3Vubnl2YWxlMRIwEAYDVQQKEwlPcGVuU3RhY2sx
|
||||||
ETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZrZXlzdG9uZUBvcGVu
|
ETAPBgNVBAsTCEtleXN0b25lMSUwIwYJKoZIhvcNAQkBFhZrZXlzdG9uZUBvcGVu
|
||||||
c3RhY2sub3JnMRQwEgYDVQQDEwtTZWxmIFNpZ25lZAIBETAHBgUrDgMCGjANBgkq
|
c3RhY2sub3JnMRQwEgYDVQQDEwtTZWxmIFNpZ25lZAIBETAHBgUrDgMCGjANBgkq
|
||||||
hkiG9w0BAQEFAASBgDNDhvViAo8EqTVVvZ00pWUWjajTwoV1w1os1XDJ1XacBUo+
|
hkiG9w0BAQEFAASBgEqJBkjT4owaIANEzzVTS17GG4VR/s1rQOAajqYCSt+PEsz4
|
||||||
rsh7gljIIVuvHL2F9C660I5jxhb7QVsTge3CwSiDmexxBAPOs4lNR5hFH7FdT47b
|
H1QVsstP/FznwrfrphEdAvosWs3vTx9GgDm1wI5gBeAP56rbtGqzsqZ1PrbzjRpI
|
||||||
OK2qd0XnRjo5F7odUxIkozuQ/UISaNTPeWxGEMNVhpTXo2Dwn8wN1wrs/Z2E
|
5jHjMF99oMdVeazRCk4CaaoiFo9Rb7A4HfEGHAhoyOieW90Pz3PuLcQqLqSS
|
||||||
-----END CMS-----
|
-----END CMS-----
|
||||||
|
@@ -203,7 +203,7 @@ function check_openssl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function gen_sample_cms {
|
function gen_sample_cms {
|
||||||
for json_file in "${CMS_DIR}/auth_token_revoked.json" "${CMS_DIR}/auth_token_unscoped.json" "${CMS_DIR}/auth_token_scoped.json" "${CMS_DIR}/revocation_list.json"
|
for json_file in "${CMS_DIR}/auth_token_revoked.json" "${CMS_DIR}/auth_token_unscoped.json" "${CMS_DIR}/auth_token_scoped.json" "${CMS_DIR}/revocation_list.json" "${CMS_DIR}/auth_v3_token_scoped.json" "${CMS_DIR}/auth_v3_token_revoked.json"
|
||||||
do
|
do
|
||||||
openssl cms -sign -in $json_file -nosmimecap -signer $CERTS_DIR/signing_cert.pem -inkey $PRIVATE_DIR/signing_key.pem -outform PEM -nodetach -nocerts -noattr -out ${json_file/.json/.pem}
|
openssl cms -sign -in $json_file -nosmimecap -signer $CERTS_DIR/signing_cert.pem -inkey $PRIVATE_DIR/signing_key.pem -outform PEM -nodetach -nocerts -noattr -out ${json_file/.json/.pem}
|
||||||
done
|
done
|
||||||
|
@@ -1,16 +1,16 @@
|
|||||||
-----BEGIN PRIVATE KEY-----
|
-----BEGIN PRIVATE KEY-----
|
||||||
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMXgnd5wlHApGxZ5
|
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOw4quFzQ/xbUOKu
|
||||||
8LrpEkHU995lT9PxtMgkp0tpFhg7R5HQw9K7TfQk5NHB28hNzf8UE/c0z2pJXggP
|
LtXdiZLPA0Wi38iGEa+T8tp7j3US44wAamckdZb4cq9/Qx03EBKd2mcJvUoPrLnS
|
||||||
nAzvdx27NQeJGX5CWsi6fITZ8vH/+SxgfxxC+CE/6BkDpzw21MgBtq11vWL7XVax
|
lnHQMH2VGA1whZpZTWqt8ydQdDYB1SUKeUoxcjq8EKl8X8Sd3dP5amlyFCOIGVhF
|
||||||
NeU12Ax889U66i3CrObuCYt2mbpzAgMBAAECgYEAligxJE9CFSrcR14Zc3zSQeqe
|
yAXYgaYlmf+s6FIzpY55Uy2zX+nZAgMBAAECgYEAkSGL03InHf/YpTzRJ7Kx2JH5
|
||||||
fcFbpnXQveAyo2MHRTQWx2wobY19RjuI+DOn2IRSQbK2w+zrSLiMBonx3U8Kj8nx
|
d6pHBYNhkFc8yQFLNWnChfynYvFikbvZcnuk92kiJd34FoBEXSFeRNjed9SqRP+i
|
||||||
A4EQ75GLJEEr81TvBoIZSJAqrowNrkXNq8W++qwjlGXRjKiBAYlKMrFvR4lij4XN
|
gBXy8nqDnnm6af/URHz1H00pbiTAS5xSJZ2XUFCAa0eJEdDv8bEWdTbhfbYc1Lt2
|
||||||
6cdB7kGdSIUmhvC20sECQQD4ebCGfsgFWnrqOrco6T9eQRTvP3+gJuqYXYLuVSTC
|
FISQ1b0hO7gqI1cvoAUCQQD+RFOg1N6eaIiOowQL5YrT8+EywWZqDHAPAYpQvvdP
|
||||||
R4gHxT5QVXSZt/Hv3UWJ0BLDbyLzLGHf30w1AqgwsUP5AkEAy96qXq6j2+IRa5w7
|
UxZtKA7lyiA8fy5bVGc3zmv6D3ZpNKPh5p4WpABvKC+DAkEA7dTaWrsJZr2V1plC
|
||||||
2G+KZHF5N/MK/Hyy27Jw67GBVeGQj1Dwq2ZGAJBZrfXjTtQQAGdQ7EfOTCAOzHgX
|
71JmexyQNJBrCQb3zoJo2oImuAVXPlj3aNhwJftPaZXt6brICBWfDH6CD/YH7rrt
|
||||||
2Bx0ywJAYqfGbBBIkL+VEA0SDh9WNrE2g6u9m7P371kplEGgH7dRDmzFShYz/pin
|
6HyGcwJAAdrBuWSUExe0F0Y9G1EbSBx5QgODGbbpglKCjcA20Y9LlJQ8N5TX01ki
|
||||||
aep8IrTHzmsBAHY9wiqh0mZkqzim2QJADTYdxkr89WfeByI1wp3f0wiDeXu3j4sp
|
H2xoLFIHG5XNSUsm/tjNwmCD2Eu0vQJBAK1XVAaJB+MgDtOoRMbVUegs+1W0ZK7h
|
||||||
MBGNPcjf/8fBTXhKUGEtUiYImbxggaA+dTg8x0MT/FzreJajvO6DJwJARMc6rhzv
|
qz+SgQWxkrLRAbNpeHmsNqEYN9sG8a5G+oAZ8iBTHEyxzzpKeBfYms0CQB1EUSoS
|
||||||
aTlm4IgApcDPBeuz6SKex9TfvDUJpqACoFM4lMgyHADi9NrJBslxFHPP5eTiM2Ag
|
I96Wh4Mae7TXak6aSfl/dF2c3vNB2oYjZTN58JM8l731bh2rI4/0kSPbV5Mtnmk4
|
||||||
vI7EuW837e6raQ==
|
AOLVl+ZJjR6y90I=
|
||||||
-----END PRIVATE KEY-----
|
-----END PRIVATE KEY-----
|
||||||
|
@@ -1,16 +1,16 @@
|
|||||||
-----BEGIN PRIVATE KEY-----
|
-----BEGIN PRIVATE KEY-----
|
||||||
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALqEAuiAajMQufOO
|
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKYm0YA4g5eLu96H
|
||||||
XP2ZC7HXEG0x6iKWCRxJMBKMcnhI8IhhX4mZomfdaUhTXPTH43SZzfm3v53VUtfc
|
lUI5IjQTflWGEkPNlCaEL7qGG82J3QIpPT+t73+NpbtrUjLPFP6DZfxKh7yPdq2Y
|
||||||
NZ66yb1f7nVbH+iWVpEz1+R8sZ5ZcM5wh6T+4H7zGcxrKs1pUnYg+pnEWwmEV/YQ
|
Rqc6/cEVQELmimJaz5NUp/YSRxY46LUh2Eqvor5Ru1pi6CK0JGGMxa96/soomLcy
|
||||||
gmrht44QrSEiDQlWDGEBh+kEom/bAgMBAAECgYBywfSUHya4gqsW2toGQps6cauu
|
9HL+vKG4yhMBjGWrJ/eZyUo6gMRVAgMBAAECgYAmfB9Sn8R7ObaOWMFN0YYGoe1F
|
||||||
s85uN0glujY0w2tO7Pnpv5errvaI12cG1BvWlAIz5MohwlfIgc919wyavCyRJgQN
|
SgS5B8klEsErZxzRgvlaIss5EMTEur6EptsnQagPO8hHo8vE9UX796WF3rgfvYlm
|
||||||
xQo5v5MEMYKKc8ppmXpRr03HLwoPLOHVs6UHRJQT9dhOBfmLzMZIP7P/lJlt2/1X
|
rWzADFF9JQeb1CRy2wdPEB5wHYWksynKaRhPt6byv2qNqmTKB6JH3fbm1q7Hkrw6
|
||||||
Okwxft/PWorczKX1aQJBAORlVqP+Cj4r5kz1A77agnCvINioV1VM5n9PvzPVzYLH
|
BjDvuadpdrWBzTPOEQJBANIdSkW2Yo0HVqZz428Ng1zXQQkwlONrFmtHV5OrPLKs
|
||||||
5r1I53RWFooy1Hx2RUCmtSRQMZMeI9iGMg9c8d3LJ4UCQQDRDuIAd3AoNBcwXKC4
|
cu5qE2hGHlu3fxr/Gb/bqLwaCx+LUUjgEopChwQyQU8CQQDKb7vefl8JDRYNcLPM
|
||||||
BPNkbI9BSqnpIdZo87BzpY8rJ/ra3VHMHuq4w+gQsmmEy3pp01AZd1uBqv3s1wHy
|
CCT7D93g+kYW3ONziBYwQ0sOpSfIS1WQfNRVvsHFAb9IF9g+qgOo4rELEsDeKkUo
|
||||||
muffAkEAn2ZmiH+lUGy9B5q8qXfBL7naF7utb/gCqnnSvO+LxamUTSjTeKsYgg0l
|
C88bAkAFHruZmUkrgJtG8RoAscaas5AdJjbql8hzEsj6iziube9bCfCxIMxKld0e
|
||||||
pVO503xF0fkyEDYp2FUYHQbGOwAtLQJAHkJ3N/YRx9/yU0+0+63LxQdpnNu/yDzb
|
DktVVof1FXlh6mYvrW4mOlrJ6mOXAkAgCoFc3Pmj0BtucykyIRPhXQiMZHCVi87A
|
||||||
mglbywF1vZtl1fQe+NqowuGoX3JTj6McLuElQOpj1lr3siZU49bEJQJBANRazUzj
|
aYjBiNUnc0KRtELNxMRC8hdvXDBvc765ZGWB5KeLDiPSxjP9+6iDAkA+G1v4y4FP
|
||||||
Xfoja7wGuZ3PwHdxxoNDlJ2u0rYjcfK9VZuPGSz/25iCOkaar3OralJ3lfCWbFKA
|
r8jd6yPPORii1lTAnYAeoBvgqHj7l/2qi+QEYKIW7Q0pNx20BiO3YZoAgL7LoxyR
|
||||||
vvRp8Hl2Yk4hdKM=
|
EVbW0VXOpHxk
|
||||||
-----END PRIVATE KEY-----
|
-----END PRIVATE KEY-----
|
||||||
|
@@ -1,16 +1,16 @@
|
|||||||
-----BEGIN PRIVATE KEY-----
|
-----BEGIN PRIVATE KEY-----
|
||||||
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALVu4bjaOH33yAx0
|
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAM323GVGJ6UImf6n
|
||||||
WdpEqj4UDVsLxVjWxEpIbOlDlc6IfJd+cUriQtxf6ahjxtzLPERS81SnwZmrICWZ
|
fz9P+9MURBo0okaV/3ewyfSMri8DbM0sCqDtC43R1jIrHtEdnUU7kHguFXc09p9p
|
||||||
ngbOn733pULMTZktTJH+o7C74NdKwUSNxjlCeWUy+FqIQoje4ygoJRPpMdkp1wHN
|
HSRbblZ3TNUuZgfoLTNUUY5LETrXdlIQ8WQDqUZq2kSbUBWYkHOYlzmowoWa2hKU
|
||||||
O0ZERwRN9e8M5TIlx/LRtk+q8bT5AgMBAAECgYAmwq6EYFJrTvE0//JmN/8qzfvg
|
C1ifHcleI2dVMW+LIkDhXPEc4XO1AgMBAAECgYBOZfMKkaOxjA6iAjvLa7Sdag9q
|
||||||
dI5PoWpD+F8UInUxr2T2tHOdrOLd07vGVrKYXu7cJeCIOGKa4r02azAggioL/nE9
|
MjK6z4nIk4CsF4iN2K3ngyYgj1pgh0kTG5rFWpJssfmR5WjCUWS21RoEptDeZf/A
|
||||||
FgPpqEC+QROvLuhFsk1gLZ2pGQ06sveKZVMH22h59BKZkYlhjh5qd4vlmhPqkmPp
|
jRqzW3u493JAhyOjTK4DYbB9CwCmeGkoImC3nn2PrBgG1OPrSQMB3ODqVA2Pa1eF
|
||||||
gdXj7ZjDCJhhQdFVkQJBANp18k2mVksn8q29LMieVTSIZNN3ucDA1QHbim+3fp/O
|
omqKQmAqCCijtmllmQJBAOnpN3sjykUlGVWY7HxdBAOsQ5DkkCXL6ZSjA3pRYvJQ
|
||||||
GxCzU7Mv1Xfnu1zoRFu5/sF3YG0Zy3TGPDrEljBC3rUCQQDUnBjVFXL35OkBZqXW
|
12pKELZyxZ8GtVCFvOjaCpdxL+1MsRHkEfZpWz9o9BsCQQDhagjUFbgAQzo/TH1X
|
||||||
taJPzGbsPoqAO+Ls2juS97zNzeGxUNhvcKuEvHO63PXqDxp1535DpvJEBN1rT2FF
|
iblrnWUi7rs+IIDOF48qy/t1FKFlyCHbMYQLB/rPSN1G+5uMEapCuOBpVQsO9v5n
|
||||||
iaO1AkEAt/QTWWFUTqrPxY6DNFdm5fpn9E1fg7icZJkKBDJeFJCH59MpCryfovzl
|
wJRvAkBQXOPG1sEDiH9vvR5ii8J5UJHWEfDES45wlqD3QUbxYXzg85lSVZQ30qIw
|
||||||
n0ERtq9ynlQ4RQYwdR8rvkylLvRP9QJAOiXHFOAc5XeR0nREfwiGL9TzgUFJl/DJ
|
jAIfLeo9pZGFwbeEIgtZ0VCcNH7JAkBK3FEkRjY+eBUvEnMKEGYw9CuzZz9uCZNd
|
||||||
C4ZULMnctVzNkTVPPItQHal87WppR26CCiUZ/161e6zo8eRv8hjG0QJABWqfYQuK
|
Xnughe/z2S8kw0tjJVWp6DOGhbdfLI5i/TbjQ8zbjm/Gv4aL5GwnAkEA42UWJKNQ
|
||||||
dWH8nxlXS+NFUDbsCdL+XpOVE7iEH7hvSw/A/kz40mLx8sDp/Fz1ysrogR/L+NGC
|
ztq73xmVmihToMjMe6k2DDPQpq+e2b/522Vz1ZDJlIV9tpoykFX2XiPnRz1o1oWd
|
||||||
Vrlwm4q/WYJO0Q==
|
DXQBvYeFzthvKA==
|
||||||
-----END PRIVATE KEY-----
|
-----END PRIVATE KEY-----
|
||||||
|
@@ -61,35 +61,69 @@ HTTP_X_IDENTITY_STATUS
|
|||||||
The underlying service will only see a value of 'Invalid' if the Middleware
|
The underlying service will only see a value of 'Invalid' if the Middleware
|
||||||
is configured to run in 'delay_auth_decision' mode
|
is configured to run in 'delay_auth_decision' mode
|
||||||
|
|
||||||
HTTP_X_TENANT_ID
|
HTTP_X_DOMAIN_ID
|
||||||
Identity service managed unique identifier, string
|
Identity service managed unique identifier, string. Only present if
|
||||||
|
this is a domain-scoped token.
|
||||||
|
|
||||||
HTTP_X_TENANT_NAME
|
HTTP_X_DOMAIN_NAME
|
||||||
Unique tenant identifier, string
|
Unique domain name, string. Only present if this is a domain-scoped token.
|
||||||
|
|
||||||
|
HTTP_X_PROJECT_ID
|
||||||
|
Identity service managed unique identifier, string. Only present if
|
||||||
|
this is a project-scoped token.
|
||||||
|
|
||||||
|
HTTP_X_PROJECT_NAME
|
||||||
|
Project name, unique within owning domain, string. Only present if
|
||||||
|
this is a project-scoped token.
|
||||||
|
|
||||||
|
HTTP_X_PROJECT_DOMAIN_ID
|
||||||
|
Identity service managed unique identifier of owning domain of
|
||||||
|
project, string. Only present if this is a project-scoped token.
|
||||||
|
|
||||||
|
HTTP_X_PROJECT_DOMAIN_NAME
|
||||||
|
Name of owning domain of project, string. Only present if this is a
|
||||||
|
project-scoped token.
|
||||||
|
|
||||||
HTTP_X_USER_ID
|
HTTP_X_USER_ID
|
||||||
Identity-service managed unique identifier, string
|
Identity-service managed unique identifier, string
|
||||||
|
|
||||||
HTTP_X_USER_NAME
|
HTTP_X_USER_NAME
|
||||||
Unique user identifier, string
|
User identifier, unique within owning domain, string
|
||||||
|
|
||||||
|
HTTP_X_USER_DOMAIN_ID
|
||||||
|
Identity service managed unique identifier of owning domain of user, string
|
||||||
|
|
||||||
|
HTTP_X_USER_DOMAIN_NAME
|
||||||
|
Name of owning domain of user, string
|
||||||
|
|
||||||
HTTP_X_ROLES
|
HTTP_X_ROLES
|
||||||
Comma delimited list of case-sensitive Roles
|
Comma delimited list of case-sensitive role names
|
||||||
|
|
||||||
HTTP_X_SERVICE_CATALOG
|
HTTP_X_SERVICE_CATALOG
|
||||||
json encoded keystone service catalog (optional).
|
json encoded keystone service catalog (optional).
|
||||||
|
|
||||||
|
HTTP_X_TENANT_ID
|
||||||
|
*Deprecated* in favor of HTTP_X_PROJECT_ID
|
||||||
|
Identity service managed unique identifier, string. For v3 tokens, this
|
||||||
|
will be set to the same value as HTTP_X_PROJECT_ID
|
||||||
|
|
||||||
|
HTTP_X_TENANT_NAME
|
||||||
|
*Deprecated* in favor of HTTP_X_PROJECT_NAME
|
||||||
|
Project identifier, unique within owning domain, string. For v3 tokens,
|
||||||
|
this will be set to the same value as HTTP_X_PROJECT_NAME
|
||||||
|
|
||||||
HTTP_X_TENANT
|
HTTP_X_TENANT
|
||||||
*Deprecated* in favor of HTTP_X_TENANT_ID and HTTP_X_TENANT_NAME
|
*Deprecated* in favor of HTTP_X_TENANT_ID and HTTP_X_TENANT_NAME
|
||||||
Keystone-assigned unique identifier, deprecated
|
Keystone-assigned unique identifier, string. For v3 tokens, this
|
||||||
|
will be set to the same value as HTTP_X_PROJECT_ID
|
||||||
|
|
||||||
HTTP_X_USER
|
HTTP_X_USER
|
||||||
*Deprecated* in favor of HTTP_X_USER_ID and HTTP_X_USER_NAME
|
*Deprecated* in favor of HTTP_X_USER_ID and HTTP_X_USER_NAME
|
||||||
Unique user name, string
|
User name, unique within owning domain, string
|
||||||
|
|
||||||
HTTP_X_ROLE
|
HTTP_X_ROLE
|
||||||
*Deprecated* in favor of HTTP_X_ROLES
|
*Deprecated* in favor of HTTP_X_ROLES
|
||||||
This is being renamed, and the new header contains the same data.
|
Will contain the same values as HTTP_X_ROLES.
|
||||||
|
|
||||||
OTHER ENVIRONMENT VARIABLES
|
OTHER ENVIRONMENT VARIABLES
|
||||||
---------------------------
|
---------------------------
|
||||||
@@ -157,8 +191,10 @@ opts = [
|
|||||||
cfg.IntOpt('auth_port', default=35357),
|
cfg.IntOpt('auth_port', default=35357),
|
||||||
cfg.StrOpt('auth_protocol', default='https'),
|
cfg.StrOpt('auth_protocol', default='https'),
|
||||||
cfg.StrOpt('auth_uri', default=None),
|
cfg.StrOpt('auth_uri', default=None),
|
||||||
|
cfg.StrOpt('auth_version', default=None),
|
||||||
cfg.BoolOpt('delay_auth_decision', default=False),
|
cfg.BoolOpt('delay_auth_decision', default=False),
|
||||||
cfg.BoolOpt('http_connect_timeout', default=None),
|
cfg.BoolOpt('http_connect_timeout', default=None),
|
||||||
|
cfg.StrOpt('http_handler', default=None),
|
||||||
cfg.StrOpt('admin_token', secret=True),
|
cfg.StrOpt('admin_token', secret=True),
|
||||||
cfg.StrOpt('admin_user'),
|
cfg.StrOpt('admin_user'),
|
||||||
cfg.StrOpt('admin_password', secret=True),
|
cfg.StrOpt('admin_password', secret=True),
|
||||||
@@ -171,10 +207,12 @@ opts = [
|
|||||||
cfg.ListOpt('memcache_servers'),
|
cfg.ListOpt('memcache_servers'),
|
||||||
cfg.IntOpt('token_cache_time', default=300),
|
cfg.IntOpt('token_cache_time', default=300),
|
||||||
cfg.StrOpt('memcache_security_strategy', default=None),
|
cfg.StrOpt('memcache_security_strategy', default=None),
|
||||||
cfg.StrOpt('memcache_secret_key', default=None, secret=True),
|
cfg.StrOpt('memcache_secret_key', default=None, secret=True)
|
||||||
]
|
]
|
||||||
CONF.register_opts(opts, group='keystone_authtoken')
|
CONF.register_opts(opts, group='keystone_authtoken')
|
||||||
|
|
||||||
|
LIST_OF_VERSIONS_TO_ATTEMPT = ['v3.0', 'v2.0']
|
||||||
|
|
||||||
|
|
||||||
def will_expire_soon(expiry):
|
def will_expire_soon(expiry):
|
||||||
""" Determines if expiration is about to occur.
|
""" Determines if expiration is about to occur.
|
||||||
@@ -221,10 +259,17 @@ class AuthProtocol(object):
|
|||||||
self.auth_host = self._conf_get('auth_host')
|
self.auth_host = self._conf_get('auth_host')
|
||||||
self.auth_port = int(self._conf_get('auth_port'))
|
self.auth_port = int(self._conf_get('auth_port'))
|
||||||
self.auth_protocol = self._conf_get('auth_protocol')
|
self.auth_protocol = self._conf_get('auth_protocol')
|
||||||
|
if not self._conf_get('http_handler'):
|
||||||
if self.auth_protocol == 'http':
|
if self.auth_protocol == 'http':
|
||||||
self.http_client_class = httplib.HTTPConnection
|
self.http_client_class = httplib.HTTPConnection
|
||||||
else:
|
else:
|
||||||
self.http_client_class = httplib.HTTPSConnection
|
self.http_client_class = httplib.HTTPSConnection
|
||||||
|
else:
|
||||||
|
# Really only used for unit testing, since we need to
|
||||||
|
# have a fake handler set up before we issue an http
|
||||||
|
# request to get the list of versions supported by the
|
||||||
|
# server at the end of this initialization
|
||||||
|
self.http_client_class = self._conf_get('http_handler')
|
||||||
|
|
||||||
self.auth_admin_prefix = self._conf_get('auth_admin_prefix')
|
self.auth_admin_prefix = self._conf_get('auth_admin_prefix')
|
||||||
self.auth_uri = self._conf_get('auth_uri')
|
self.auth_uri = self._conf_get('auth_uri')
|
||||||
@@ -289,6 +334,9 @@ class AuthProtocol(object):
|
|||||||
self.http_connect_timeout = (http_connect_timeout_cfg and
|
self.http_connect_timeout = (http_connect_timeout_cfg and
|
||||||
int(http_connect_timeout_cfg))
|
int(http_connect_timeout_cfg))
|
||||||
|
|
||||||
|
# Determine the highest api version we can use.
|
||||||
|
self.auth_version = self._choose_api_version()
|
||||||
|
|
||||||
def _assert_valid_memcache_protection_config(self):
|
def _assert_valid_memcache_protection_config(self):
|
||||||
if self._memcache_security_strategy:
|
if self._memcache_security_strategy:
|
||||||
if self._memcache_security_strategy not in ('MAC', 'ENCRYPT'):
|
if self._memcache_security_strategy not in ('MAC', 'ENCRYPT'):
|
||||||
@@ -326,6 +374,60 @@ class AuthProtocol(object):
|
|||||||
else:
|
else:
|
||||||
return CONF.keystone_authtoken[name]
|
return CONF.keystone_authtoken[name]
|
||||||
|
|
||||||
|
def _choose_api_version(self):
|
||||||
|
""" Determine the api version that we should use."""
|
||||||
|
|
||||||
|
# If the configuration specifies an auth_version we will just
|
||||||
|
# assume that is correct and use it. We could, of course, check
|
||||||
|
# that this version is supported by the server, but in case
|
||||||
|
# there are some problems in the field, we want as little code
|
||||||
|
# as possible in the way of letting auth_token talk to the
|
||||||
|
# server.
|
||||||
|
if self._conf_get('auth_version'):
|
||||||
|
version_to_use = self._conf_get('auth_version')
|
||||||
|
self.LOG.info('Auth Token proceeding with requested %s apis',
|
||||||
|
version_to_use)
|
||||||
|
else:
|
||||||
|
version_to_use = None
|
||||||
|
versions_supported_by_server = self._get_supported_versions()
|
||||||
|
if versions_supported_by_server:
|
||||||
|
for version in LIST_OF_VERSIONS_TO_ATTEMPT:
|
||||||
|
if version in versions_supported_by_server:
|
||||||
|
version_to_use = version
|
||||||
|
break
|
||||||
|
if version_to_use:
|
||||||
|
self.LOG.info('Auth Token confirmed use of %s apis',
|
||||||
|
version_to_use)
|
||||||
|
else:
|
||||||
|
self.LOG.error(
|
||||||
|
'Attempted versions [%s] not in list supported by '
|
||||||
|
'server [%s]',
|
||||||
|
', '.join(LIST_OF_VERSIONS_TO_ATTEMPT),
|
||||||
|
', '.join(versions_supported_by_server))
|
||||||
|
raise ServiceError('No compatible apis supported by server')
|
||||||
|
return version_to_use
|
||||||
|
|
||||||
|
def _get_supported_versions(self):
|
||||||
|
versions = []
|
||||||
|
response, data = self._json_request('GET', '/')
|
||||||
|
if response.status != 300:
|
||||||
|
self.LOG.error('Unable to get version info from keystone: %s' %
|
||||||
|
response.status)
|
||||||
|
raise ServiceError('Unable to get version info from keystone')
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
for version in data['versions']['values']:
|
||||||
|
versions.append(version['id'])
|
||||||
|
except KeyError:
|
||||||
|
self.LOG.error(
|
||||||
|
'Invalid version response format from server', data)
|
||||||
|
raise ServiceError('Unable to parse version response '
|
||||||
|
'from keystone')
|
||||||
|
|
||||||
|
self.LOG.debug('Server reports support for api versions: %s',
|
||||||
|
', '.join(versions))
|
||||||
|
return versions
|
||||||
|
|
||||||
def __call__(self, env, start_response):
|
def __call__(self, env, start_response):
|
||||||
"""Handle incoming request.
|
"""Handle incoming request.
|
||||||
|
|
||||||
@@ -371,14 +473,22 @@ class AuthProtocol(object):
|
|||||||
"""
|
"""
|
||||||
auth_headers = (
|
auth_headers = (
|
||||||
'X-Identity-Status',
|
'X-Identity-Status',
|
||||||
'X-Tenant-Id',
|
'X-Domain-Id',
|
||||||
'X-Tenant-Name',
|
'X-Domain-Name',
|
||||||
|
'X-Project-Id',
|
||||||
|
'X-Project-Name',
|
||||||
|
'X-Project-Domain-Id',
|
||||||
|
'X-Project-Domain-Name',
|
||||||
'X-User-Id',
|
'X-User-Id',
|
||||||
'X-User-Name',
|
'X-User-Name',
|
||||||
|
'X-User-Domain-Id',
|
||||||
|
'X-User-Domain-Name',
|
||||||
'X-Roles',
|
'X-Roles',
|
||||||
'X-Service-Catalog',
|
'X-Service-Catalog',
|
||||||
# Deprecated
|
# Deprecated
|
||||||
'X-User',
|
'X-User',
|
||||||
|
'X-Tenant-Id',
|
||||||
|
'X-Tenant-Name',
|
||||||
'X-Tenant',
|
'X-Tenant',
|
||||||
'X-Role',
|
'X-Role',
|
||||||
)
|
)
|
||||||
@@ -459,7 +569,6 @@ class AuthProtocol(object):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
conn = self._get_http_connection()
|
conn = self._get_http_connection()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
conn.request(method, path)
|
conn.request(method, path)
|
||||||
response = conn.getresponse()
|
response = conn.getresponse()
|
||||||
@@ -509,7 +618,6 @@ class AuthProtocol(object):
|
|||||||
raise ServiceError('Unable to communicate with keystone')
|
raise ServiceError('Unable to communicate with keystone')
|
||||||
finally:
|
finally:
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
data = jsonutils.loads(body)
|
data = jsonutils.loads(body)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@@ -524,6 +632,10 @@ class AuthProtocol(object):
|
|||||||
:return token id upon success
|
:return token id upon success
|
||||||
:raises ServerError when unable to communicate with keystone
|
:raises ServerError when unable to communicate with keystone
|
||||||
|
|
||||||
|
Irrespective of the auth version we are going to use for the
|
||||||
|
user token, for simplicity we always use a v2 admin token to
|
||||||
|
validate the user token.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
params = {
|
params = {
|
||||||
'auth': {
|
'auth': {
|
||||||
@@ -588,26 +700,35 @@ class AuthProtocol(object):
|
|||||||
|
|
||||||
Build headers that represent authenticated user:
|
Build headers that represent authenticated user:
|
||||||
* X_IDENTITY_STATUS: Confirmed or Invalid
|
* X_IDENTITY_STATUS: Confirmed or Invalid
|
||||||
* X_TENANT_ID: id of tenant if tenant is present
|
* X_DOMAIN_ID: id of domain, if token is scoped to a domain
|
||||||
* X_TENANT_NAME: name of tenant if tenant is present
|
* X_DOMAIN_NAME: name of domain, if token is scoped to a domain
|
||||||
|
* X_PROJECT_ID: id of project, if token is scoped to a project
|
||||||
|
* X_PROJECT_NAME: name of project, if token is scoped to a project
|
||||||
|
* X_PROJECT_DOMAIN_ID: id of owning domain of project, if
|
||||||
|
token is scoped to a project
|
||||||
|
* X_PROJECT_DOMAIN_NAME: name of owning domain of project, if
|
||||||
|
token is scoped to a project
|
||||||
* X_USER_ID: id of user
|
* X_USER_ID: id of user
|
||||||
* X_USER_NAME: name of user
|
* X_USER_NAME: name of user
|
||||||
|
* X_USER_DOMAIN_ID: id of owning domain of user
|
||||||
|
* X_USER_DOMAIN_NAME: name of owning domain of user
|
||||||
* X_ROLES: list of roles
|
* X_ROLES: list of roles
|
||||||
* X_SERVICE_CATALOG: service catalog
|
* X_SERVICE_CATALOG: service catalog
|
||||||
|
|
||||||
Additional (deprecated) headers include:
|
Additional (deprecated) headers:
|
||||||
* X_USER: name of user
|
* X_USER: name of user
|
||||||
* X_TENANT: For legacy compatibility before we had ID and Name
|
* X_TENANT_ID: id of tenant (which is equivilent to project),
|
||||||
|
if token is scoped to a project
|
||||||
|
* X_TENANT_NAME: name of tenant (which is equivilent to project),
|
||||||
|
if token is scoped to a project
|
||||||
|
* X_TENANT: For legacy compatibility before we had ID and Name, this
|
||||||
|
is will be the same as X_TENANT_NAME
|
||||||
* X_ROLE: list of roles
|
* X_ROLE: list of roles
|
||||||
|
|
||||||
:param token_info: token object returned by keystone on authentication
|
:param token_info: token object returned by keystone on authentication
|
||||||
:raise InvalidUserToken when unable to parse token object
|
:raise InvalidUserToken when unable to parse token object
|
||||||
|
|
||||||
"""
|
"""
|
||||||
user = token_info['access']['user']
|
|
||||||
token = token_info['access']['token']
|
|
||||||
roles = ','.join([role['name'] for role in user.get('roles', [])])
|
|
||||||
|
|
||||||
def get_tenant_info():
|
def get_tenant_info():
|
||||||
"""Returns a (tenant_id, tenant_name) tuple from context."""
|
"""Returns a (tenant_id, tenant_name) tuple from context."""
|
||||||
def essex():
|
def essex():
|
||||||
@@ -619,7 +740,7 @@ class AuthProtocol(object):
|
|||||||
return (token['tenantId'], token['tenantId'])
|
return (token['tenantId'], token['tenantId'])
|
||||||
|
|
||||||
def default_tenant():
|
def default_tenant():
|
||||||
"""Assume the user's default tenant."""
|
"""Pre-grizzly, assume the user's default tenant."""
|
||||||
return (user['tenantId'], user['tenantName'])
|
return (user['tenantId'], user['tenantName'])
|
||||||
|
|
||||||
for method in [essex, pre_diablo, default_tenant]:
|
for method in [essex, pre_diablo, default_tenant]:
|
||||||
@@ -630,26 +751,72 @@ class AuthProtocol(object):
|
|||||||
|
|
||||||
raise InvalidUserToken('Unable to determine tenancy.')
|
raise InvalidUserToken('Unable to determine tenancy.')
|
||||||
|
|
||||||
tenant_id, tenant_name = get_tenant_info()
|
# For clarity. set all those attributes that are optional in
|
||||||
|
# either a v2 or v3 token to None first
|
||||||
|
domain_id = None
|
||||||
|
domain_name = None
|
||||||
|
project_id = None
|
||||||
|
project_name = None
|
||||||
|
user_domain_id = None
|
||||||
|
user_domain_name = None
|
||||||
|
project_domain_id = None
|
||||||
|
project_domain_name = None
|
||||||
|
|
||||||
|
if 'access' in token_info:
|
||||||
|
#v2 token
|
||||||
|
user = token_info['access']['user']
|
||||||
|
token = token_info['access']['token']
|
||||||
|
roles = ','.join([role['name'] for role in user.get('roles', [])])
|
||||||
|
catalog_root = token_info['access']
|
||||||
|
catalog_key = 'serviceCatalog'
|
||||||
|
project_id, project_name = get_tenant_info()
|
||||||
|
else:
|
||||||
|
#v3 token
|
||||||
|
token = token_info['token']
|
||||||
|
user = token['user']
|
||||||
|
user_domain_id = user['domain']['id']
|
||||||
|
user_domain_name = user['domain']['name']
|
||||||
|
roles = (','.join([role['name']
|
||||||
|
for role in token.get('roles', [])]))
|
||||||
|
catalog_root = token
|
||||||
|
catalog_key = 'catalog'
|
||||||
|
# For v3, the server will put in the default project if there is
|
||||||
|
# one, so no need for us to add it here (like we do for a v2 token)
|
||||||
|
if 'domain' in token:
|
||||||
|
domain_id = token['domain']['id']
|
||||||
|
domain_name = token['domain']['name']
|
||||||
|
elif 'project' in token:
|
||||||
|
project_id = token['project']['id']
|
||||||
|
project_name = token['project']['name']
|
||||||
|
project_domain_id = token['project']['domain']['id']
|
||||||
|
project_domain_name = token['project']['domain']['name']
|
||||||
|
|
||||||
user_id = user['id']
|
user_id = user['id']
|
||||||
user_name = user['name']
|
user_name = user['name']
|
||||||
|
|
||||||
rval = {
|
rval = {
|
||||||
'X-Identity-Status': 'Confirmed',
|
'X-Identity-Status': 'Confirmed',
|
||||||
'X-Tenant-Id': tenant_id,
|
'X-Domain-Id': domain_id,
|
||||||
'X-Tenant-Name': tenant_name,
|
'X-Domain-Name': domain_name,
|
||||||
|
'X-Project-Id': project_id,
|
||||||
|
'X-Project-Name': project_name,
|
||||||
|
'X-Project-Domain-Id': project_domain_id,
|
||||||
|
'X-Project-Domain-Name': project_domain_name,
|
||||||
'X-User-Id': user_id,
|
'X-User-Id': user_id,
|
||||||
'X-User-Name': user_name,
|
'X-User-Name': user_name,
|
||||||
|
'X-User-Domain-Id': user_domain_id,
|
||||||
|
'X-User-Domain-Name': user_domain_name,
|
||||||
'X-Roles': roles,
|
'X-Roles': roles,
|
||||||
# Deprecated
|
# Deprecated
|
||||||
'X-User': user_name,
|
'X-User': user_name,
|
||||||
'X-Tenant': tenant_name,
|
'X-Tenant-Id': project_id,
|
||||||
|
'X-Tenant-Name': project_name,
|
||||||
|
'X-Tenant': project_name,
|
||||||
'X-Role': roles,
|
'X-Role': roles,
|
||||||
}
|
}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
catalog = token_info['access']['serviceCatalog']
|
catalog = catalog_root[catalog_key]
|
||||||
rval['X-Service-Catalog'] = jsonutils.dumps(catalog)
|
rval['X-Service-Catalog'] = jsonutils.dumps(catalog)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
@@ -781,11 +948,15 @@ class AuthProtocol(object):
|
|||||||
"""
|
"""
|
||||||
if self._cache and data:
|
if self._cache and data:
|
||||||
if 'token' in data.get('access', {}):
|
if 'token' in data.get('access', {}):
|
||||||
|
# It's a v2 token
|
||||||
timestamp = data['access']['token']['expires']
|
timestamp = data['access']['token']['expires']
|
||||||
expires = timeutils.parse_isotime(timestamp).strftime('%s')
|
elif 'token' in data:
|
||||||
|
# It's a v3 token
|
||||||
|
timestamp = data['token']['expires']
|
||||||
else:
|
else:
|
||||||
self.LOG.error('invalid token format')
|
self.LOG.error('invalid token format')
|
||||||
return
|
return
|
||||||
|
expires = timeutils.parse_isotime(timestamp).strftime('%s')
|
||||||
self.LOG.debug('Storing %s token in memcache', token)
|
self.LOG.debug('Storing %s token in memcache', token)
|
||||||
self._cache_store(token, data, expires)
|
self._cache_store(token, data, expires)
|
||||||
|
|
||||||
@@ -811,7 +982,14 @@ class AuthProtocol(object):
|
|||||||
:raise ServiceError if unable to authenticate token
|
:raise ServiceError if unable to authenticate token
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
if self.auth_version == 'v3.0':
|
||||||
|
headers = {'X-Auth-Token': self.get_admin_token(),
|
||||||
|
'X-Subject-Token': safe_quote(user_token)}
|
||||||
|
response, data = self._json_request(
|
||||||
|
'GET',
|
||||||
|
'/v3/auth/tokens',
|
||||||
|
additional_headers=headers)
|
||||||
|
else:
|
||||||
headers = {'X-Auth-Token': self.get_admin_token()}
|
headers = {'X-Auth-Token': self.get_admin_token()}
|
||||||
response, data = self._json_request(
|
response, data = self._json_request(
|
||||||
'GET',
|
'GET',
|
||||||
@@ -910,6 +1088,7 @@ class AuthProtocol(object):
|
|||||||
timeout = (self.token_revocation_list_fetched_time +
|
timeout = (self.token_revocation_list_fetched_time +
|
||||||
self.token_revocation_list_cache_timeout)
|
self.token_revocation_list_cache_timeout)
|
||||||
list_is_current = timeutils.utcnow() < timeout
|
list_is_current = timeutils.utcnow() < timeout
|
||||||
|
|
||||||
if list_is_current:
|
if list_is_current:
|
||||||
# Load the list from disk if required
|
# Load the list from disk if required
|
||||||
if not self._token_revocation_list:
|
if not self._token_revocation_list:
|
||||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user