繁体   English   中英

如何使用 Auth0 进行完整的注册登录过程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM