hue集成SSO单点登录安装过程(本人原创纯手工制作)

1 篇文章 0 订阅
1 篇文章 0 订阅

一、准备下载安装文件


hue-4.2.0.tgz
django-cas-ng-3.4.2.tar.gz

tar -zxvf hue-4.2.0.tgz
tar -zxvf django-cas-ng-3.4.2.tar.gz
mv django-cas-ng-3.4.2 hue-4.2.0/desktop/core/ext-py/

 

修改:django_cas_ng/views.py  "{'url': next_page_url}"->"{'service': next_page_url}"

def _logout_url(request, next_page=None):
    """Generates CAS logout URL"""

    url = urllib_parse.urljoin(settings.CAS_SERVER_URL, 'logout')
    if next_page:
        protocol = get_protocol(request)
        host = request.get_host()
        next_page_url = urllib_parse.urlunparse(
            (protocol, host, next_page, '', '', ''),
        )
        url += '?' + urllib_parse.urlencode({'service': next_page_url})
    return url

二、编译

cd hue-4.2.0
make clean 
make apps
三、配置

3.1 修改文件:middleware.py
vim desktop/core/src/desktop/middleware.py

import django_cas_ng.views

DJANGO_VIEW_AUTH_WHITELIST = [
  django_cas_ng.views.login,
  django_cas_ng.views.logout,

  django.views.static.serve,
  desktop.views.is_alive,
]  说明:注意顺序

3.2 修改文件:settings.py
vim desktop/core/src/desktop/settings.py

import后接着加入


CAS_SERVER_URL='https://XXX.com/cas/login'
CAS_SERVER_URL_LOGOUT='https://XXX.com/cas/logout'

MIDDLEWARE_CLASSES = [
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django_cas_ng.middleware.CASMiddleware',

....
]注意顺序

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_cas_ng',  //加入这一行
....
]

 

3.3 修改文件:urls.py(这个极为重要,在这儿遇到很大的坑)
vim desktop/core/src/desktop/urls.py

dynamic_patterns = patterns('desktop.auth.views',
  (r'^hue/accounts/loginx/$', 'dt_login'),
  #(r'^accounts/login/$', 'dt_login_old'), # Deprecated
  #(r'^accounts/logout/$','django_cas_ng.views.login' ),

  (r'^hue/accounts/logout/$', 'dt_logout', {'next_page': '/'}),
  (r'^profile$', 'profile'),
  (r'^login/oauth/?$', 'oauth_login'),
  (r'^login/oauth_authenticated/?$', 'oauth_authenticated'),
)

在上面紧接着添加:

dynamic_patterns += patterns('',
  (r'^hue/accounts/login/$', 'django_cas_ng.views.login'),
  (r'^accounts/logout/$', 'django_cas_ng.views.logout'),
)

3.4 修改文件:backend.py
vim desktop/core/src/desktop/auth/backend.py

开头加入import ,class加入到文件最后

from django.conf import settings
from django_cas_ng.backends import _verify
from django_cas_ng.signals import cas_user_authenticated

class CASBackend(object):
  """CAS authentication backend"""
  
  def authenticate(self, ticket, service, request):
    """Verifies CAS ticket and gets or creates User object"""
    username, attributes = _verify(ticket, service)
    if attributes:
      request.session['attributes'] = attributes
    if not username:
      return None
    try:
      user = User.objects.get(username=username)
      created = False
    except User.DoesNotExist:
      #check if we want to create new users, if we don't fail auth
      create = getattr(settings, 'CAS_CREATE_USER', True)
      if not create:
        return None
      #user will have an "unusable" password
      user = User.objects.create_user(username, '')
      #user.save()
      created = True
      
    default_group = get_default_user_group()
    if default_group is not None:
      user.groups.add(default_group)
    user = rewrite_user(user)
    user.save()
    #send the 'cas_user_authenticated' signal
    cas_user_authenticated.send(
      sender=self,
      user=user,
      created=created,
      attributes=attributes,
      ticket=ticket,
      service=service,
    )
    return user
    
  def get_user(self, user_id):
    """Retrieve the user's entry in the User model if it exists"""
    
    try:
      return rewrite_user(User.objects.get(pk=user_id))
    except User.DoesNotExist:
      return None

3.5 修改文件:hue.ini

vim desktop/conf/hue.ini
[auth]
backend=desktop.auth.backend.CASBackend
[desktop]
redirect_whitelist=^\/.*$,^.*\/cas\/login.*$,^.*\/cas\/logout.*$
port:8888

四、授权当前目录

chmod -R 7777 .

 

 

QA:
Q: NoReverseMatch: Reverse for 'desktop.auth.views.dt_login' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
A:  5修改文件:urls.py    
 (r'^hue/accounts/loginx/$', 'dt_login'), 这一行不了屏蔽,loginx 写成login2 login3...也行

Q: 不能注销登录,一注销就自动登录
A: django_cas_ng/views.py文件注销路径和cas路径一样.我这里不能用url用service

Q:一直报 没有model django_cas_ng
A:  pip list 查看有没有django_cas_ng 没有的话 使用命令python setup.py install安装。如果安装过了,步骤完全安装上面文档写的,做了,就看一下你的urls.py文件和我的一样不,调整一下!

AAAAA:完整的按照上面配置是可以成功的。看仔细了和原文里保持一致的规范别人空几格你也前面跟着空几格。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值