使用ReactJS SPA在.net Core中进行身份验证

时间:2019-05-29 13:33:42

标签: c# asp.net reactjs asp.net-core

我尝试向.net Core 2.1应用程序添加身份验证。 从头开始:我们可以使用VS模板使用react创建新的Web应用程序。

在这种诱惑下,我们可以看到:

app.UseSpa(spa =>
{
    spa.Options.SourcePath = "ClientApp";
    spa.ApplicationBuilder.UseAuthentication();


    if (env.IsDevelopment())
    {
        spa.UseReactDevelopmentServer(npmScript: "start");
    }
});

我还添加了具有登录/注册端点的Auth控制器和视图。

如何添加将拒绝访问SPA的逻辑,直到我们登录到应用程序?

我知道如何使用asp.net身份常规,但通过此SPA我需要建议。

2 个答案:

答案 0 :(得分:0)

要使用SPA进行身份验证,您可以使用某些服务器端技术(例如JWT)来对用户进行身份验证。因此,如果用户登录成功,则可以为他们提供令牌,并且当用户请求您的API时,您可以在请求的标头中提交令牌,以便服务器知道您是谁,并允许您访问API资源。

您可以查看openiddict。他们有Angular应用的完整示例

答案 1 :(得分:0)

在中间件中,您可以检查用户是否已通过身份验证,例如:

app.UseSpa(spa =>
{
    spa.ApplicationBuilder.MapWhen(
        (context)=>!context.User.Identity.IsAuthenticated, 
        ab => {
            ab.Run(async (ctx )=> {
                ctx.Response.StatusCode = 401;
                //redirect to login page
                ctx.Response.Headers.Add("Location", "....");
                //await ctx.Response.WriteAsync("Authecation Failed");
            });
        }
    );

    spa.Options.SourcePath = "ClientApp";

    if (env.IsDevelopment())
    {
        spa.UseReactDevelopmentServer(npmScript: "start");
    }
});