使用Auth0在所有应用程序中单一注销

时间:2015-06-09 11:54:11

标签: javascript single-sign-on auth0

我有这样的网址“http://mywebsite.com”。我使用Auth0登录我的web应用程序。一旦用户登录我的应用程序,我将使用相同的登录(单一登录)将用户登录到我的wordpress网站和其他网站。一旦用户退出我的应用程序,我需要从wordpress和其他网站注销(单点登录/退出)。

有可能吗?

请建议更好的选择

4 个答案:

答案 0 :(得分:2)

没有亲身做过这方面的经验,但这直接来自Auth0上的文档:

“这将清除Auth0为该用户设置的任何单点登录cookie。如果您还想将用户从其身份提供者中注销,请将联合查询字符串参数添加到注销URL:

https://appname.auth0.com/v2/logout?federated

答案 1 :(得分:2)

此时我有同样的要求。我也在使用Auth0。

从他们的文档中,我了解到调用Auth0注销端点只会清除Auth0上的SSO cookie,并且不会注销所有其他应用程序。我们有责任清除每个应用程序的会话。

使用此处的https://github.com/auth0/auth0-single-sign-out-sample

中的Auth0 anjularjs示例进行了解释

希望这有帮助。

答案 2 :(得分:1)

@udayr的回答让我走上了正确的道路:

我实际上正在使用ASP.Net Owin,因此我在所有应用程序的 Auth0AccountController 中创建了 LogOff 端点的重载,如下所示:

    [HttpGet]
    public ActionResult LogOff() {
        return this.LogOff("");
    }

然后我添加了一个SLO(Single Log Of)视图,并将以下代码放在其上:

<iframe id="app1" height="0" width="0" src="http://app1.localtest.me/Auth0Account/LogOff"></iframe>

<iframe id="app2" height="0" width="0" src="http://app2.localtest.me/Auth0Account/LogOff"></iframe>

<h2 id="message">Logging off, please wait...</h2>

<script>

    var app1Ready = false;
    var app2Ready = false;

    $('iframe').load(function (e) {

        switch ($(e.target).attr("id")) {
            case "app1":
                app1Ready = true;
                break;
            case "app2":
                app2Ready = true;
                break;
        }

        if (app1Ready && app2Ready) {

            $("#message").html("You have been Logged Off successfully!");

        }

    });

</script>

基本上,我们需要通过iframe对新的LogOff端点进行Get调用,但缺点是所有应用程序都需要知道所有其他应用程序的注销URL,这需要在所有应用程序上实现它们。

答案 3 :(得分:1)

要从多个应用程序中注销用户,可以始终通过定期使用checkSession()方法来检查用户的auth0会话是否已过期。如果该用户没有活动会话,则可以从应用程序中注销该用户。

// check every 15 minutes if the SSO session is still active

    setInterval(function() {
      // if the token is not in local storage, there is nothing to check (that is, the user is already logged out)
      if (!localStorage.getItem('userToken')) return;

      auth0.checkSession(function (err, data) {
        if (err) { 
          // if we get here, it means there is no session on Auth0,
          // then remove the token and redirect to #login
          localStorage.removeItem('userToken');
          window.location.href = '#login';
        }
      });
    }, 900000)

https://auth0.com/docs/sso/current/single-page-apps#single-log-out https://auth0.com/docs/migrations/guides/legacy-lock-api-deprecation#session-management

要清除服务器会话,您需要执行的所有操作将用户重定向到 /v2/logout 端点。 https://auth0.com/docs/logout/guides/logout-auth0

如果用户正在使用外部身份提供程序登录,则可以通过在调用 federated时添加 /v2/logout querystring参数来强制用户从IDP注销。 端点 https://auth0.com/docs/logout/guides/logout-idps

对于SAML IDP,您必须在连接设置中配置 SAML注销URI https://auth0.com/docs/logout/guides/logout-saml-idps