我使用wso2is作为我的OpenID提供程序来处理Web应用程序。然后我使用OAuth Mediator和Entitlement Mediator(使用wso2is作为我的PDP)通过wso2企业集成商从我的应用程序进行服务调用。
一切都很好。当我注销用户时出现问题。
我将用户发送到我的wso2is服务器上的/ oidc / logout,并将它们重定向回我的应用程序的注销URL。这也很好,并将用户从前端应用程序中取出。
如果我尝试使用已注销用户的访问令牌访问服务,则会出现问题。它很乐意允许我访问服务,直到访问令牌过期。
理想情况下,我想要的是,一旦用户注销,wso2ie将拒绝访问服务(在oauth调解器或授权调解器阶段)。
我已经看过前端注销,后端注销和openid会话管理,我不确定什么是最适合我想做的事情。
我也看过oidc / revoke端点,它感觉它完全符合我的需要,但是我还没能让它正常工作。无论我如何提出请求,它总是抱怨客户端ID不在请求中(即使我在发布的数据中明确设置它)
以下是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以更好地检查会话状态?
任何正确方向的示例,链接或指针都会很棒。
谢谢。
OIDC规范仅指定如何处理用户的经过身份验证的会话(尽管访问令牌是响应的一部分)。因此,在OIDC注销中,我们只处理终止用户的经过身份验证的会话。
撤销与OIDC登录一起获得的令牌超出了规范。即使在我们当前的实现中,这也不是直截了当的,因为我们不保持id_token和发出的访问令牌之间的相关性。
但是,我们在[1]中引入了一个扩展点,可以在OIDC注销流程中用于类似的要求。需要注意的是,即使使用此扩展,id_token和访问令牌之间的相关性也需要由扩展开发人员处理。
请按照以下链接进行更好的解释
事实证明我正在使用错误的id来获取我试图撤销的令牌。一旦我开始使用jwt中的jti属性,一切都按预期工作。