Enterprise Integrator 中的 Openid Connect Single Signout 和 entitlement Mediator

Openid Connect Single Signout with entitlement Mediator in Enterprise Integrator

我正在使用 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 调解器以更好地检查会话状态?

任何指向正确方向的示例、链接或指示都会很棒。

谢谢。

事实证明,我为我试图撤销的令牌使用了错误的 ID。一旦我开始使用 jwt 中的 jti 属性,一切都会按预期进行。

OIDC 规范仅指定了如何处理用户的经过身份验证的会话(尽管访问令牌是响应的一部分)。因此,在 OIDC 注销中,我们只需处理终止用户的经过身份验证的会话。

撤销与 OIDC 登录一起获得的令牌超出了规范。即使在我们当前的实现中,这也不是一件简单的事情,因为我们没有维护 id_token 和颁发的访问令牌之间的相关性。

但是,我们在 [1] 中引入了一个扩展点,可用于 OIDC 注销流程期间的类似要求。需要注意的是,即使有了这个扩展,id_token 和访问令牌之间的关联也需要由扩展开发人员处理。

[1] https://github.com/wso2/product-is/issues/3227

请按照下面link以及更好的解释

http://wso2-oxygen-tank.10903.n7.nabble.com/Validity-of-access-token-after-OIDC-SLO-td158896.html#a158919