3

GSSAPIを使用してサーバーにログインするC++クライアントを開発しています。クレデンシャルについては、gssメソッドを使用してクレデンシャルオブジェクトを作成しています(以下のコードで説明されています)。この部分の私のコードは

#include <gssapi.h>             
#include <gssapi_krb5.h>
#include <gssapi/gssapi_generic.h>
#include <gssapi/gssapi_ext.h>

gss_cred_id_t method_to_get_cred(){

      char *username = "asanyal@DOMAIN.COM";
      char *password = "correctpassword";
      gss_buffer_desc send_tok;
      OM_uint32 maj_stat, min_stat;
      gss_cred_id_t cred;
      gss_name_t gss_username;
      gss_OID_set_desc mechs, *mechsp = GSS_C_NO_OID_SET;
      gss_buffer_desc pwbuf;

      send_tok.value = username;
      send_tok.length = strlen(username);

      maj_stat = gss_import_name(&min_stat, &send_tok,(
             gss_OID) gss_nt_user_name,&gss_username);
      if (maj_stat != GSS_S_COMPLETE) {
         printf("parsing client name %d %d \n ", maj_stat, min_stat);
         return -1;
        }
        printf("Maj stat after gss_import_name: %d \n", maj_stat);
         printf("Acquired username \n");
     //getting username complete

     //getting password

      pwbuf.value = password;
      pwbuf.length = strlen(password);

      maj_stat = gss_acquire_cred_with_password(&min_stat,
          gss_username,
          &pwbuf, 0,
          mechsp, GSS_C_INITIATE,
          &cred, NULL, NULL);
          printf("Acquired password \n");


      //getting password complete
       printf("Maj stat and min stat after gss_acquire_cred_with_password: %d %d\n",     maj_stat, min_stat);
           return(cred);
}

現在、メジャーステータス(gssapiレベルのステータス)とマイナーステータス(メカニズムレベルのステータス)を出力しています。この場合はKerberosです。ログインしたユーザー(つまり、asanyal)に与えると、ステータスprintfメッセージは両方の値に0を与えます(すべてうまくいきます)

ただし、別のユーザー名を使用すると(これは、Active Directoryに登録されていますが、彼としてログインしていません)、次のようになります。

majstat = 851968 and minstat = -1765328243

さらに調査したところ、このマイナーステータスメッセージはエラーに対応していることが判明しました

KRB5_CC_NOTFOUND    Matching credential not found

ログインしていないユーザーに正しい資格情報(ユーザー名パスワード)を渡していると確信しています)

これはGSSAPIの内部的な問題ですか(チケットなどを取得できない可能性があります)、それとも私は何か間違いを犯していますか?

使用した構成:Windows Active Directory(Windows Server 2008)およびMITKerberosライブラリ-バージョン4.0.1

4

1 に答える 1

3

わかりました。GSS-API には、TGT、ST を直接取得するための API 呼び出しは含まれていません。そのためには、krb api が必要です (基になる kerberos メカニズムの場合)。通常、次のような関数が必要です:-

krb5_get_init_creds_password(context,&creds,principal,conn->passwd,NULL,NULL,NULL,NULL,opts))            //these are the arguments i specified in my program

特定のコンテキスト、資格キャッシュ、およびプリンシパルの初期化部分とともに。

于 2013-03-21T09:26:50.983 に答える