私は、Windows 10 で実行されている Java アプリケーションで真の SSO に取り組んでいます。私のアプリケーションには、Java の GSSAPI を使用した Kerberos 認証が既にあります (ただし、特に厳格なセキュリティ ポリシーとドメイン ユーザーを使用する最新の Windows では明らかに機能しません)。現在の認証システムを Waffle に置き換えて、アプリ全体の設計への影響を最小限に抑えます。これは、KerberosTicket インスタンスを何らかの方法で取得できれば可能だと思います。この機能の作成に苦労しています。これまでのところ、トークンを要求することができましたが、このトークンが何であるかはよくわかりません。Kerberos チケットの形式と一致しません。これが私のものです(実際には、オンラインで見つかったコードに似ています):
public byte[] getServiceTicketSSPI() {
final String securityPackage = "Kerberos";
final String targetName = "<disclosed>";
IWindowsCredentialsHandle clientCredentials = null;
WindowsSecurityContextImpl clientContext = null;
final String currentUser = WindowsAccountImpl.getCurrentUsername();
try {
clientCredentials = WindowsCredentialsHandleImpl.getCurrent(securityPackage);
clientCredentials.initialize();
// initial client security context
clientContext = new WindowsSecurityContextImpl();
clientContext.setPrincipalName(currentUser);
clientContext.setCredentialsHandle(clientCredentials);
clientContext.setSecurityPackage(securityPackage);
final Sspi.SecBufferDesc continueToken = null;
do {
if(debug)
System.out.println("Using target name: " + targetName);
clientContext.initialize(clientContext.getHandle(), continueToken, targetName);
} while(clientContext.isContinue());
return clientContext.getToken();
} finally {
if (clientContext != null)
clientContext.dispose();
if (clientCredentials != null)
clientCredentials.dispose();
}
}
公平を期すために、SSPIで実際のチケットを実際に見ることができるかどうかさえわかりません。このスニペットで正しい方向に進んでいますか? 私は本当に幸せになるので、私が何をすべきかについての手がかりを見てください. 最後に KerberosTicket インスタンスがあれば完璧です。