[英]How to use Auth0 for full signup-signin process
我目前在使用 auth0.com 为我的 asp.net web api 项目设置整个身份验证过程时遇到问题(我没有编写任何视图部分,因为我只是用它来学习身份验证/授权)。 他们的快速入门指南和文档从为您的应用程序获取令牌开始,我不明白这个令牌是什么,它是否授予对整个应用程序的访问权限或什么? 我编写了一个默认实现,将用户创建为 object,然后生成令牌并将其分配给用户,然后传递用户的 email 和密码并登录。 我想使用 auth0.com 做同样的事情 是否有使用 auth0.com 的完整分步指南,以及如何创建用户、如何让用户登录等的说明? 我的默认实现:
private readonly UserManager<AppUser> _userManager;
private readonly TokenService _tokenService;
public AccountController(UserManager<AppUser> userManager, TokenService tokenService)
{
_tokenService = tokenService;
_userManager = userManager;
}
[AllowAnonymous]
[HttpPost("login")]
public async Task<ActionResult<UserDTO>> Login(LoginDTO loginDTO)
{
var user = await _userManager.FindByEmailAsync(loginDTO.Email);
if (user is null) return Unauthorized();
var result = await _userManager.CheckPasswordAsync(user, loginDTO.Password);
if (result)
{
return CreateUserObject(user);
}
return Unauthorized();
}
[AllowAnonymous]
[HttpPost("register")]
public async Task<ActionResult<UserDTO>> Register(RegisterDTO registerDTO)
{
if (await _userManager.Users.AnyAsync(x => x.UserName == registerDTO.Username))
{
ModelState.AddModelError("username", "Username taken");
return ValidationProblem();
}
if (await _userManager.Users.AnyAsync(x => x.Email == registerDTO.Email))
{
ModelState.AddModelError("email", "Email taken");
return ValidationProblem();
}
var user = new AppUser
{
DisplayName = registerDTO.DisplayName,
Email = registerDTO.Email,
UserName = registerDTO.Username
};
var result = await _userManager.CreateAsync(user, registerDTO.Password);
if (result.Succeeded)
{
return CreateUserObject(user);
}
return BadRequest(result.Errors);
}
[Authorize]
[HttpGet]
public async Task<ActionResult<UserDTO>> GetCurrentUser()
{
var user = await _userManager.FindByEmailAsync(User.FindFirstValue(ClaimTypes.Email));
return CreateUserObject(user);
}
private UserDTO CreateUserObject(AppUser user)
{
return new UserDTO
{
DisplayName = user.DisplayName,
Image = null,
Token = _tokenService.CreateToken(user),
Username = user.UserName
};
}
通常,您不需要使用 Auth0 设置登录/注册基础结构。 该平台为您提供通用登录页面,用户可以在其中注册或登录您的应用程序。
Auth0 端的身份验证结果是一个或两个令牌,告诉您有关用户的一些信息( ID 令牌)以及可选的用户/应用程序被允许执行的操作(访问令牌)。 要详细了解这些令牌以及它们之间的区别,请阅读这篇文章。
在您的情况下,由于您的应用程序是 API,因此您不必直接处理用户身份验证。 您的 API 不适用于用户,而是用于客户端应用程序。
要管理用户,您可以通过Auth0 Dashboard进行。 如果您想创建自己的仪表板来管理用户,可以通过Auth0 管理 API 来完成。 这是用于 .NET 的库。
您假设客户端将使用访问令牌表示的适当授权调用您的 API 端点。 查看这篇文章,了解 ASP.NET 核心 Web API 的基本授权检查,以及这篇文章,了解基于权限的方法。 这些文章还展示了如何测试受保护的 API。
我希望这些指示可能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.