OpenStack keystonemiddleware接收前一個WSGI過濾器傳來的WSGI環境信息,進行驗證工做後傳遞給下一個中間件,本文探討keystone中間件究竟有哪些WSGI環境變量。服務器
說明:下文中以 HTTP\_ 開頭的header對應標準http header, 以 HTTP_X 開頭的header對應擴展的http header,WSGI環境信息用於在不一樣的WSGI組件間傳遞統一格式的內容,這些環境信息來自於HTTP請求或其餘的WSGI組件,所以格式與HTTP中header字段的格式不一樣。session
keystone中間件WSGI環境變量與HTTP header字段總結:編碼
HTTP_X_AUTH_TOKEN
HTTP請求中傳入的用戶令牌,對應於HTTP請求header中的'X-Auth-Token'字段;spa
2.插件
HTTP_X_SERVICE_TOKEN
HTTP請求中傳入的服務令牌;code
WWW-Authenticate
返回給用戶的HTTP header,告訴他們獲取新令牌的keystone終端URL中間件
當使用複合認證(即同時提供用戶令牌和服務令牌)時,關於服務的額外header會被添加。他們與標準http header的格式相同,只不過多加了一個_SERVICE_。若是沒有提供服務令牌,那麼這些headers就不存在。blog
1. token
HTTP_X_IDENTITY_STATUS
只能取'Confirmed' 或 'Invalid',同時若是中間被配置成'delay_auth_decision'模式運行的話,那麼下游的服務將只會接收到'Invalid';ci
2.
HTTP_X_DOMAIN_ID,
HTTP_X_SERVICE_DOMAIN_ID
域ID,只有v3版的做用範圍爲域的令牌會包含該項;
3.
HTTP_X_DOMAIN_NAME,
HTTP_X_SERVICE_DOMAIN_NAME
域名稱,只有v3版的做用範圍爲域的令牌會包含該項;
4.
HTTP_X_PROJECT_ID,
HTTP_X_SERVICE_PROJECT_ID
項目ID,只有v3版的做用範圍爲項目的令牌和v2版的做用範圍爲租戶的令牌會包含該項;
5.
HTTP_X_PROJECT_NAME
HTTP_X_SERVICE_PROJECT_NAME
項目名稱,只有v3版的做用範圍爲項目的令牌和v2版的做用範圍爲租戶的令牌會包含該項;
6.
HTTP_X_PROJECT_DOMAIN_ID,
HTTP_X_SERVICE_PROJECT_DOMAIN_ID
擁有項目的域ID,只有v3版的做用範圍爲項目的令牌會包含該項,一旦該項設置,假定在該域內的PROJECT_NAME惟一。
7.
HTTP_X_PROJECT_DOMAIN_NAME
HTTP_X_SERVICE_PROJECT_DOMAIN_NAME
擁有項目的域名稱,只有v3版的做用範圍爲項目的令牌會包含該項,一旦該項設置,假定在該域內的PROJECT_NAME惟一。
8.
HTTP_X_USER_ID,
HTTP_X_SERVICE_USER_ID
用戶ID或服務的用戶ID。
9.
HTTP_X_USER_NAME,
HTTP_X_SERVICE_USER_NAME
用戶名稱或服務的用戶名稱。
10.
HTTP_X_USER_DOMAIN_ID,
HTTP_X_SERVICE_USER_DOMAIN_ID
用戶所在的域ID,一旦該項設置,假定在該域內的USER_NAME惟一。
11.
HTTP_X_USER_DOMAIN_NAME,
HTTP_X_SERVICE_USER_DOMAIN_NAME
用戶所在的域名稱,一旦該項設置,假定在該域內的USER_NAME惟一。
12.
HTTP_X_ROLES,
HTTP_X_SERVICE_ROLES
角色名稱,採用逗號隔開且大小寫敏感。
13.
HTTP_X_SERVICE_CATALOG
Json格式編碼的服務目錄(可選),注意儘管該header中含有'SERVICE',卻對應的是用戶令牌,因爲用戶令牌中包含的目錄可能已經很是大,所以再也不指定服務令牌的目錄,這樣能夠節省HTTP的header空間。
1.
keystone.token_info
驗證令牌過程當中發現的該令牌的相關信息,可能同時包括keystone服務器返回的驗證後的信息和關於項目、用戶等的基本信息。
2.
keystone.token_auth
一個keystoneclient認證插件,可能和類`keystoneclient.session.Session`一塊兒使用,該插件將會加載要提供給auth_token中間件的認證數據。