当客户端生成的服务票据发送到服务器时,GSSContext的acceptSecContext方法就是对KDC编码的票据进行解码。
当以服务票证作为其参数调用此方法时,票证实际上是否被发送到 KDC 本身进行解码?
否则这不是安全问题吗?因为如果服务器可以解码任何有效的票证,除了发送给它的某个客户端或票证的用途或对象之外,它一无所知?
有点困惑
非常感谢任何澄清。
我读过应用程序服务器和 KDC 确实进行了通信,但我认为这并不总是正确的。
例如,看一下示例服务器代码
应用程序服务器登录以获取上下文
LoginContext loginCtx = null;
loginCtx = new LoginContext("SPN", new LoginCallbackHandler( id, password ));
loginCtx.login();
Subject subject = loginCtx.getSubject();
然后使用该主题,它将执行特权doAs
Subject.doAs( subject, new PrivilegedAction<String>() {
public void run() {
try {
GSSManager manager = GSSManager.getInstance();
GSSContext context = manager.createContext( (GSSCredential) null);
context.acceptSecContext( serviceTicket, 0, serviceTicket.length);
// now do something with decoded ticket
}
...
}