IdentityServer4 和 SPA 应用和新用户注册
IdentityServer4 and SPA Applications and New User Registration
处理 SPA (Angular) 应用程序的新用户注册的正确方法是什么?我正在使用 IdentityServer 4 对我的 API 进行身份验证(代码流)和授权,并且运行良好。但是,我不确定新用户注册应该在哪里进行,特别是我希望新用户在注册后自动登录,换句话说,我不希望他们在注册后必须转到登录屏幕。注册应该在 SPA 应用程序中处理还是在 IdentityServer 中的特殊视图中处理?无论哪种情况,我之后如何获取 JWT 令牌以允许访问我的 API?
提前致谢。
您希望在 Identity Server 项目中处理注册。您可以向 AccountController.cs
class 添加两个新方法,这将类似于 class 中的 Login*
方法,一个用于加载页面,另一个用于处理注册输入.
假设您使用 Microsoft Identity 管理用户帐户,您可以让您的注册端点从注册页面获取信息,在数据库中创建身份,然后调用登录端点调用的相同登录方法。类似于此
// Do model validation, verify the user doesn't already exist, etc...
...
var createUser = await _userManager.CreateAsync(new ApplicationUser
{
Email = model.UserName,
NormalizedEmail = model.UserName,
UserName = model.UserName,
FirstName = model.FirstName,
LastName = model.LastName
}, model.Password);
var user = await _userManager.FindByEmailAsync(model.UserName);
if (createUser.Succeeded)
{
// Add roles to the user
await _userManager.AddToRoleAsync(user, "Customer");
var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, false, lockoutOnFailure: false);
...
// You'll want to redirect back to the client site to complete the login process
处理 SPA (Angular) 应用程序的新用户注册的正确方法是什么?我正在使用 IdentityServer 4 对我的 API 进行身份验证(代码流)和授权,并且运行良好。但是,我不确定新用户注册应该在哪里进行,特别是我希望新用户在注册后自动登录,换句话说,我不希望他们在注册后必须转到登录屏幕。注册应该在 SPA 应用程序中处理还是在 IdentityServer 中的特殊视图中处理?无论哪种情况,我之后如何获取 JWT 令牌以允许访问我的 API?
提前致谢。
您希望在 Identity Server 项目中处理注册。您可以向 AccountController.cs
class 添加两个新方法,这将类似于 class 中的 Login*
方法,一个用于加载页面,另一个用于处理注册输入.
假设您使用 Microsoft Identity 管理用户帐户,您可以让您的注册端点从注册页面获取信息,在数据库中创建身份,然后调用登录端点调用的相同登录方法。类似于此
// Do model validation, verify the user doesn't already exist, etc...
...
var createUser = await _userManager.CreateAsync(new ApplicationUser
{
Email = model.UserName,
NormalizedEmail = model.UserName,
UserName = model.UserName,
FirstName = model.FirstName,
LastName = model.LastName
}, model.Password);
var user = await _userManager.FindByEmailAsync(model.UserName);
if (createUser.Succeeded)
{
// Add roles to the user
await _userManager.AddToRoleAsync(user, "Customer");
var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, false, lockoutOnFailure: false);
...
// You'll want to redirect back to the client site to complete the login process