gpt4 book ai didi

c# - 想要将混合流身份验证添加到 SPA 的(dotnet)后端

转载 作者:行者123 更新时间:2023-11-30 15:54:02 25 4
gpt4 key购买 nike

我还没有看到任何关于如何向 SPA 应用程序添加身份验证的文档/示例,例如在 ASP.NET Core 2.1 上使用模板进行 react-redux 时(在场景)。

澄清一下,我不是在问如何将隐式流身份验证添加到 React 客户端应用程序,我确实知道该怎么做,但它对我们的客户来说不够安全。我希望后端 (ASP.NET Core) 使用混合流程通过 OIDC 身份提供程序处理身份验证。

我正在将以下内容添加到服务管道中:

services.AddAuthentication(o =>
{
o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, o =>;
{
o.SlidingExpiration = bool.Parse(Configuration["SessionCookieSlidingEnabled"]);
o.ExpireTimeSpan = TimeSpan.FromMinutes(int.Parse(Configuration["SessionCookieLifeTimeInMinutes"]));
o.Cookie = new CookieBuilder { HttpOnly = true };
})
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, o =>
{
o.Authority = Configuration["Authority"];
o.ClientId = Configuration["OpenIdConnectOptions:ClientId"];
o.ClientSecret = Configuration["OpenIdConnectOptions:ClientSecret"];
o.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
o.GetClaimsFromUserInfoEndpoint = Convert.ToBoolean(Configuration["OpenIdConnectOptions:GetClaimsFromUserInfoEndpoint"]);
o.RequireHttpsMetadata = Convert.ToBoolean(Configuration["OpenIdConnectOptions:RequireHttpsMetadata"]);
o.ResponseType = Configuration["OpenIdConnectOptions:ResponseType"];
o.SaveTokens = Convert.ToBoolean(Configuration["OpenIdConnectOptions:SaveTokens"]);
o.UseTokenLifetime = false;
}

然后对应的app.UseAuthentication();到configure方法中。

此外,我(未成功)尝试在 MVC 服务上配置全局过滤器,如下所示:

services.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder(OpenIdConnectDefaults.AuthenticationScheme)
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
})

过去,我只是将 [Authorize] 过滤器附加到主 Controller 以触发流程,但显然自 2.1 以来,框架使用 SPA 中间件从 ClientApp 文件夹加载作为我的应用程序的入口点:

app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});

我的问题是:如何在没有 Controller 过滤器的情况下触发授权过程?

我已经创建了 this inquiry针对 asp.net 核心文档,我知道这不是 IdentityServer4 的问题,但也许你们聪明的人可以阐明这个问题。

提前致谢。

最佳答案

universal solution对于 SPA 和任何其他静态中间件,手动执行挑战如下:

app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated)
{
await context.ChallengeAsync();
}
else
{
await next();
}
});

这个中间件应该在Spa和Mvc之前添加到链上。

关于c# - 想要将混合流身份验证添加到 SPA 的(dotnet)后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51380532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com