如何指定多个默认退出方案?

问题描述 投票:0回答:1

我正在使用WsFed将ADFS SSO实施到应用中。为了正确注销,我必须为CookieAuthenticationDefaults.AuthenticationScheme方法指定WsFederationDefaults.AuthenticationSchemeSignOut方案。如果仅使用cookie方案,则不会退出。如果仅使用WsFed方案,则我已经注销,但是如果单击浏览器的后退按钮,则能够自动重新认证。

目前,我正在为SignOut方法指定它们两者。但是,我不想在多个地方使用这些方案(Startup.cs和控制器操作)。

我知道,如果我不提供方案,则它默认为一个方案,就像我的Login动作一样。但是是否可以将其默认设置为两个方案,或者仅在操作中仅对其中之一进行硬编码?

注销操作:

[AllowAnonymous]
[HttpGet]
public IActionResult Logout()
{
    return SignOut(
        new AuthenticationProperties
        {
            RedirectUri = Url.Action("LoggedOutSuccessfully", "NameController"),
        },
        WsFederationDefaults.AuthenticationScheme,
        CookieAuthenticationDefaults.AuthenticationScheme);
}

Startup.cs默认方案设置:

services.AddAuthentication(sharedOptions =>
{
    sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;

    //need two schemes here (or somewhere) instead of one
    sharedOptions.DefaultSignOutScheme = WsFederationDefaults.AuthenticationScheme;
})
.AddWsFederation(options =>
{
    //... WsFed options
})
.AddCookie(options =>
{
    //... cookie options
});
asp.net-mvc asp.net-core adfs asp.net-authentication
1个回答
0
投票

简短的回答是不,默认情况下您不能真正组合多个方案。

其原因主要是可以采用哪种方案:cookie方案实际上是您可以注销的最简单的方案之一,因为它只需要清除用户的cookie,因此不需要它自己的HTTP响应。相反,它可以与另一个响应(例如,从远程身份验证提供程序注销的远程方案的响应)组合。

WS-Federation是一种远程身份验证方案,它基本上意味着它依赖于远程身份验证提供程序来实际执行用户身份验证。在大多数情况下,使用远程身份验证提供程序进行登录意味着该提供程序还将自己创建一个用户会话,以便后续的身份验证请求可以依靠现有的用户会话来对用户进行身份验证,而无需询问其凭据。这也是跨多个应用程序进行单点登录的基础:您使用中央身份验证提供程序登录一次,所有应用程序都可以透明地对用户进行身份验证,而无需要求他们重新进行身份验证。

不幸的是,对于注销过程,这意味着要注销用户[[远程,必须将该用户发送到该身份验证提供者以在此处注销(这是因为您无法清除身份验证提供者的cookie您自己)。通常通过重定向到身份验证提供程序的注销页面来完成。并且由于重定向是单个HTTP响应,因此您可以将其与Cookie退出结合使用,但不能与其他远程身份验证退出结合使用。

根据协议和提供商的功能,协议可以允许您指定成功注销后重定向用户的返回URL。此机制可用于通过多个身份验证处理程序

chain

注销,每个身份验证处理程序都需要自己的HTTP响应。但是您必须自己处理。最后,是否要远程注销用户,这实际上也是您的选择。根据您的设置,您可能只想在本地注销用户(通过cookie方案),但要使他们使用其远程身份验证处理程序登录。因此,通过选择退出时的方案,您也可以对其进行控制。
© www.soinside.com 2019 - 2024. All rights reserved.