Как я могу сделать запрос имени в OpenIG?
Я пытался использовать этот Openig Identity Gateway от ForgeRock guys для интеграции некоторых устаревших систем в этом случае, в частности, я использую его с OpenACS+.LRN проект, от Ars Digita и различных учреждений.
Вот в чем проблема: используя рецепты, найденные в документации OpenIG, чтобы извлечь скрытые значения и ответить на куки запросов, чтобы избежать проблем с безопасностью, я получил успешный запрос POST, чтобы войти в систему, но после запроса OpenACS журнал говорит мне, что первоначальная петиция запросила что-то вроде http://10.10.10.10/register
, а не настоящая петиция клиента http://openacs-domain.com/register
и прерывается на 302 перенаправление в направлении IP, чтобы сделать новый вход.
Я изменил/etc / hosts, чтобы проверить, выполняет ли он разрешение имен без успеха.
Любопытно, что если я возвращаюсь в домен, когда был сделан первоначальный запрос, у меня есть действительная инициированная сессия, и все в порядке.
Я надеюсь, что был достаточно описательным и у кого-то есть решение для этого. Я приложу свой конфиг.json
{
"heap": {
"objects": [
{
"name": "HandlerServlet",
"comment": "Entry point that transforms Servlet request to handler request.",
"type": "HandlerServlet",
"config": {
"handler": "DispatchHandler",
"baseURI":"http://10.10.10.10"
}
},
{
"name": "DispatchHandler",
"type": "DispatchHandler",
"config": {
"bindings": [
{
"condition": "${exchange.request.uri.path == '/register/'}",
"handler": "LoginChain"
},
{
"handler": "OutgoingChain",
},
]
}
},
{
"name": "LoginChain",
"type": "Chain",
"config": {
"filters": ["SwitchFilter", "HiddenValueExtract"],
"handler": "OutgoingChain"
}
},
{
"name": "HiddenValueExtract",
"type": "EntityExtractFilter",
"config": {
"messageType": "response",
"target": "${exchange.hiddenValue}",
"bindings": [
{
"key": "time",
"pattern": "time"s.*value="(.{10})"",
"template": "$1"
},
{
"key": "tokenId",
"pattern": "token_id"s.*value="(.{3})"",
"template": "$1"
},
{
"key": "hash",
"pattern": "hash"s.*value="(.*)"",
"template": "$1"
}
]
}
},
{
"name": "SwitchFilter",
"type": "SwitchFilter",
"config": {
"onResponse": [
{
"condition": "${exchange.response.status == 200}",
"handler": "LoginRequestHandler"
}
]
}
},
{
"name": "LoginRequestHandler",
"type": "Chain",
"config": {
"filters": ["LoginRequest"],
"handler": "OutgoingChain"
}
},
{
"name": "LoginRequest",
"type": "StaticRequestFilter",
"config": {
"method": "POST",
"uri": "http://10.10.10.10/register/",
"form": {
"form:mode": ["edit"],
"form:id": ["login"],
"__confirmed_p": ["0"],
"__refreshing_p": ["0"],
"return_url": ["/dotlrn/control-panel"],
"time": ["${exchange.hiddenValue.time}"],
"token_id": ["${exchange.hiddenValue.tokenId}"],
"hash": ["${exchange.hiddenValue.hash}"]
"email": ["user.example@gmail.com"],
"password": ["password"]
}
"headers": {
"cookie": ["${exchange.response.headers['Set-Cookie'][0]}"],
}
}
},
{
"name": "OutgoingChain",
"type": "Chain",
"config": {
"filters": ["CaptureFilter"],
"handler": "ClientHandler"
}
},
{
"name": "CaptureFilter",
"type": "CaptureFilter",
"config": {
"captureEntity": false,
"file": "/tmp/gateway.log",
}
},
{
"name": "ClientHandler",
"comment": "Responsible for sending all requests to remote servers.",
"type": "ClientHandler",
"config": {
}
}
]
},
"servletObject": "HandlerServlet",
}
1 ответ:
Это окончательная версия:
{ "heap": { "objects": [ { "name": "LogSink", "comment": "Default sink for logging information.", "type": "ConsoleLogSink", "config": { "level": "DEBUG", } }, { "name": "DispatchServlet", "type": "DispatchServlet", "config": { "bindings": [ { "pattern":"^/saml", "object":"FederationServlet" }, { "pattern":"", "object":"HandlerServlet" } ] } }, { "name": "FederationServlet", "type": "org.forgerock.openig.saml.FederationServlet", "config": { "assertionMapping": { "userName":"mail", "password":"employeenumber" }, "subjectMapping":"subjectName", "redirectURI":"/register", "logoutURI":"/register/logout" } }, { "name": "HandlerServlet", "comment": "Entry point that transforms Servlet request to handler request.", "type": "HandlerServlet", "config": { "handler": "DispatchHandler", "baseURI":"http://www.plataformaciapem.org.mx" } }, { "name": "DispatchHandler", "type": "DispatchHandler", "config": { "bindings": [ { "condition": "${exchange.request.uri.path != '/register/'}", "handler": "ClientHandler" }, { "condition": "${empty exchange.session.userName}", "handler": "SPInitiatedSSORedirectHandler", }, { "handler": "LoginChain", }, ] } }, { "name": "SPInitiatedSSORedirectHandler", "type": "StaticResponseHandler", "config": { "status": 302, "reason": "Found", "headers": { "Location": ["http://www.plataformaciapem.org.mx/saml/SPInitiatedSSO"] } } }, { "name": "LoginChain", "type": "Chain", "config": { "filters": ["SwitchFilter", "HiddenValueExtract"], "handler": "OutgoingChain" } }, { "name": "HiddenValueExtract", "type": "EntityExtractFilter", "config": { "messageType": "response", "target": "${exchange.hiddenValue}", "bindings": [ { "key": "time", "pattern": "time\"\s.*value=\"(.{10})\"", "template": "$1" }, { "key": "tokenId", "pattern": "token_id\"\s.*value=\"(.{3})\"", "template": "$1" }, { "key": "hash", "pattern": "hash\"\s.*value=\"(.*)\"", "template": "$1" } ] } }, { "name": "SwitchFilter", "type": "SwitchFilter", "config": { "onResponse": [ { "condition": "${exchange.response.status == 200}", "handler": "LoginRequestHandler" } ] } }, { "name": "LoginRequestHandler", "type": "Chain", "config": { "filters": ["LoginRequest"], "handler": "OutgoingChain" } }, { "name": "LoginRequest", "type": "StaticRequestFilter", "config": { "method": "POST", "uri": "http://www.plataformaciapem.org.mx/register/", "form": { "form:mode": ["edit"], "form:id": ["login"], "__confirmed_p": ["0"], "__refreshing_p": ["0"], "return_url": ["/dotlrn/control-panel"], "time": ["${exchange.hiddenValue.time}"], "token_id": ["${exchange.hiddenValue.tokenId}"], "hash": ["${exchange.hiddenValue.hash}"] "email": ["${exchange.session.userName}"], "password": ["${exchange.session.password}"], } "headers": { "cookie": ["${exchange.response.headers['Set-Cookie'][0]}"], } } }, { "name": "OutgoingChain", "type": "Chain", "config": { "filters": ["CaptureFilter"], "handler": "ClientHandler" } }, { "name": "CaptureFilter", "type": "CaptureFilter", "config": { "captureEntity": false, "file": "/tmp/gateway.log", } }, { "name": "ClientHandler", "comment": "Responsible for sending all requests to remote servers.", "type": "ClientHandler", "config": { } } ] }, "servletObject": "DispatchServlet", }