2013年1月28日 星期一

django openstack auth

最近在使用django_openstack_auth去透過keystone做認證
結果花了三四天還搞不定,直到今天才把所有問題都解決
原來有幾個地方要注意,下面做個簡單的記錄方便

首先,也是最白爛的一點,請先把機器做好網路對時
因為keystone的token是有過期時間的,結果當初找問題時一直沒想到
直到最後追程式碼才發現,原來伺服器跟客戶端的時間不一樣,所以一直發給逾期的token
所以請先將機器的時間做好對時,網路上都有相關的文章,在此就不重復了

設定settings.py
LOGIN_URL = "/auth/login/"
LOGOUT_URL = "/auth/logout/"
LOGIN_REDIRECT_URL = "/"

OPENSTACK_KEYSTONE_URL = "http://${server_ip}:5000/v2.0"
AUTHENTICATION_BACKENDS = ("openstack_auth.backend.KeystoneBackend", )

INSTALLED_APPS += ("openstack_auth", )

設定urls.py
from openstack_auth.utils import patch_middleware_get_user

patch_middleware_get_user()

urlpatterns += patterns("",
    url(r"^auth/login/$", "openstack_auth.views.login", name = "login"),
    url(r"^auth/logout/$", "openstack_auth.views.logout", name = "logout"),
)
記得patch_middleware_get_user一定要加,否則認證過也會無法取得使用者物件

設定template,openstack_auth預設login及logout的樣板會在
${template_dir}/auth/login.html and ${template_dir}/auth/logout.html
主要是如果你有客制化自己的form,請記得加上下面二個設定
    {{ form.tenant }}
    {{ form.region }}

另外,如果你有客制化自己的keystone伺服器,請一定要把service category打開,因為認證會需要這個設定值

做完以上設定,就可以正常透過keystone登入django了
不過由於keystone跟django的使用者及群組是沒有綁定在一起
所以能取得到的使用者資料相對較少
詳細的屬性及方法可以參照https://github.com/4P/python-django-openstack-auth的程式碼

沒有留言:

張貼留言