使用 Auth0 在所有应用程序中单点注销
Single Sign out in All application using Auth0
我有 URL “http://mywebsite.com” 这样的。我正在使用 Auth0 登录我的网站 application.Once 用户登录我的应用程序 我将使用相同的登录名(单点登录)将用户登录到我的 wordpress 网站和其他网站。一旦用户从我的应用程序注销,我需要从 wordpress 和其他网站注销 Also(Single Sign OFF/OUT).
可以吗?
请提出更好的选择
没有任何个人经验,但这直接来自 Auth0 上的文档:
“这将清除 Auth0 为该用户设置的任何单点登录 cookie。如果您还想将用户从其身份提供程序中注销,请将联合查询字符串参数添加到注销 URL :
此时我也有同样的需求。我也在使用 Auth0。
从他们的文档中,我了解到调用 Auth0 注销端点只会清除 Auth0 上的 SSO cookie,而不会注销所有其他应用程序。我们有责任清除每个应用程序的会话。
此处使用 Auth0 anjularjs 示例进行了相同的解释 https://github.com/auth0/auth0-single-sign-out-sample
希望对您有所帮助。
@udayr 的回答让我走上了正确的道路:
我实际上使用的是 ASP.Net Owin,所以我在 Auth0AccountController我所有的应用程序都是这样的:
[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 对新的注销端点进行 Get 调用,唯一的缺点是所有应用程序都需要知道所有其他应用程序的注销 URL,这需要在全部。
要从多个应用程序注销用户,您可以随时使用 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
如果用户使用外部身份提供者登录,您可以通过在调用 [=29] 时添加 federated
querystring 参数强制用户从 IDP 注销=]/v2/logout
端点
https://auth0.com/docs/logout/guides/logout-idps
对于 SAML IDP,您必须在连接设置中配置 SAML Logout URI。
https://auth0.com/docs/logout/guides/logout-saml-idps
我有 URL “http://mywebsite.com” 这样的。我正在使用 Auth0 登录我的网站 application.Once 用户登录我的应用程序 我将使用相同的登录名(单点登录)将用户登录到我的 wordpress 网站和其他网站。一旦用户从我的应用程序注销,我需要从 wordpress 和其他网站注销 Also(Single Sign OFF/OUT).
可以吗?
请提出更好的选择
没有任何个人经验,但这直接来自 Auth0 上的文档:
“这将清除 Auth0 为该用户设置的任何单点登录 cookie。如果您还想将用户从其身份提供程序中注销,请将联合查询字符串参数添加到注销 URL :
此时我也有同样的需求。我也在使用 Auth0。
从他们的文档中,我了解到调用 Auth0 注销端点只会清除 Auth0 上的 SSO cookie,而不会注销所有其他应用程序。我们有责任清除每个应用程序的会话。
此处使用 Auth0 anjularjs 示例进行了相同的解释 https://github.com/auth0/auth0-single-sign-out-sample
希望对您有所帮助。
@udayr 的回答让我走上了正确的道路:
我实际上使用的是 ASP.Net Owin,所以我在 Auth0AccountController我所有的应用程序都是这样的:
[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 对新的注销端点进行 Get 调用,唯一的缺点是所有应用程序都需要知道所有其他应用程序的注销 URL,这需要在全部。
要从多个应用程序注销用户,您可以随时使用 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
如果用户使用外部身份提供者登录,您可以通过在调用 [=29] 时添加 federated
querystring 参数强制用户从 IDP 注销=]/v2/logout
端点
https://auth0.com/docs/logout/guides/logout-idps
对于 SAML IDP,您必须在连接设置中配置 SAML Logout URI。 https://auth0.com/docs/logout/guides/logout-saml-idps