在ASP中重新挑战已验证的用户.净的核心



我遇到了ASP中身份验证管道的一些问题。净的核心。我的场景是,我想向已经使用OpenID Connect和Azure AD进行身份验证的用户发出挑战。在许多情况下,您都希望这样做,例如在AAD v2端点场景中请求附加作用域时。

这在ASP中非常有效。asp.net MVC,但在ASP。. NET Core MVC中,用户被重定向到cookie身份验证中间件中配置的拒绝访问页面。(当用户未登录时,发出挑战按预期工作)

在网上搜索了几个小时并尝试了中间件选项的不同参数后,我开始怀疑要么我错过了一些明显的东西,要么这种行为是由设计的,我需要以其他方式解决我的需求。有人对此有什么想法吗?

编辑:我的Startup.cs的相关部分是这样的:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddAuthentication(
            SharedOptions => SharedOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme);
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        // <snip...>
        app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationScheme = CookieAuthenticationDefaults.AuthenticationScheme });
        var options = new OpenIdConnectOptions
        {
            AuthenticationScheme = OpenIdConnectDefaults.AuthenticationScheme,
            ClientId = ClientId,
            Authority = Authority,
            CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"],
            ResponseType = OpenIdConnectResponseType.CodeIdToken,
            PostLogoutRedirectUri = "https://localhost:44374/",
            TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
            {
                ValidateIssuer = false
            }
        };
        options.Scope.Add("email");
        options.Scope.Add("offline_access");
        app.UseOpenIdConnectAuthentication(options);
    }

Action是这样的

    public void RefreshSession()
    {
        HttpContext.Authentication.ChallengeAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties { RedirectUri = "/" });
    }

我在这里找到了提示和解决方案:https://github.com/aspnet/Security/issues/912。ChallengeBehavior。"未授权"是"关键"。

这篇文章给出了当前(2016年11月- asp.net 1.0.1)的解决方案:https://joonasw.net/view/azure-ad-b2c-with-aspnet-core

你需要一个新的ActionResult来调用authauthationmanager。与ChallengeBehavior同步。未经授权的行为。

一旦问题https://github.com/aspnet/Mvc/issues/5187将成功关闭,这应该集成。

我测试了它,它工作得非常好(我的目标只是在每个用户的基础上扩展Google作用域)。

Try to sign out:
public void RefreshSession()
{
      HttpContext.Authentication.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
      HttpContext.Authentication.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme);
      HttpContext.Authentication.ChallengeAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties { RedirectUri = "/" });
}

相关内容

  • 没有找到相关文章

最新更新