ネゴシエートを使用してプロキシで認証する必要があるアプリケーションを開発しています。ユーザーが Kerberos クライアントをインストールしていない可能性があります。プラットフォームへの依存を避けるために、MIT Kerberos Library を使用してこれを達成しようとしています。krb5_get_init_creds_password を使用して TKT を正常に取得し、krb5_verify_init_creds を検証しました。ここで、この TKT を使用して HTTP ヘッダーで送信される SPNEGO トークンを作成したいと考えています。SPNEGO トークンを作成するための API またはメソッドを教えてもらえますか?
1 に答える
この目的で gss_init_sec_context を使用できます。
いくつかの背景:-
SPNEGO は、HTTP ベースの通信用の kerberos 上の抽象化です (ただし、暗号化にはセキュリティ コンテキストを使用しません)。
この目的のために、次のことを行います:-
krb5_get_init_creds_password を取得し、krb5 mech 資格情報を取得したので、krb5_cc_new_unique を使用してメモリ内資格情報キャッシュを作成し、初期化します。
krb5_cc_store_cred を使用してそのキャッシュに保存します
gss_krb5_import_cred を使用して GSSAPI トークンを取得する
これで、必要な事前認証情報がすべて揃いました。gss_init_sec_context を使用して入力トークンを作成するだけです。
ここが良い点です。最新の MIT Kerberos ライブラリは SPNEGO をネイティブにサポートしています。作成する必要がある gss_OID という OID 構造があります。SPNEGO の場合:-
static gss_OID_desc _gss_mech_spnego = { 6, (void *) "\x2b\x06\x01\x05\x05\x02" };
これを引数として gss_init_sec_context に渡します。
古い MIT Kerberos ライブラリを使用している場合は、この目的のために fbopenssl を使用することをお勧めします。curl のソース コードをチェックアウトして、その方法を確認できます。