1 /* 2 * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.security.jgss; 27 28 import org.ietf.jgss.*; 29 30 /** 31 * The extended GSSContext interface for supporting additional 32 * functionalities not defined by {@code org.ietf.jgss.GSSContext}, 33 * such as querying context-specific attributes. 34 */ 35 public interface ExtendedGSSContext extends GSSContext { 36 /** 37 * Return the mechanism-specific attribute associated with {@code type}. 38 * <br><br> 39 * For each supported attribute type, the type for the output are 40 * defined below. 41 * <ol> 42 * <li>{@code KRB5_GET_TKT_FLAGS}: 43 * the returned object is a boolean array for the service ticket flags, 44 * which is long enough to contain all true bits. This means if 45 * the user wants to get the <em>n</em>'th bit but the length of the 46 * returned array is less than <em>n</em>, it is regarded as false. 47 * <li>{@code KRB5_GET_SESSION_KEY}: 48 * the returned object is an instance of {@link java.security.Key}, 49 * which has the following properties: 50 * <ul> 51 * <li>Algorithm: enctype as a string, where 52 * enctype is defined in RFC 3961, section 8. 53 * <li>Format: "RAW" 54 * <li>Encoded form: the raw key bytes, not in any ASN.1 encoding 55 * </ul> 56 * <li>{@code KRB5_GET_AUTHZ_DATA}: 57 * the returned object is an array of 58 * {@link com.sun.security.jgss.AuthorizationDataEntry}, or null if the 59 * optional field is missing in the service ticket. 60 * <li>{@code KRB5_GET_AUTHTIME}: 61 * the returned object is a String object in the standard KerberosTime 62 * format defined in RFC 4120 5.2.3 63 * </ol> 64 * 65 * If there is a security manager, an {@link InquireSecContextPermission} 66 * with the name {@code type.mech} must be granted. Otherwise, this could 67 * result in a {@link SecurityException}.<p> 68 * 69 * Example: 70 * <pre> 71 * GSSContext ctxt = m.createContext(...) 72 * // Establishing the context 73 * if (ctxt instanceof ExtendedGSSContext) { 74 * ExtendedGSSContext ex = (ExtendedGSSContext)ctxt; 75 * try { 76 * Key key = (key)ex.inquireSecContext( 77 * InquireType.KRB5_GET_SESSION_KEY); 78 * // read key info 79 * } catch (GSSException gsse) { 80 * // deal with exception 81 * } 82 * } 83 * </pre> 84 * @param type the type of the attribute requested 85 * @return the attribute, see the method documentation for details. 86 * @throws GSSException containing the following 87 * major error codes: 88 * {@link GSSException#BAD_MECH GSSException.BAD_MECH} if the mechanism 89 * does not support this method, 90 * {@link GSSException#UNAVAILABLE GSSException.UNAVAILABLE} if the 91 * type specified is not supported, 92 * {@link GSSException#NO_CONTEXT GSSException.NO_CONTEXT} if the 93 * security context is invalid, 94 * {@link GSSException#FAILURE GSSException.FAILURE} for other 95 * unspecified failures. 96 * @throws SecurityException if a security manager exists and a proper 97 * {@link InquireSecContextPermission} is not granted. 98 * @see InquireSecContextPermission 99 */ 100 public Object inquireSecContext(InquireType type) 101 throws GSSException; 102 103 /** 104 * Requests that the delegation policy be respected. When a true value is 105 * requested, the underlying context would use the delegation policy 106 * defined by the environment as a hint to determine whether credentials 107 * delegation should be performed. This request can only be made on the 108 * context initiator's side and it has to be done prior to the first 109 * call to <code>initSecContext</code>. 110 * <p> 111 * When this flag is false, delegation will only be tried when the 112 * {@link GSSContext#requestCredDeleg(boolean) credentials delegation flag} 113 * is true. 114 * <p> 115 * When this flag is true but the 116 * {@link GSSContext#requestCredDeleg(boolean) credentials delegation flag} 117 * is false, delegation will be only tried if the delegation policy permits 118 * delegation. 119 * <p> 120 * When both this flag and the 121 * {@link GSSContext#requestCredDeleg(boolean) credentials delegation flag} 122 * are true, delegation will be always tried. However, if the delegation 123 * policy does not permit delegation, the value of 124 * {@link #getDelegPolicyState} will be false, even 125 * if delegation is performed successfully. 126 * <p> 127 * In any case, if the delegation is not successful, the value returned 128 * by {@link GSSContext#getCredDelegState()} is false, and the value 129 * returned by {@link #getDelegPolicyState()} is also false. 130 * <p> 131 * Not all mechanisms support delegation policy. Therefore, the 132 * application should check to see if the request was honored with the 133 * {@link #getDelegPolicyState() getDelegPolicyState} method. When 134 * delegation policy is not supported, <code>requestDelegPolicy</code> 135 * should return silently without throwing an exception. 136 * <p> 137 * Note: for the Kerberos 5 mechanism, the delegation policy is expressed 138 * through the OK-AS-DELEGATE flag in the service ticket. When it's true, 139 * the KDC permits delegation to the target server. In a cross-realm 140 * environment, in order for delegation be permitted, all cross-realm TGTs 141 * on the authentication path must also have the OK-AS-DELAGATE flags set. 142 * @param state true if the policy should be respected 143 * @throws GSSException containing the following 144 * major error codes: 145 * {@link GSSException#FAILURE GSSException.FAILURE} 146 */ 147 public void requestDelegPolicy(boolean state) throws GSSException; 148 149 /** 150 * Returns the delegation policy response. Called after a security context 151 * is established. This method can be only called on the initiator's side. 152 * See {@link ExtendedGSSContext#requestDelegPolicy}. 153 * @return the delegation policy response 154 */ 155 public boolean getDelegPolicyState(); 156 }