Có ai biết cách lấy vé dịch vụ từ Trung tâm phân phối khóa (KDC) bằng cách sử dụng Java GSS-API không?Cách lấy vé dịch vụ Kerberos qua GSS-API?
Tôi có một ứng dụng dày-khách hàng đầu tiên xác thực thông qua JAAS bằng cách sử dụng Krb5LoginModule để lấy TGT từ bộ nhớ vé (nền: Windows ví dụ: sử dụng triển khai kerberos và lưu trữ vé cấp trong khu vực bộ nhớ an toàn). Từ Trình quản lý đăng nhập, tôi nhận đối tượng Chủ đề chứa TGT. Bây giờ tôi hy vọng khi tôi tạo một đối tượng GSSCredential cụ thể cho dịch vụ của tôi, vé dịch vụ cũng sẽ được đưa vào các thông tin cá nhân của Subject (Tôi đã đọc ở đâu đó trên web). Vì vậy, tôi đã thử như sau:
// Exception handling ommitted
LoginContext lc = new LoginContext("HelloEjbClient", new DialogCallbackHandler());
lc.login()
Subject.doAs(lc.getSubject(), new PrivilegedAction() {
public Object run() {
GSSManager manager = GSSManager.getInstance();
GSSName clientName = manager.createName("clientUser", GSSName.NT_USER_NAME);
GSSCredential clientCreds = manager.createCredential(clientName, 8 * 3600, createKerberosOid(), GSSCredential.INITIATE_ONLY);
GSSName serverName = manager.createName("[email protected]", GSSName.NT_HOSTBASED_SERVICE);
manager.createCredential(serverName, GSSCredential.INDEFINITE_LIFETIME, createKerberosOid(), GSSCredential.INITIATE_ONLY);
return null;
}
private Oid createKerberosOid() {
return new Oid("1.2.840.113554.1.2.2");
}
});
Đáng tiếc là tôi có được một GSSException: Không có thông tin hợp lệ được cung cấp (cấp Cơ chế: Không thể tìm thấy bất kỳ tgt Kerberos).
@Michael: Cảm ơn sự đóng góp của bạn. Như bạn có thể thấy tôi đã viết điều này khá lâu rồi nên tôi không nhớ chi tiết chính xác, nhưng tôi khá chắc chắn đây chỉ là một ví dụ. Bạn nghĩ gì có thể được thực hiện để cải thiện câu trả lời này? –
kiểm tra liên kết của bạn đến hướng dẫn Sun SSO bằng kerberos và xem hình 6. Có vòng lặp mà tôi đã viết. –
Tôi nghĩ rằng tôi không bao gồm vòng lặp vì tôi không thể tìm ra phương thức readToken() và sendToken (...) được cho là phải làm. –