【问题标题】:Get current authentication scheme in ASP.NET core 2在 ASP.NET core 2 中获取当前身份验证方案
【发布时间】:2019-02-22 18:01:41
【问题描述】:

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

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

问题是我无法找到 GetCurrentScheme() 之类的函数,因此我可以在 SignOut 方法中使用它来指定方案。我确定我错过了一些基本的东西......

【问题讨论】:

    标签: authentication asp.net-core openid


    【解决方案1】:

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

    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
    }
    

    【讨论】:

      【解决方案2】:

      我有同样的问题,但我最终将身份验证方案放入我的SignIn 方法中的声明集合中:

      claims.Add(new Claim(ClaimTypes.AuthenticationMethod, authenticationScheme));
      

      所以,在SignOut 方法中,我可以检索身份验证方案:

      var authenticationScheme = HttpContext.User.FindFirstValue(ClaimTypes.AuthenticationMethod);
      

      【讨论】:

        【解决方案3】:

        IAuthenticationHandler 也有 Task InitializeAsync(AuthenticationScheme scheme, HttpContext context)。它在AuthenticateAsync 方案名称在第一个参数中之前被调用。

        【讨论】:

        • 可能是这样。但是开发人员如何利用这一点来检索已经建立的当前方案?
        猜你喜欢
        • 2018-02-23
        • 2023-01-08
        • 2018-05-13
        • 2019-08-31
        • 2017-10-03
        • 1970-01-01
        • 1970-01-01
        • 2020-10-01
        • 2022-01-04
        相关资源
        最近更新 更多