如何在cookie中存储身份验证方法,以便在asp.net core mvc中适配注销

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

我们正在使用 ASP.NET MVC 核心来编写 Web 应用程序。此应用程序需要多种形式的身份验证。目前它们是用户名/密码和 Microsoft Entra。但未来可能会添加更多内容。

当用户退出应用程序时,我们想知道用于登录的身份验证方法。例如,如果使用 Entra,我们希望将用户发送到“https://login.microsoftonline.com/” common/oauth2/v2.0/logout”,以便他们正确地从 Id Provider 中注销。

我认为一个好主意是在登录时在 cookie 中存储额外的声明。我尝试为此添加以下代码:

 services.AddAuthentication()
            .AddMicrosoftIdentityWebApp(options =>
            {
                options.Instance = "https://login.microsoftonline.com";
                options.TenantId = "common";
                options.ClientId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
                options.ClientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
                options.Scope.Add("email");

                options.Events.OnTokenValidated = async context =>
                {
                    var claim = new Claim(ClaimTypes.AuthenticationMethod, "Microsoft");
                    var claimsIdentity = context.Principal.Identity as ClaimsIdentity;
                    claimsIdentity.AddClaim(claim);
                    await Task.CompletedTask;
                };

            }, openIdConnectScheme: "Microsoft", cookieScheme: null);

使用此代码在回调方法中完成登录,当用户从提供商返回时调用该方法(在本例中为 Entra):

    var info = await _signInManager.GetExternalLoginInfoAsync();
    if (info == null)
    {
        return RedirectToAction(nameof(Login));

    }

    // Sign in the user with this external login provider if the user already has a login.
    var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor: true);
    if (result.Succeeded)
    {

在注销期间,我尝试使用以下代码获取身份验证方法声明:

    var scheme = User.FindFirstValue(ClaimTypes.AuthenticationMethod);

    // Make some decisions based on scheme....

不幸的是,该方案无效。

我在这里做错了什么吗?也许我以错误的方式处理这整件事。

如有任何指点,将不胜感激。

c# asp.net-mvc authentication asp.net-identity claims-based-identity
1个回答
0
投票

有很多事情需要检查:

© www.soinside.com 2019 - 2024. All rights reserved.