HTTP 要求に対する J2EE、.NET、Java™、Web サービスの各クライアント用 SPNEGO トークンの作成

ご使用のアプリケーション用に Simple and Protected GSS-API Negotiation (SPNEGO) トークンを作成し、このトークンを HTTP ヘッダーに挿入して、WebSphere® Application Server に対する認証を行うことができます。

手順

  1. クライアント GSS クレデンシャルを作成します。以下の 4 つのオプションから 1 つを選択します。
    1. GSS クレデンシャルを Kerberos クレデンシャル・キャッシュ用に作成します。 以下に例を示します。
              System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
              Oid krb5MechOid    = new Oid("1.2.840.113554.1.2.2");
              Oid spnegoMechOid  = new Oid("1.3.6.1.5.5.2");
      
              GSSManager manager = GSSManager.getInstance();
              GSSName gssUserName = manager.createName(userName, GSSName.NT_USER_NAME, krb5MechOid);
              clientGssCreds = manager.createCredential(gssUserName.canonicalize(krb5MechOid),
                                                            GSSCredential.INDEFINITE_LIFETIME,
                                                            krb5MechOid,
                                                            GSSCredential.INITIATE_ONLY);
              clientGssCreds.add (gssUserName,
                                  GSSCredential.INDEFINITE_LIFETIME,
                                  GSSCredential.INDEFINITE_LIFETIME,
                                  spnegoMechOid,
                                  GSSCredential.INITIATE_ONLY);
    2. Kerberos チケットを持つサブジェクトから GSS クレデンシャルを作成します。 以下に例を示します。
             Oid krb5MechOid    = new Oid("1.2.840.113554.1.2.2");
             Oid spnegoMechOid  = new Oid("1.3.6.1.5.5.2");
      
             GSSManager manager = GSSManager.getInstance();
             clientGssCreds = (GSSCredential) Subject.doAs(subject, new PrivilegedExceptionAction() 
             {
                 public Object run() throws GSSException, Exception  
                 {
                     try {
                         gssName = manager.createName( userName,
                                                       GSSName.NT_USER_NAME,
                                                       getKrb5MechOid());
                         GSSCredential gssCred = manager.createCredential(
                                                         gssName.canonicalize(krb5MechOid),
                                                         GSSCredential.DEFAULT_LIFETIME,
                                                         krb5MechOid,
                                                         GSSCredential.INITIATE_ONLY);
                         gssCred.add (gssUserName,
                                      GSSCredential.INDEFINITE_LIFETIME,
                                      GSSCredential.INDEFINITE_LIFETIME,
                                      spnegoMechOid,
                                      GSSCredential.INITIATE_ONLY);
      
                         return gssCred;
                     } catch (GSSException gsse) {
                     } catch (Exception e) {
                     }
      
                     return null;
                 }
             });
    3. WSKRB5Login ログイン・モジュールを呼び出した後、GSS クレデンシャルを作成します。 以下に例を示します。
             Oid krb5MechOid    = new Oid("1.2.840.113554.1.2.2");
             Oid spnegoMechOid  = new Oid("1.3.6.1.5.5.2");
      
             System.setProperty("javax.security.auth.useSubjectCredsOnly", "true");
             GSSManager manager = GSSManager.getInstance();
             GSSName gssUserName = manager.createName(userName, GSSName.NT_USER_NAME, krb5MechOid);
             clientGssCreds = manager.createCredential(gssUserName.canonicalize(krb5MechOid),
                                                       GSSCredential.INDEFINITE_LIFETIME,
                                                       krb5MechOid,
                                                       GSSCredential.INITIATE_ONLY);
             clientGssCreds.add (gssUserName,
                                 GSSCredential.INDEFINITE_LIFETIME,
                                 GSSCredential.INDEFINITE_LIFETIME,
                                 spnegoMechOid,
                                 GSSCredential.INITIATE_ONLY);
    4. Microsoft ネイティブ Kerberos クレデンシャル・キャッシュを使用して、GSS クレデンシャルを作成します。 以下に例を示します。
             Oid krb5MechOid    = new Oid("1.2.840.113554.1.2.2");
             Oid spnegoMechOid  = new Oid("1.3.6.1.5.5.2");
      
             System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
             GSSManager manager = GSSManager.getInstance();
             
             clientGssCreds = manager.createCredential(null,
                                                        GSSCredential.INDEFINITE_LIFETIME,
                                                        krb5MechOid,
                                                        GSSCredential.INITIATE_ONLY);
      
             clientGssCreds.add(null,
                                GSSCredential.INDEFINITE_LIFETIME,
                                GSSCredential.INDEFINITE_LIFETIME,
                                spnegoMechOid, GSSCredential.INITIATE_ONLY);
      注: MSLSA: クレデンシャル・キャッシュは、Kerberos LSA.&nbsp からのセッション鍵を含む Kerberos チケット全体を抽出する機能に依存します。 セキュリティー向上の試みでは、Microsoft は、まず、Ticket Getting Tickets のセッション鍵をエクスポートしない機能を実装しました。これにより、追加のサービス・チケットの要求の作成時に IBM® JGSS で役に立たないことがあります。この新フィーチャーは、Windows 2003 Server および Windows XP SP2 Beta にあります。Microsoft は、この新フィーチャーを使用不可にするために以下のレジストリー・キーを提供しています。
      HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Control¥Lsa¥Kerberos¥Parameters
      AllowTGTSessionKey = 0x01 (DWORD)
      Windows XP SP2 Beta 1 では、キーは以下のように指定されています。
      HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Control¥Lsa¥Kerberos
      AllowTGTSessionKey = 0x01 (DWORD)
  2. クライアント GSS クレデンシャルを作成した後、SPNEGO トークンを作成し、 それを以下の例のように HTTP ヘッダーに挿入することができます。
           // create target server SPN
           GSSName gssServerName = manager.createName(targetServerSpn, GSSName.NT_USER_NAME);
    
           GSSContext clientContext = manager.createContext(gssServerName.canonicalize(spnegoMechOid),
                                                      spnegoMechOid,
                                                      clientGssCreds,
                                                      GSSContext.DEFAULT_LIFETIME);
           // optional enable GSS credential delegation
           clientContext.requestCredDeleg(true);
    
           byte[] spnegoToken = new byte[0];
    
           // create a SPNEGO token for the target server
           spnegoToken = clientContext.initSecContext(spnegoToken, 0, spnegoToken.length);
    
           URL url = new URL(targetUrl);
           HttpURLConnection con= (HttpURLConnection) url.openConnection();
    
           try {
               // insert SPNEGO token in the HTTP header
               con.setRequestProperty("Authorization", "Negotiate " + Base64.encode(spnegoToken));
               con.getResponseCode();          
           } catch (IOException e) {
           } catch (Exception ex) {
           }

タスクの結果

ご使用のアプリケーションで、Kerberos 構成ファイル (krb5.ini または krb5.conf) が必要になる場合があります。 詳しくは、[AIX Solaris HP-UX Linux Windows]Kerberos 構成ファイルの作成を参照してください。


トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_SPNEGO_token
ファイル名:tsec_SPNEGO_token.html