大数据安全管理 -- 用户验证与授权1

1. JaaS 介绍

Java安全框架最初集中在保护用户运行潜在的不可信任代码,是基于代码的来源(URL)和谁创建的代码(certificate)来给移动代码进行授权。Java 2 SDK 1.3引入了JAAS( Java Authentication and Authorization Service),增加了基于用户的访问控制能力,即根据谁在运行代码来进行授权。

上面是百度百科对于JaaS的解释。如果我们把KDC看成一个数据库的话,那么JaaS就有点儿类似于JDBC。JDBC连接数据库,有一系列的类似于模板的代码,如果我们需要连接MySQL数据库,我们套用这些代码即可。JaaS也是一样的,它也有一系列的模板代码,我们直接套用,就可以完成kerberos的用户验证(JaaS 不仅仅用在Kerberos),下面我们一起看一下JaaS的使用

2. JaaS的使用

JDK已经提供了完整的JAAS的方案,下面我们来看一个完整的JAAS登录的代码与配置。

2.1 JaaS登录样例

下面的代码为客户端进行Kerberos认证的代码。一共只有二行

public class JaasTest {
    public static void main(String[] args) {    
        try {
            LoginContext lc = new LoginContext("JaaSSampleTest", new TextCallbackHandler());
            lc.login();
            Subject sub = lc.getSubject();
        } catch (LoginException le) {
            System.err.println("Authentication failed:");
            System.exit(-1);
        }
        System.out.println("Authentication succeeded!");
    }
}

其中配置文件jaas_test.conf为:

JaaSSampleTest {
 com.sun.security.auth.module.Krb5LoginModule required;
};

其运行的虚拟机参数为:
-Djava.security.auth.login.config=f:\kerberos\jaas.conf -Djava.security.krb5.realm=EXAMPLE.COM -Djava.security.krb5.kdc=freeipa56.example.com
运行结果如下:
这里写图片描述

2.2 JaaS的配置文件

在上例中,我们进行kerberos认证的时候,采用的是用户名与密码的方式。但是我们实际使用过程中,就会发现很多时候不是采用的这种交互式的方式,而是采用keytab文件的方式。这就与我们的这个jaas.conf的配置参数有关了。下面的一个client.conf配置文件是HMaster采用的,它包含了我们常用的一些信息。

[root@ysbdh03 0]# cat /usr/hdp/current/hbase-master/conf/hbase_master_jaas.conf

Client {   # 这一值"Client"是在代码中设定的,就是new LoginContext()中的第一个参数
com.sun.security.auth.module.Krb5LoginModule required # 一般都是使用默认的Krb5LoginModule
useKeyTab=true  # 认证的时候,是否采用keytab文件
storeKey=true   
debug=true  #是否打印debug日志
useTicketCache=false #是否采用kinit后直cache值
keyTab="/etc/security/keytabs/hbase.service.keytab" # keytab的位置
principal="hbase/[email protected]";   # keytab对应的princal的值
};

需要说明的是这些参数都是由Krb5LoginModule设定的。它还提供其它的一些参数。但是感觉比较有用的,就是这些。

你可能感兴趣的:(Kerberos)