在JAAS中使用私人和公共凭证

Shr*_*ari 10 java jaas

在采访中,面试官问我为什么需要私人证件JAAS
我们可以访问公共凭据和私人凭据,例如:

Set<Object> privateCredentials = subject.getPrivateCredentials();
Set<Object> publicCredentials = subject.getPublicCredentials();
Run Code Online (Sandbox Code Playgroud)

两者(privateCredentialspublicCredentials)都是可访问的,访问方式是相同的.
那么,两种凭证的重要性是什么?

kao*_*aos 7

来自Theodore Shrader的"Java and Internet Security"一书,Bruce A. Rich,Anthony J. Nadalin:

由于争议较多,JAAS设计人员得出结论,校长可能会有某种身份证明,他们需要能够立即提供这些身份证明,而这些身份证明可能包含敏感信息,因此需要一套公共证书和私人凭证集也被添加到主题.由于凭证的内容在身份验证机制之间可能存在很大差异,从简单的密码到指纹(到无限和超越),凭证的类型只是保留为java.lang.Obiect.委托人和凭证之间的关系(如果有的话)被留作特定Principal类(或更可能是特定的LoginModule类)的实现者的练习.从JAAS的角度来看,私有凭证和公共凭证之间的唯一区别是访问私有凭证集需要特定的javax.security.auth.AuthPermission.