ASP.NET Core身份-使令牌(电子邮件确认,密码重置等)在不同服务器之间有效吗? - c#

我正在使用ASP.NET Core Identity和IdentityServer4创建身份验证服务。总体上一切正常,但由于在实时环境中将其托管在多个服务器上而使我遇到问题,在这种情况下,在一台服务器上生成的令牌(例如密码重置令牌)无效另外一个。

我正在这样设置身份(自定义用户商店等在其他地方注册的):

 services.AddDataProtection()
     .SetApplicationName("IdentityService");

 services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
 {
     options.Password.RequireNonAlphanumeric = false;
 })
     .AddDefaultTokenProviders();

如您所见,我尝试设置应用程序名称,因此每个服务器上的名称都相同,但是这并没有解决问题。

我发现I can create an IXmlRepository将用于存储Identity使用的密钥:

services.AddDataProtection()
     .SetApplicationName("IdentityService");
     .AddKeyManagementOptions(s => s.XmlRepository = new CustomXmlRepo());

如果实现此功能并将密钥存储在我们的数据库中,是否可以解决我的问题?还有其他(更好)的方法吗?

参考方案

本文介绍了使identityserver4实现生产准备就绪所需执行的操作-要求之一是共享和持久存储数据保护密钥:

IdentityServer4指南:http://docs.identityserver.io/en/latest/topics/deployment.html

配置ASP.NET Core数据保护:https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-3.1

实施自己的方法绝对没问题-只要确保确保将它们存储在任何地方都受到足够的保护。

ASP.NET MVC 5自定义登录,无需脚手架,数据库优先 - c#

我对asp.net和mvc还是很陌生,所以我正在努力学习尽可能多的知识...为此,我从头开始编写博客网站,但是我对身份验证和授权有些困惑。由于我倾向于不真正使用任何脚手架的东西,所以我首先要使用数据库,所以不希望asp.net身份为我创建表。我对散列和加盐密码很酷,并对照数据库检查用户,我遇到的麻烦是将用户设置为登录状态并检查他们应该能够访问什么。我真的很想…

asp.net oledbcommand返回所有行 - c#

我正在使用Oledbconnection连接到Microsoft Access数据库,并且正在使用OleDbCommand检索一些信息。我在数据库中有一个名为retrieveInfo的查询,该查询检索3行数据。字段中有一些重复项,但是应该是这样。我的数据如下所示: Name Email A [email protected] B [email protected] B C@gmai…

ASP.NET MVC在控制器中实施分析 - c#

我有这个控制器public ActionResult Download(Guid? codice) { if (codice == null) { return HttpNotFound(); } string _pathfile = "path-to-file"; byte[] fileBytes = System.IO.File.Re…

asp.net:treeview-显示文本框是否选中? - c#

我需要向用户显示字符串列表。用户可以选择多个字符串。如果选择了一组特定的字符串,则每个字符串旁边都会出现一个文本框。我想做的是向用户显示一个TREEVIEW,每个节点都是字符串之一。他们将通过选中复选框来选择所需的每个字符串。问题:如果用户选择特定的复选框,则我需要一个文本框来显示用户的GET输入。问题:如何从用户使用树形视图获取字符串输入? 参考方案 Tr…

ASP.NET在ContentPlaceHolderID之前添加DIV标签 - c#

我正在尝试使用C# / ASP.NET从Oracle Database中提取日期,如果该日期晚于某天,则隐藏表单的一部分。问题是,通常当我使用div runat=server从ASP.NET内部进行调用时,我只能说CONTROLID.Visible=true即可。出于某种原因,该表格在运行时会在服务器上运行的任何DIV前面加上“ mainContent _”…