次のコードがあります。
public static void main(String args[]){
try {
//String ticket = "Negotiate YIGCBg...==";
//byte[] kerberosTicket = ticket.getBytes();
byte[] kerberosTicket = Base64.decode("YIGCBg...==");
GSSContext context = GSSManager.getInstance().createContext((GSSCredential) null);
context.acceptSecContext(kerberosTicket, 0, kerberosTicket.length);
String user = context.getSrcName().toString();
context.dispose();
} catch (GSSException e) {
e.printStackTrace();
} catch (Base64DecodingException e) {
e.printStackTrace();
}
}
もちろん失敗します。例外は次のとおりです。
GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
これを解決するために何をすべきかわかりません。正直なところ、私は Kerberos をよく理解していません。
WWW-Authenticate
値として「Negotiate」を含む適切なヘッダーを付けて 401 を送信することで、このチケットを取得しました。authorization
ブラウザーは、このチケットを含むヘッダーを使用して、同じ要求をすぐに再度発行しました。
チケットを検証して、ユーザーが誰であるかを特定できることを望んでいました。
キータブファイルは必要ですか? もしそうなら、どの資格情報でこれを実行しますか? Web サイトの認証に Kerberos チケットを使用しようとしています。資格情報は IIS からの資格情報でしょうか?
私は何が欠けていますか?
更新 1 Michael-O の返信から、もう少しグーグルで調べたところ、この記事が見つかり、この記事にたどり着きました。
table 3
で、 を見つけました1.3.6.1.5.5.2 SPNEGO
。
最初の記事の例に従って、資格情報にそれを追加しました。これが私のコードです:
public static void main(String args[]){
try {
Oid mechOid = new Oid("1.3.6.1.5.5.2");
GSSManager manager = GSSManager.getInstance();
GSSCredential myCred = manager.createCredential(null,
GSSCredential.DEFAULT_LIFETIME,
mechOid,
GSSCredential.ACCEPT_ONLY);
GSSContext context = manager.createContext(myCred);
byte[] ticket = Base64.decode("YIGCBg...==");
context.acceptSecContext(ticket, 0, ticket.length);
String user = context.getSrcName().toString();
context.dispose();
} catch (GSSException e) {
e.printStackTrace();
} catch (Base64DecodingException e) {
e.printStackTrace();
}
}
しかし、コードは次のcreateCredential
エラーで失敗しています。
GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos credentails)
チケット全体は次のとおりです。YIGCBgYrBgEFBQKgeDB2oDAwLgYKKwYBBAGCNwICCgYJKoZIgvcSAQICBgkqhkiG9xIBAgIGCisGAQQBgjcCAh6iQgRATlRMTVNTUAABAAAAl7II4g4ADgAyAAAACgAKACgAAAAGAbEdAAAAD0xBUFRPUC0yNDVMSUZFQUNDT1VOVExMQw==