Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 在ASP.NET Core OpenID Connect中单次注销_Asp.net Core_.net Core_Oauth 2.0_Openid Connect_Auth0 - Fatal编程技术网

Asp.net core 在ASP.NET Core OpenID Connect中单次注销

Asp.net core 在ASP.NET Core OpenID Connect中单次注销,asp.net-core,.net-core,oauth-2.0,openid-connect,auth0,Asp.net Core,.net Core,Oauth 2.0,Openid Connect,Auth0,我有许多应用程序通过Auth0的单点登录(SSO)对用户进行身份验证。其中之一是ASP.NET核心MVC应用程序,它使用(OIDC)中间件。单一登录工作正常。对于从当前应用程序单次注销,我将根据从OnRedirectToIdentityProviderForSignOut事件调用Auth0的/v2/logout端点。但是,我不知道如何配置应用程序,以便在存在从另一个应用程序注销的SSO会话时清除本地会话: 将用户重定向到注销端点不包括用户需要从其使用的所有应用程序中注销的场景。如果您需要提供此功

我有许多应用程序通过Auth0的单点登录(SSO)对用户进行身份验证。其中之一是ASP.NET核心MVC应用程序,它使用(OIDC)中间件。单一登录工作正常。对于从当前应用程序单次注销,我将根据从
OnRedirectToIdentityProviderForSignOut
事件调用Auth0的
/v2/logout
端点。但是,我不知道如何配置应用程序,以便在存在从另一个应用程序注销的SSO会话时清除本地会话:

将用户重定向到注销端点不包括用户需要从其使用的所有应用程序中注销的场景。如果您需要提供此功能,则必须通过以下两种方式之一处理此问题:

  • 在本地会话上有短时间超时,并以短时间间隔重定向到Auth0以重新验证。这可以通过从客户端调用
    checkSession
    来完成,该客户端在隐藏的iFrame中进行重定向。如果采用隐藏的iFrame方法,则需要注意和第三方问题

  • 通过为您的应用程序提供一种在注销时通知所有其他应用程序的方法,完全在应用程序级别处理此问题


我得到的印象是,
checkSession
建议是针对SPA的。ASP.NET核心OpenID Connect中间件如何处理此类SSO会话注销?它是否定期自动与身份验证服务器重新身份验证?如果是这样,如何配置此频率?

AddOpenIDConnect中间件模块有一个专用URL,它可以侦听该URL,外部提供商可以在注销用户后调用该URL

URL在源中定义,如下所示:

SignedOutCallbackPath = new PathString("/signout-callback-oidc");
RemoteSignOutPath = new PathString("/signout-oidc");


/// <summary>
/// The request path within the application's base path where the user agent will be returned after sign out from the identity provider.
/// See post_logout_redirect_uri from http://openid.net/specs/openid-connect-session-1_0.html#RedirectionAfterLogout.
/// </summary>
public PathString SignedOutCallbackPath { get; set; }

/// <summary>
/// Requests received on this path will cause the handler to invoke SignOut using the SignOutScheme.
/// </summary>
public PathString RemoteSignOutPath { get; set; }
SignedOutCallbackPath=新路径字符串(“/signout callback oidc”);
RemoteSignOutPath=新路径字符串(“/signout oidc”);
/// 
///应用程序基本路径中的请求路径,用户代理从身份提供程序注销后将返回该路径。
///请参阅从中发布\u注销\u重定向\u urihttp://openid.net/specs/openid-connect-session-1_0.html#RedirectionAfterLogout.
/// 
公共路径字符串SignedOutCallbackPath{get;set;}
/// 
///在此路径上接收的请求将导致处理程序使用SignOutScheme调用SignOut。
/// 
公共路径字符串RemoteSignOutPath{get;set;}

因此,您可以尝试将Auth0配置为调用RemoteSignOutPath,这样可能对您有用。然而,如果你有很多客户,那么你需要有一个不同的策略。也许使用更短的访问令牌生存期?

我接受了Tore的答案,因为当OpenID身份提供程序支持前端通道注销时,这是最好的方法。在我的例子中,Auth0 OpenID连接前或后通道注销:

除了Auth0使用SAML时,Auth0本机不支持单次注销。可以通过让每个应用程序在其令牌过期后检查活动会话来实现单次注销,也可以通过在应用程序级别终止应用程序会话来强制注销

我在ASP.NET Core MVC 3.1中通过减少
AddCookie
配置中的
ExpireTimeSpan
实现了这一点:

公共类启动
{
public void配置服务(IServiceCollection服务)
{
services.AddAuthentication(/*…*/)
.AddCookie(选项=>
{
options.ExpireTimeSpan=TimeSpan.FromMinutes(1);
});
// ...
}
}
因此,任何用
[Authorize]
修饰的控制器方法每分钟都会自动通过Auth0重新验证。如果Auth0会话仍然处于活动状态,用户将立即被重定向到目标页面。如果没有,它们将显示Auth0登录页面