blob: a837dbc4858d76c32554403a37478a41404fa7a7 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.wss4j.common.ext;
import org.apache.xml.security.exceptions.XMLSecurityException;
import javax.xml.namespace.QName;
/**
* Exception class for WS-Security.
*/
public class WSSecurityException extends XMLSecurityException {
private static final long serialVersionUID = 4703352039717763655L;
/****************************************************************************
* Fault codes defined in the WSS 1.1 spec under section 12, Error handling
*/
public static final String NS_WSSE10 =
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
/**
* An unsupported token was provided
*/
public static final QName UNSUPPORTED_SECURITY_TOKEN = new QName(NS_WSSE10, "UnsupportedSecurityToken");
/**
* An unsupported signature or encryption algorithm was used
*/
public static final QName UNSUPPORTED_ALGORITHM = new QName(NS_WSSE10, "UnsupportedAlgorithm");
/**
* An error was discovered processing the <Security> header
*/
public static final QName INVALID_SECURITY = new QName(NS_WSSE10, "InvalidSecurity");
/**
* An invalid security token was provided
*/
public static final QName INVALID_SECURITY_TOKEN = new QName(NS_WSSE10, "InvalidSecurityToken");
/**
* The security token could not be authenticated or authorized
*/
public static final QName FAILED_AUTHENTICATION = new QName(NS_WSSE10, "FailedAuthentication");
/**
* The signature or decryption was invalid
*/
public static final QName FAILED_CHECK = new QName(NS_WSSE10, "FailedCheck");
/**
* Referenced security token could not be retrieved
*/
public static final QName SECURITY_TOKEN_UNAVAILABLE = new QName(NS_WSSE10, "SecurityTokenUnavailable");
/**
* The message has expired
*/
public static final QName MESSAGE_EXPIRED = new QName(NS_WSSE10, "MessageExpired");
/**
* Generic Security error
*/
public static final QName SECURITY_ERROR =
new QName("http://ws.apache.org/wss4j", "SecurityError");
// FAULT error messages
public static final String UNSUPPORTED_TOKEN_ERR = "An unsupported token was provided";
public static final String UNSUPPORTED_ALGORITHM_ERR =
"An unsupported signature or encryption algorithm was used";
public static final String INVALID_SECURITY_ERR =
"An error was discovered processing the <wsse:Security> header.";
public static final String INVALID_SECURITY_TOKEN_ERR =
"An invalid security token was provided";
public static final String FAILED_AUTHENTICATION_ERR =
"The security token could not be authenticated or authorized";
public static final String FAILED_CHECK_ERR = "The signature or decryption was invalid";
public static final String SECURITY_TOKEN_UNAVAILABLE_ERR =
"Referenced security token could not be retrieved";
public static final String MESSAGE_EXPIRED_ERR = "The message has expired";
public static final String UNIFIED_SECURITY_ERR =
"A security error was encountered when verifying the message";
public enum ErrorCode {
FAILURE(null), //Non standard error message
UNSUPPORTED_SECURITY_TOKEN(WSSecurityException.UNSUPPORTED_SECURITY_TOKEN),
UNSUPPORTED_ALGORITHM(WSSecurityException.UNSUPPORTED_ALGORITHM),
INVALID_SECURITY(WSSecurityException.INVALID_SECURITY),
INVALID_SECURITY_TOKEN(WSSecurityException.INVALID_SECURITY_TOKEN),
FAILED_AUTHENTICATION(WSSecurityException.FAILED_AUTHENTICATION),
FAILED_CHECK(WSSecurityException.FAILED_CHECK),
SECURITY_TOKEN_UNAVAILABLE(WSSecurityException.SECURITY_TOKEN_UNAVAILABLE),
MESSAGE_EXPIRED(WSSecurityException.MESSAGE_EXPIRED),
FAILED_ENCRYPTION(null), //Non standard error message
FAILED_SIGNATURE(null), //Non standard error message
SECURITY_ERROR(WSSecurityException.SECURITY_ERROR);
private QName qName;
ErrorCode(QName qName) {
this.qName = qName;
}
public QName getQName() {
return qName;
}
}
private ErrorCode errorCode;
public WSSecurityException(ErrorCode errorCode) {
this(errorCode, errorCode.name());
}
public WSSecurityException(ErrorCode errorCode, String msgId) {
super(msgId, new Object[]{});
this.errorCode = errorCode;
}
public WSSecurityException(ErrorCode errorCode, Exception exception) {
super(exception);
this.errorCode = errorCode;
}
public WSSecurityException(ErrorCode errorCode, Exception exception, String msgId) {
super(exception, msgId);
this.errorCode = errorCode;
}
public WSSecurityException(ErrorCode errorCode, Exception exception, String msgId, Object[] arguments) {
super(exception, msgId, arguments);
this.errorCode = errorCode;
}
public WSSecurityException(ErrorCode errorCode, String msgId, Object[] arguments) {
super(msgId, arguments);
this.errorCode = errorCode;
}
/**
* Get the error code.
* <p/>
*
* @return error code of this exception See values above.
*/
public ErrorCode getErrorCode() {
return this.errorCode;
}
/**
* Get the fault code QName for this associated error code.
* <p/>
*
* @return the fault code QName of this exception
*/
public QName getFaultCode() {
return this.errorCode.getQName();
}
/**
* Get a "safe" / unified error message, so as not to leak internal configuration
* to an attacker.
*/
public String getSafeExceptionMessage() {
return UNIFIED_SECURITY_ERR;
}
/**
* Get the "safe" / unified fault code QName associated with this exception, so as
* not to leak internal configuration to an attacker
*/
public QName getSafeFaultCode() {
return SECURITY_ERROR;
}
}