"未经授权:您提出的请求需要身份验证。 (HTTP 401)"在Fiware Horizo​​n上

时间:2017-01-09 13:07:53

标签: openstack fiware keystone horizon

我是FIWARE的新手。在我的Ubuntu 16.04上,我设置了Fiware's KeyRock,它是OpenStack Keystone Identity Management和Horizo​​n Dashboard的组合。我使用了this指南来设置所有内容。

安装Keystone(这是一个RESTful API)后,我使用curl发送HTTP请求,一切正常,即我可以使用curl在keystone服务器上运行these命令。

但是,当我使用位于openstack_dashboard目录中的引用Django项目在同一服务器上运行Horizo​​n时:

sudo tools/with_venv.sh python manage.py runserver 0.0.0.0:8000

Horizo​​n服务器启动时没有错误,但是当我通过浏览器访问它时,出现以下错误:

 A server error occured. Please contact the administrator

在Keystone服务器控制台上,出现以下错误:

 2017-01-09 11:53:40.962 13285 ERROR keystone.notifications [-] Failed to construct notifier  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications Traceback (most recent call last):
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications   File "/keystone/keystone/notifications.py", line 220, in _get_notifier  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications     transport = messaging.get_transport(CONF)  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications   File "/keystone/.venv/local/lib/python2.7/site-packages/oslo/messaging/transport.py", line 185, in get_transport  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications     invoke_kwds=kwargs)  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications   File "/keystone/.venv/local/lib/python2.7/site-packages/stevedore/driver.py", line 45, in __init__  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications     verify_requirements=verify_requirements,  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications   File "/keystone/.venv/local/lib/python2.7/site-packages/stevedore/named.py", line 55, in __init__  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications     verify_requirements)  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications   File "/keystone/.venv/local/lib/python2.7/site-packages/stevedore/extension.py", line 170, in _load_plugins  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications     self._on_load_failure_callback(self, ep, err)  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications   File "/keystone/.venv/local/lib/python2.7/site-packages/stevedore/driver.py", line 50, in _default_on_load_failure  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications     raise err  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications ImportError: cannot import name _uuid_generate_random  
 2017-01-09 11:53:40.962 13285 TRACE keystone.notifications  
 2017-01-09 11:53:40.964 13285 WARNING keystone.common.wsgi [-] Authorization failed. The request you have made requires authentication. from 127.0.0.1  
 2017-01-09 11:53:40.970 13285 INFO eventlet.wsgi.server [-] 127.0.0.1 - - [09/Jan/2017 11:53:40] "POST /v3/auth/tokens HTTP/1.1" 401 331 0.261293

在Horizo​​n服务器控制台上,出现以下错误:

 DEBUG:idm_logger:Creating a new internal keystoneclient connection to http://0.0.0.0:5000/v3.
 Unauthorized: The request you have made requires authentication. (HTTP 401)
 Traceback (most recent call last):
   File "/horizon/openstack_dashboard/fiware_api/keystone.py", line 990, in _get_element_and_cache
resource_element = function(request, element)
   File "/horizon/openstack_dashboard/fiware_api/keystone.py", line 1022, in <lambda>
request, basic, lambda req, n: internal_keystoneclient(req).roles.find(name=n), pickle_props=['name'])
   File "/horizon/openstack_dashboard/fiware_api/keystone.py", line 64, in internal_keystoneclient
cache.set(CACHE_CLIENT, keystoneclient.session.get_token(), INTERNAL_CLIENT_CACHE_TIME)
   File "/horizon/.venv/src/python-keystoneclient/keystoneclient/session.py", line 610, in get_token
return (self.get_auth_headers(auth) or {}).get('X-Auth-Token')
   File "/horizon/.venv/src/python-keystoneclient/keystoneclient/session.py", line 589, in get_auth_headers
return auth.get_headers(self, **kwargs)
   File "/horizon/.venv/src/python-keystoneclient/keystoneclient/auth/base.py", line 114, in get_headers
token = self.get_token(session)
   File "/horizon/.venv/src/python-keystoneclient/keystoneclient/auth/identity/base.py", line 104, in get_token
return self.get_access(session).auth_token
   File "/horizon/.venv/src/python-keystoneclient/keystoneclient/auth/identity/base.py", line 144, in get_access
self.auth_ref = self.get_auth_ref(session)
   File "/horizon/.venv/src/python-keystoneclient/keystoneclient/auth/identity/v3.py", line 127, in get_auth_ref
authenticated=False, log=False, **rkwargs)
   File "/horizon/.venv/src/python-keystoneclient/keystoneclient/session.py", line 488, in post
return self.request(url, 'POST', **kwargs)
   File "/horizon/.venv/src/python-keystoneclient/keystoneclient/utils.py", line 318, in inner
return func(*args, **kwargs)
   File "/horizon/.venv/src/python-keystoneclient/keystoneclient/session.py", line 389, in request
raise exceptions.from_response(resp, method, url)
 Unauthorized: The request you have made requires authentication. (HTTP 401)
 Traceback (most recent call last):
   File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run
self.result = application(self.environ, self.start_response)
   File "/horizon/.venv/local/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 64, in __call__
return self.application(environ, start_response)
   File "/horizon/.venv/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 168, in __call__
self.load_middleware()
   File "/horizon/.venv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 46, in load_middleware
mw_instance = mw_class()
   File "/horizon/.venv/local/lib/python2.7/site-packages/django/middleware/locale.py", line 23, in __init__
for url_pattern in get_resolver(None).url_patterns:
   File "/horizon/.venv/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 367, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
   File "/horizon/.venv/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 361, in urlconf_module
self._urlconf_module = import_module(self.urlconf_name)
   File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
   File "/horizon/openstack_dashboard/urls.py", line 36, in <module>
from openstack_dashboard.dashboards.idm_admin.user_accounts \
   File "/horizon/openstack_dashboard/dashboards/idm_admin/user_accounts/views.py", line 28, in <module>
from openstack_dashboard.dashboards.idm_admin.user_accounts \
   File "/horizon/openstack_dashboard/dashboards/idm_admin/user_accounts/forms.py", line 195, in <module>
class UpdateAccountForm(forms.SelfHandlingForm, UserAccountsLogicMixin):
   File "/horizon/openstack_dashboard/dashboards/idm_admin/user_accounts/forms.py", line 202, in UpdateAccountForm
choices=get_account_choices())
   File "/horizon/openstack_dashboard/dashboards/idm_admin/user_accounts/forms.py", line 172, in get_account_choices
use_idm_account=True),
   File "/horizon/openstack_dashboard/fiware_api/keystone.py", line 1022, in get_basic_role
request, basic, lambda req, n: internal_keystoneclient(req).roles.find(name=n), pickle_props=['name'])
   File "/horizon/openstack_dashboard/fiware_api/keystone.py", line 997, in _get_element_and_cache
exceptions.handle(request)
   File "/horizon/horizon/exceptions.py", line 291, in handle
messages.error(request, message or fallback)
   File "/horizon/horizon/messages.py", line 83, in error
fail_silently=fail_silently)
   File "/horizon/horizon/messages.py", line 41, in add_message
if not horizon_message_already_queued(request, message):
   File "/horizon/horizon/messages.py", line 28, in horizon_message_already_queued
if request.is_ajax():
 AttributeError: 'NoneType' object has no attribute 'is_ajax'
 [09/Jan/2017 12:39:35] "GET / HTTP/1.1" 500 59 

我正在通过浏览器发送GET请求,但Keystone服务器正在接收其控制台输出中指示的POST请求。我不明白为什么会这样。

1 个答案:

答案 0 :(得分:3)

看起来Horizo​​n服务器无法验证凭据。

对于Fiware,如果未正确配置文件local_settings.py(位于/horizon/openstack_dashboard/local/目录中),您将在Horizo​​n服务器上收到此错误。在此文件中,有一个名为IDM_USER_CREDENTIALS的字典,您必须在其中设置填充Keystone数据库时创建的管理配置文件的密码。它也在您提供的link中给出。尝试更改密码,看看它是否有效。