C# 如何通过在客户端应用程序中输入用户密码来创建identityuser

C# 如何通过在客户端应用程序中输入用户密码来创建identityuser,c#,asp.net-mvc,identityserver4,C#,Asp.net Mvc,Identityserver4,使用identityserver 4时,我的web应用程序是否可以通过在客户端应用程序中键入密码来创建identityuser 在我的web应用程序中,用户将填写自己的一些详细信息,如姓名、电子邮件和地址(用于购物车),在销售完成后,我想让用户根据刚才提供的信息创建一个身份 例如,一个文本框说 Thank you for your order, if you want to keep a history of your transactions, please type in the pas

使用identityserver 4时,我的web应用程序是否可以通过在客户端应用程序中键入密码来创建identityuser

在我的web应用程序中,用户将填写自己的一些详细信息,如姓名、电子邮件和地址(用于购物车),在销售完成后,我想让用户根据刚才提供的信息创建一个身份

例如,一个文本框说

Thank you for your order, 
if you want to keep a history of your transactions, 
please type in the password you want to use here: 
然后,在用户按下按钮后,将在后台生成一个identityuser,并将用户重定向到他的新配置文件

到目前为止,我所能看到的是,我必须将用户发送到identityserver进行用户注册,希望这里有更好的消息:)


提前感谢。

创建一个端点,该端点接受您描述的用户数据并从中生成用户

例如,在链接断开的情况下

ApplicationDbContext context=new ApplicationDbContext();
var角色管理器=新角色管理器(新角色存储(上下文));
var UserManager=newusermanager(newuserstore(context));
UserManager.UserValidator=新的UserValidator(UserManager)
{
AllowOnlyAlphanumericUserNames=false,
RequireUniqueEmail=true
};
var user=new ApplicationUser();
user.Email=model.Email;
user.UserName=model.UserName;
var result=UserManager.Create(用户、模型、密码);
我建议您发送一封注册邮件,用户必须确认才能使用创建的帐户。应删除在给定时间后尚未确认的生成用户

另外,考虑在发送到端点时加密密码

使用identityserver 4时,我的web应用是否可以创建 只需让用户在 客户端应用程序

答案是否定的

这不是因为技术问题,而是因为安全问题

最小特权原则禁止客户端请求用户凭据。这就是用户需要登录IdentityServer网站的原因。客户端无法访问用户的凭据。身份验证外包给IdentityServer

当您选择IdentityServer4时,您选择的是OpenIdConnect,而不是会员制。Oidc指所有客户的一个账户。这就是另一个问题所在:客户端不拥有用户。客户端和用户之间没有关系

因此,任何用户都可以在经过身份验证后使用任何客户端。用户授权必须限制用户的访问权限

而且,用户可能已经拥有一个用于其他应用程序的帐户。因此,用户可能希望使用该帐户登录,而不是创建另一个帐户

在客户端中支持用户登录的唯一流是资源所有者密码流。尽管它仍然可以实现,但出于安全原因,它不再是可用的授权类型


如果您不是在寻找oidc和SSO,那么您可能希望将Identity实现为会员制,该应用程序有自己的用户商店。在这种情况下,我不会使用IdentityServer

否则,您可以将用户发送到IdentityServer网站,并允许用户登录或创建帐户。您可以通过查看客户端id来定制视图,以获得良好的用户体验

请注意,用户只需要一个帐户即可登录。您应该将用户信息保存在数据库中,因为它属于数据库。它是业务上下文的一部分,与帐户无关

该帐户是附加功能,只需要从业务用户到身份用户的链接

ApplicationDbContext context = new ApplicationDbContext();
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager)
{
    AllowOnlyAlphanumericUserNames = false,
    RequireUniqueEmail = true
};

var user = new ApplicationUser();
user.Email = model.Email;
user.UserName = model.Username;
var result = UserManager.Create(user, model.Password);