缘起
一直被这个三头恶犬欺负,今天我们分析一下它们的实现机制。
一提到kerberos,就会想起来一些概念,keytab, principal, tgt, ticket, KDC, JAAS, subject, credential, UGI, GSS等,概念难懂,代码也很难理解。
kerberos本身的概念这里就不分析了,自行看介绍。主要分析下java代码层面的东西。
初识UGI
首先,这里有个文章不错,大体分析了一下UGI这个对象的一些重要方法。
https://steveloughran.gitbooks.io/kerberos_and_hadoop/content/sections/ugi.html
这里需要对照UGI源码分析。
下面的是一个辅助理解UGI中group如何获得的文章,当然只是辅助,因为只是片面的理解
http://www.cnblogs.com/zwCHAN/p/4686054.html
如果看了代码,就会知道里面很多LoginContext, Subject, LoginModule, Credential之类的对象,其实都是来自于java的JAAS框架,要理清楚头绪,就要看看JAAS庐山真面目
初识JAAS
下面给出2个JAAS代码框架的例子
例子1
http://blog.csdn.net/xiao_jun_0820/article/details/39375819
Java的安全机制
详细介绍请参考JAAS:灵活的Java安全机制
简单来说,用户首先使用LoginContext的接口进行登录验证。LoginContext可以配置使用不同的验证协议。验证通过后,用户得到一个subject,里面包含凭证,公私钥等。之后,在涉及到需要进行权限认证的地方(例如,资源访问,外部链接校验,协议访问等),使用doAs函数()代替直接执行。
这样,java的权限认证就和用户的业务逻辑分离了。