Я использую wso2is в качестве провайдера OpenID для запуска веб-приложения. Затем я выполняю сервисные вызовы из своего приложения через корпоративного интегратора wso2, используя OAuth Mediator и Entitlement Mediator (используя wso2is в качестве моего PDP).
Это все работает очень хорошо.
Проблема возникает, когда я иду, чтобы выйти из системы пользователя.
Я отправляю пользователя в / oidc / logout на моем сервере wso2is и перенаправляю его обратно на URL выхода для моего приложения. Это также хорошо работает и регистрирует пользователя из приложения веб-интерфейса.
Проблема возникает, если я тогда пытаюсь получить доступ к сервису, используя маркер доступа пользователя, вышедшего из системы. К счастью, я получу доступ к сервису, пока не истечет токен доступа.
В идеале мне бы хотелось, чтобы wso2ie отказывал в доступе к сервису (либо на уровне посредника oauth, либо на уровне посредника прав), когда пользователь вышел из системы.
Я смотрел на выход из внешнего интерфейса, выход из внутреннего интерфейса и управление сеансами openid, и я не уверен, что лучше всего подходит для того, что я пытаюсь сделать.
Я также посмотрел на конечную точку oidc / revoke, которая чувствует, что она делает именно то, что мне нужно, но я не смог заставить ее работать должным образом. Независимо от того, как я делаю запрос, он всегда жалуется, что этого идентификатора клиента нет в запросе (даже если я явно установил его в публикуемых данных)
Ниже мое определение сервиса в wso2ei
<?xml version="1.0" encoding="UTF-8"?>
<!--Here is the service definition-->
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="ManagerPage"
startOnLoad="true"
statistics="disable"
trace="disable"
transports="https">
<target>
<inSequence>
<property name="scope" scope="default" type="STRING" value="openid"/>
<oauthService password="admin"
remoteServiceUrl="https://a8auth-dev.ls.cbn:8443/services/"
username="admin"/>
<entitlementService callbackClass="org.wso2.carbon.identity.entitlement.mediator.callback.OAUTHEntitlementCallbackHandler"
client="basicAuth"
remoteServicePassword="PASSWORD"
remoteServiceUrl="https://a8auth-dev.ls.cbn:8443/services"
remoteServiceUserName="USER">
<onReject>
<send>
<endpoint>
<address uri="https://a8services-dev.ls.cbn:8443/noperm/"/>
</endpoint>
</send>
</onReject>
<onAccept>
<send>
<endpoint>
<address uri="https://a8services-dev.ls.cbn:8445/manager/"/>
</endpoint>
</send>
</onAccept>
<obligations/>
<advice/>
</entitlementService>
</inSequence>
</target>
<description/>
</proxy>
Нужно ли создавать компонент-посредник, который будет проверять управление сеансами OpenID? Может быть, это уже существует?
Нужно ли расширять OAuth Mediator для лучшей проверки статуса сеансов?
Любой пример, ссылки или указатели в правильном направлении были бы хороши.
Спасибо.