Enterprise Integrator中带有权利调解员的Openid Connect单一签出

时间:2019-01-15 13:58:46

标签: wso2 wso2esb wso2is wso2ei

我使用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中介程序以更好地检查会话状态?

任何示例,正确方向的链接或指针都将非常有用。

谢谢。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

撤销与OIDC登录一起获得的令牌超出了规范。即使在我们当前的实现中,这也不是一件容易的事,因为我们不维护id_token与发出的访问令牌之间的关联。

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

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

也请点击以下链接以获得更好的解释

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