【问题标题】:Storing user data with ASP.NET 5.0 without OpenID Connect and Razor pages在没有 OpenID Connect 和 Razor 页面的情况下使用 ASP.NET 5.0 存储用户数据
【发布时间】:2021-02-12 10:13:26
【问题描述】:

在 ASP.NET 5.0 中,我想实现一个简单的cookie authentication 并将用户数据安全地存储在数据库中。

cookie 身份验证工作正常,这样我就可以在前端实现 SPA 中所有与用户相关的功能,因此在 Angular 应用程序之外没有导航。 (这样就不会重定向到外部 Razor 页面来实现例如登录功能。)

但是,我现在遇到了在服务器端安全存储用户数据的问题。 (例如,正确地散列密码。)如果我使用 ASP.NET Identity,它将解决所有开箱即用的存储问题。问题是,所有示例都只显示了 Razor 页面和 OIDC 的实现。

是否有可能只使用 ASP.NET Idenitity 来存储用户数据而不使用 Razor 页面和 OIDC?

我不想使用 ASP.NET 的嵌入式 OIDC 实现,因为我有一个很小的 ​​Angular SPA,并且从/到身份的 Razor 页面的所有重定向都会使用户体验变差。另一方面,如果我要使用身份的 Razor 页面,我需要将它们的样式设置为与我的 Angular 应用程序相同,这对我来说似乎是一个臭代码重复。 (除其他外,我还需要对它们应用材料设计。)

【问题讨论】:

    标签: asp.net asp.net-core asp.net-identity


    【解决方案1】:

    答案是肯定的,有这个可能!

    首先应将身份添加到services,方法如下:

    services.AddIdentity<ApplicationUser, IdentityRole>(options => options.Stores.MaxLengthForKeys = 128)
            .AddEntityFrameworkStores<ApplicationDbContext>();
    

    请注意,没有使用 AddDefaultIdentity,因为 AddDefaultIdentity 也涉及默认的 Razor 页面,就我而言,我不想拥有它们。

    这样UserManager 是可用的,它可以被注入到构造函数中,它可以用于在数据库中创建用户。 (UserManager 负责用户数据的安全存储。)

    但是,这样当出现未经授权或被禁止的 API 调用时,后端会尝试重定向到一些不存在的默认路由。因此还需要添加以下配置:

    services.ConfigureApplicationCookie(options =>
    {
        options.Events.OnRedirectToLogin = (context) =>
        {
           context.Response.StatusCode = 401;
           return Task.CompletedTask;
        };
        options.Events.OnRedirectToAccessDenied = (context) =>
        {
            context.Response.StatusCode = 403;
            return Task.CompletedTask;
        };
    });
    

    使用上述方法services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(..) 需要删除。

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      相关资源
      最近更新 更多