处理网站和 cms 身份验证的用户身份

Posted

技术标签:

【中文标题】处理网站和 cms 身份验证的用户身份【英文标题】:Handling user-identity for both website and cms authentication 【发布时间】:2020-08-12 15:39:52 【问题描述】:

在支持网站(客户)用户的用户帐户注册和登录以及在同一项目中为站点和 cms 使用单独的用户身份服务支持 cms 用户帐户/管理员登录的最佳做法是什么?

为了评估这种情况的工作方式,我已经构建了一个测试 mvc .net core 3.1 网站项目,该项目利用 Piranha CMS 反过来使用用户身份服务来管理访问 cms 管理面板的身份验证,结合这个使用 mvc 网站还支持个人帐户的用户身份,以便网站客户/用户注册/登录。

以下是启动类 ConfigureServices 方法的示例,用于说明使用用户身份服务设置 cms 和网站,这目前在启动时出错并显示一条消息 - System.InvalidOperationException: 'Scheme already exists: Identity.Application '

    // CMS Setup
        services.AddPiranha(options =>
        
            options.UseFileStorage();
            options.UseImageSharp();
            options.UseManager();
            options.UseTinyMCE();
            options.UseMemoryCache();
            options.UseEF<SQLServerDb>(db => db.UseSqlServer(Configuration.GetConnectionString("db-cms-users")));
            options.UseIdentityWithSeed<IdentitySQLServerDb>(db => db.UseSqlServer(Configuration.GetConnectionString("db-cms-users")));
        );

    // Site Setup
        services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("db-site-users")));
        services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true).AddEntityFrameworkStores<ApplicationDbContext>(); 

上述代码的问题是cms和站点都使用用户身份,并且由于两者都使用“默认”身份而发生冲突,有没有办法解决这个问题并且仍然支持两者用户/帐户的 cms 和网站。

所以我的问题是这两者在同一个项目中看起来不太好,我想知道在这种情况下,支持使用用户支持的 cms 和站点的 web 项目的最佳做法是什么身份和/或在这种情况下这是否可能?

【问题讨论】:

【参考方案1】:

用户管理在 Piranha 中完全抽象,因此您实际上可以以任何您想要的方式验证 CMS 用户。模板中包含的 Identity 包作为样板包含在内,因为大多数用户是基于 ASP.NET Identity 的单一安全设置。登录时经理唯一关心的是:

    它找到了实现Piranha.ISecurity (https://github.com/PiranhaCMS/piranha.core/blob/master/core/Piranha/ISecurity.cs) 的注册服务 用户在登录后获得所需的充分声明 (https://piranhacms.org/docs/architecture/authentication)

配置身份

模板中提供的代码只是设置标准身份设置,但您可以覆盖所有内容以执行您喜欢的操作。 UseIdentityWithSeed&lt;T&gt; 方法实际上可以采用另外两个参数来配置 IdentityOptionsCookieOptions 以任何方式工作。看看这个页面以供参考:

https://piranhacms.org/docs/architecture/authentication/identity

Piranha 中的用户帐户

如果您只想在某处添加最终用户帐户,则可以在 Piranha CMS 中通过在管理员中设置新角色并添加所需的应用程序策略来完成。你可以在这里阅读:

https://piranhacms.org/docs/tutorials/securing-pages

关于多种身份验证方案的更多指南

我实际上从未使用此设置部署过网站,一如既往,我知道有人有 :) GitHub 上的这个问题仅讨论了这一点,并且设置成功。由于我无法就这种情况提供具体指导,因此在此线程中与用户联系也许可以满足您的需求!

https://github.com/PiranhaCMS/piranha.core/issues/627

虽然不是答案,但我希望这将为您提供找到答案所需的信息。

最好的问候

【讨论】:

感谢 Håkan Edling 的及时回复。非常有用的信息,确实可以让我调查如何继续并了解有关用户管理的站点架构最佳实践的更多信息。向 PiranhaCMS 团队竖起大拇指,继续努力。

以上是关于处理网站和 cms 身份验证的用户身份的主要内容,如果未能解决你的问题,请参考以下文章

使用 HttpWebRequest 进行网络身份验证和网站身份验证

配置web服务基本用户身份验证,保证web站点的安全

asp.net cookie、身份验证和会话超时

在 .NET 5 Web API 中动态连接到多个数据库(取决于经过身份验证的用户)

ASP .NET CORE 2.2 JWT 和声明网站的身份验证

Angular:处理重新加载页面和用户身份验证