Kylin认证方式介绍(一)

目前,apache kylin提供了多种登录认证的方式,包括预先定义的用户名和密码登录,ldap以及sso单点登录,本文主要介绍前面两种方式,sso的登录认证后面有机会再做介绍。

在kylin.properties配置文件中,通过配置kylin.security.profile这个参数项来决定要使用的登录认证方式。一共有三个选项,分别是:

  • testing,表示使用预先定义好的用户名和密码进行登录认证;
  • ldap,表示使用ldap服务器进行登录认证;
  • saml,表示使用sso单点登录,并且使用ldap进行相关认证,使用了Spring Security SAML Extension

下面就来详细介绍一些前面两种登录认证方式。

预先定义的用户名密码登录认证

Kylin默认提供了一种用户名和密码的登录认证方式,当配置为testing的参数项之后,就可以用如下的三组用户名和密码登录Kylin进行操作了:

  • ADMIN/KYLIN,管理员权限,可以进行任意的操作;
  • MODELER/MODELER,可以对cube进行编辑设计,提交job任务等;
  • ANALYST/ANALYST,进行query查询

相应的用户名和密码配置在:tomcat/webapps/kylin/WEB-INF/classes/kylinSecurity.xml路径下,如下图所示:

我们可以在这里添加新用户,修改密码等。要注意的是,这里的密码是需要经过加密的,而不是明文,密码生成的方法如下所示:

// 这里是maven依赖
 <dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-core</artifactId>
  <version>4.0.0.RELEASE</version>
</dependency>

// 这里是使用代码
String password="KYLIN";
org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder encoder =
    new org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder();
String result = encoder.encode(password);
System.out.println(ret);

以上代码输出的结果,就是指定的密码经过加密之后得到的结果。我们将该结果写到配置文件中即刻。另外,kylin还提供了通过curl命令来访问kylin的restful api,例如,我们可以通过如下命令来查询一个project指定表的数据:

curl -X POST -H "Authorization: Basic XXXXXXXXX" -H "Content-Type: application/json" -d '{ "sql":"select count(*) from TEST_KYLIN_FACT", "project":"learn_kylin" }' http://localhost:7070/kylin/api/query

其中,XXXXXXXXX的内容,是使用Base64加密用户名和密码之后得到的结果,使用方法如下所示:

import org.apache.commons.codec.binary.Base64;

String content = "ADMIN/KYLIN";
byte[] bytes = Base64.encodeBase64(content.getBytes());
String result = new String(bytes);
System.out.println(result);

这种登录认证方式非常简单,无需其他任何配置即可使用。但是这种使用方式也存在一定的问题,灵活性比较差,每次进行用户的配置都需要手动修改配置文件,生产环境中,往往不太适用。下面就来介绍一下使用LDAP进行kylin的登录认证。

LDAP登录认证

使用ldap方式进行登录认证,我们首先需要配置ldap服务器的相关信息,如下所示:

kylin.security.profile=ldap
kylin.security.acl.admin-role=KYLIN_ADMIN_GROUP
kylin.security.ldap.connection-server=ldap://<your_ldap_host>:<port>
kylin.security.ldap.connection-username=<your_user_name>
kylin.security.ldap.connection-password=<your_password_encrypted>

其中,admin-role表示,KYLIN_ADMIN_GROUP这个组下面的所有成员,都具有管理员权限,与第一种方式的ADMIN用户一样。我们可以在ldap服务器中新建一个用户组来专门存放admin用户,或者直接使用已有的组,都可以如下图所示:

我们新建了KYLIN_ADMIN_GROUP用来存放admin用户,KYLIN_QUERY_GROUP是我们用来测试存储其他kylin用户的,无需配置在kylin.properties中。对于非管理员权限的用户,我们可以分别创建相应的组,然后将相应的用户加入组中,在kylin页面使用ADMIN用户登录之后,对相应的用户赋权,目前有四种权限可选,分别是:ADMIN/MANAGEMENT/OPERATION/QUERY,权限添加好了之后,我们可以使用相应的用户登录了。接着,我们需要配置ldap服务器的服务器地址,用户名以及密码。这里的密码依然是加密之后的结果,我们可以使用如下的命令对密码进行加密,这里部署的是2.6.3版本的kylin:

cd $KYLIN_HOME/tomcat/webapps/kylin/WEB-INF/lib/
java -classpath kylin-server-base-2.6.3.jar:kylin-core-common-2.6.3.jar:spring-beans-4.3.10.RELEASE.jar:spring-core-4.3.10.RELEASE.jar:commons-codec-1.9.jar org.apache.kylin.rest.security.PasswordPlaceholderConfigurer AES password

将结果写到配置文件即可。接着,我们来配置普通用户以及服务账户搜索规则,如下所示:

#
## LDAP user account directory;
kylin.security.ldap.user-search-base=ou=people,dc=bdms,dc=163,dc=com
kylin.security.ldap.user-search-pattern=(&(userid={0}))
kylin.security.ldap.user-group-search-base=ou=groups,dc=bdms,dc=163,dc=com
#kylin.security.ldap.user-group-search-filter=
#
## LDAP service account directory
kylin.security.ldap.service-search-base=ou=people,dc=bdms,dc=163,dc=com
kylin.security.ldap.service-search-pattern=(&(userid={0}))
kylin.security.ldap.service-group-search-base=ou=groups,dc=bdms,dc=163,dc=com

以上这些配置需要根据ldap服务器的实际结构来进行调整,并非固定的。需要注意的是,由于目前kylin只支持用户名/密码的登录方式,因此ldap中的kerberos用户无法使用,我们需要新增Simple Security Object类型的用户,如下所示:

最后,将新建的用户加入相应的组即可。这样,我们就可以在ldap服务器中配置用户来登录kylin服务了。关于sso单点登录的方式,由于目前本人手头没有相应的环境,也没有进行测试,这里就不再介绍,感兴趣的可以参考官方文档进行配置学习,以后有机会的话,再跟大家一起分享。

参考文档

http://kylin.apache.org/docs/howto/howto_use_restapi.html

http://kylin.apache.org/docs/howto/howto_ldap_and_sso.html

https://www.jianshu.com/p/39bc4cc45a87

https://blog.csdn.net/wild46cat/article/details/71102103

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值