我使用wso2is作为我的OpenID提供程序来管理Web应用程序。然后,我将使用OAuth中介程序和授权中介人(使用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中介程序以更好地检查会话状态?
任何示例,正确方向的链接或指针都将非常有用。
谢谢。
答案 0 :(得分:0)
事实证明,我为尝试撤销的令牌使用了错误的ID。一旦开始使用jwt中的jti属性,一切都会按预期进行。
答案 1 :(得分:0)
OIDC规范仅指定如何处理用户的身份验证会话(尽管访问令牌是响应的一部分)。因此,在OIDC注销中,我们仅处理终止用户的已验证会话。
撤销与OIDC登录一起获得的令牌超出了规范。即使在我们当前的实现中,这也不是一件容易的事,因为我们不维护id_token与发出的访问令牌之间的关联。
但是,我们在[1]中引入了一个扩展点,该扩展点可用于OIDC注销流程中的类似要求。需要注意的是,即使使用此扩展,扩展开发人员也需要处理id_token和访问令牌之间的相关性。
也请点击以下链接以获得更好的解释