001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */
019:
020: package samples.userguide;
021:
022: import org.apache.ws.security.WSPasswordCallback;
023:
024: import javax.security.auth.callback.Callback;
025: import javax.security.auth.callback.CallbackHandler;
026: import javax.security.auth.callback.UnsupportedCallbackException;
027:
028: import java.io.IOException;
029:
030: public class PWCallback implements CallbackHandler {
031:
032: /**
033: * Field key
034: */
035:
036: private static final byte[] key = {
037:
038: (byte) 0x31, (byte) 0xfd, (byte) 0xcb, (byte) 0xda, (byte) 0xfb,
039:
040: (byte) 0xcd, (byte) 0x6b, (byte) 0xa8, (byte) 0xe6, (byte) 0x19,
041:
042: (byte) 0xa7, (byte) 0xbf, (byte) 0x51, (byte) 0xf7, (byte) 0xc7,
043:
044: (byte) 0x3e, (byte) 0x80, (byte) 0xae, (byte) 0x98, (byte) 0x51,
045:
046: (byte) 0xc8, (byte) 0x51, (byte) 0x34, (byte) 0x04,
047:
048: };
049:
050: /*
051:
052: * (non-Javadoc)
053:
054: * @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[])
055:
056: */
057:
058: /**
059: * Method handle
060: *
061: * @param callbacks
062: * @throws java.io.IOException
063: * @throws javax.security.auth.callback.UnsupportedCallbackException
064: *
065: */
066:
067: public void handle(Callback[] callbacks)
068:
069: throws IOException, UnsupportedCallbackException {
070:
071: for (int i = 0; i < callbacks.length; i++) {
072:
073: if (callbacks[i] instanceof WSPasswordCallback) {
074:
075: WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
076:
077: /*
078:
079: * This usage type is used only in case we received a
080:
081: * username token with a password of type PasswordText or
082:
083: * an unknown password type.
084:
085: *
086:
087: * This case the WSPasswordCallback object contains the
088:
089: * identifier (aka username), the password we received, and
090:
091: * the password type string to identify the type.
092:
093: *
094:
095: * Here we perform only a very simple check.
096:
097: */
098:
099: if (pc.getUsage() == WSPasswordCallback.USERNAME_TOKEN_UNKNOWN) {
100:
101: if (pc.getIdentifer().equals("Ron")
102: && pc.getPassword().equals("noR")) {
103:
104: return;
105:
106: }
107:
108: if (pc.getIdentifer().equals("joe")
109: && pc.getPassword().equals("eoj")) {
110:
111: return;
112:
113: }
114:
115: if (pc.getPassword().equals("sirhC")) {
116:
117: return;
118:
119: }
120:
121: throw new UnsupportedCallbackException(
122: callbacks[i],
123:
124: "check failed");
125:
126: }
127:
128: /*
129:
130: * here call a function/method to lookup the password for
131:
132: * the given identifier (e.g. a user name or keystore alias)
133:
134: * e.g.: pc.setPassword(passStore.getPassword(pc.getIdentfifier))
135:
136: * for Testing we supply a fixed name here.
137:
138: */
139:
140: if (pc.getUsage() == WSPasswordCallback.KEY_NAME) {
141:
142: pc.setKey(key);
143:
144: } else if (pc.getIdentifer().equals("alice")) {
145:
146: pc.setPassword("password");
147:
148: } else if (pc.getIdentifer().equals("bob")) {
149:
150: pc.setPassword("password");
151:
152: } else if (pc.getIdentifer().equals("Ron")) {
153:
154: pc.setPassword("noR");
155:
156: } else if (pc.getIdentifer().equals("joe")) {
157:
158: pc.setPassword("eoj");
159:
160: } else if (pc.getIdentifer().equals("ip")) {
161:
162: pc.setPassword("password");
163:
164: } else {
165:
166: pc.setPassword("sirhC");
167:
168: }
169:
170: } else {
171:
172: throw new UnsupportedCallbackException(callbacks[i],
173:
174: "Unrecognized Callback");
175:
176: }
177:
178: }
179:
180: }
181:
182: }
|