Наконец-то нашли решение.В итоге я создал файл redirect.jsp на сервере Pentaho.Затем я передал зашифрованный http-токен авторизации, расшифровал его, а затем перенаправил на страницу входа.Отлично работает.
РЕДАКТИРОВАТЬ
Действительно старый вопрос, но меня попросили предоставить больше информации о моем решении.Итак, начнем.
Во-первых, стандартная установка Pentaho использовалась HTTP Basic Authentication (BA)
.Если вы используете решение с единым входом или LDAP, это может не сработать.
Поэтому я поместил файл JSP
в папку ROOT
в папке ..tomcat\webapps\ROOT
.Этот JSP берет переданную в логине информацию и расшифровывает ее.Эта информация для входа в систему является всего лишь BASE64
аутентифицированным запросом.
Это ни в коем случае не является сверхбезопасным.Но он позволил мне отправить зашифрованного пользователя / пароль с одного сервера и передать его на другой сервер.Конечно, если вы полностью используете SSL, то это, вероятно, не нужно, но у нас была ситуация, когда информация передавалась в виде открытого текста ВНУТРЕННЕ.Таким образом, он никогда не подвергался воздействию извне, но я все же хотел убедиться, что наши внутренние серверы максимально безопасны.
JSP:
<%@page contentType="text/html; charset=iso-8859-1" language="java"
import="java.security.*"
import="javax.crypto.Cipher"
import="javax.crypto.spec.SecretKeySpec"
import="sun.misc.*"
%>
<%
// Decrypt authenticated hash
String ALGORITHM = "AES";
byte[] keyValue = "MY-SECRET-PASSWORD".getBytes();
Key key = new SecretKeySpec(keyValue, ALGORITHM);
Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.DECRYPT_MODE, key);
byte[] decodedValue = new BASE64Decoder().decodeBuffer(new String(request.getParameter("auth")));
byte[] decValue = c.doFinal(decodedValue);
String decryptedValue = new String(decValue);
%>
<script type="text/javascript">
var auth = '<%= decryptedValue%>';
function AJAX(url, callback) {
var req = init();
req.onreadystatechange = processRequest;
function init() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
function processRequest () {
// readyState of 4 signifies request is complete
if (req.readyState == 4) {
// status of 200 signifies sucessful HTTP call
if (req.status == 200) {
if (callback) callback(req.responseXML);
}
}
}
this.doGet = function() {
req.open("GET", url, true);
req.setRequestHeader("Authorization", "Basic " + auth);
req.send(null);
}
}
var url = "/pentaho/Home";
var querystr = "";
var ajax = new AJAX(url, function(){
window.location = url;
});
ajax.doGet(querystr);
</script>
Итак, мой сервер авторизации аутентифицируетПользователь использует ту же базу данных MySQL, которую использует Pentaho, создает запрос с проверкой подлинности (BA), его выполняет BASE64, шифрует его с использованием того же MY-SECRET-PASSWORD
и отправляет его в JSP.Затем JSP расшифровывает его, читает заголовок BA и передает его в Pentaho.
Отлично работает для нас.
Надеюсь, он кому-нибудь поможет.