3.涉及到的代码修改
keystone代码修改(基于openstack havana版)位于两个文件中,/opt/stack/keystone/keystone/token/controllers.py (对应v2.0认证接口)和/opt/stack/keystone/keystone/auth/controllers.py (对应v3认证接口),实际的文件位置根据安装来定。
第一个文件的修改位于def _authenticate_external方法中,需要注意的是由于keystone的http底层代码会将收到的REMOTE_USER头加HTTP_前缀后改成HTTP_REMOTE_USER(目前的havana版存在该bug),因此在该方法中的context对象中是获取不到REMOTE_USER头的,需要在该方法开头进行如下的修改:
#如果REMOTE_USER头和HTTP_REMOTE_USER头都没有,则抛异常
if 'REMOTE_USER' not in context.get('environment', {}) and 'HTTP_REMOTE_USER' not in context.get('environment', {}):
raise ExternalAuthNotApplicable()
#如果REMOTER_USER为None,则将HTTP_REMOTE_USER的值赋给它。
remoteUser = context.get('environment', {}).get('REMOTE_USER')
if not remoteUser:
context['environment']['REMOTE_USER'] = context['environment']['HTTP_REMOTE_USER']