在 ASP.NET core 2 中获取当前的身份验证方案

Luc*_*caV 9 openid authentication asp.net-core

我目前正在努力使用 Asp.net core 2 应用程序,该应用程序使用两个 openid 提供程序进行身份验证,映射到两个不同的身份验证方案(具有不同的名称)。

我面临的问题是试图注销当前正在使用的特定方案。例如,如果我同时支持 Google 和 Facebook 身份验证,则需要了解当前使用的是哪种方案,并调用SignOut指示正确方案的方法。这允许我清除本地 cookie,并将用户重定向到外部身份提供者并注销。

问题是我无法找到一种GetCurrentScheme()函数,以便我可以使用然后在方法中指定方案SignOut。我确定我错过了一些基本的东西......

zen*_*ndu 4

似乎没有任何直接的方法可以找到当前的方案。这是一个粗略的方法:

private readonly IAuthenticationSchemeProvider authenticationSchemeProvider;
...
foreach(var scheme in authenticationSchemeProvider.GetRequestHandlerSchemesAsync()){
    var authResult = await context.AuthenticateAsync(scheme.Name);
    if(authResult.Succeeded)
        // this is the scheme that was used for authentication
}
Run Code Online (Sandbox Code Playgroud)