簡體   English   中英

Asp.Net Core 未授權登錄 - C#

[英]Asp.Net Core Unauthorized login - C#

不知道我的標題對不對。 但我有一個簡單的問題。

我無法登錄。 這是因為我無法正確decrypt encrypted data嗎?

基本上,我有一個注冊方法。

這是我的AuthRepository

public class AuthRepository : IAuthRepository
    {
        private readonly DataContext _context;

        public AuthRepository(DataContext context)
        {
            _context = context;
        }

        public async Task<User> Login(string username, string password)
        {
            var user = await _context.Users.FirstOrDefaultAsync(x => x.Username == username);

            if (user == null)
                return null;

            if (!VerifyPasswordHash(password, user.PasswordHash, user.PasswordSalt))
                return null;

            return user;
        }

        private bool VerifyPasswordHash(string password, byte[] passwordHash, byte[] passwordSalt)
        {
            using (var hmac = new System.Security.Cryptography.HMACSHA512())
            {
                var computedHash = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(password));

                for (int i = 0; i < computedHash.Length; i++)
                {
                    if (computedHash[i] != passwordHash[i])
                        return false;
                }
            }
            return true;
        }

        public async Task<User> Register(User user, string password)
        {
            byte[] passwordHash, passwordSalt;
            CreatePasswordHash(password, out passwordHash, out passwordSalt);

            user.PasswordHash = passwordHash;
            user.PasswordSalt = passwordSalt;

            await _context.Users.AddAsync(user);
            await _context.SaveChangesAsync();

            return user;
        }

        private void CreatePasswordHash(string password, out byte[] passwordHash, out byte[] passwordSalt)
        {
            using (var hmac = new System.Security.Cryptography.HMACSHA512())
            {
                passwordSalt = hmac.Key;
                passwordHash = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(password));
            }
        }

        public async Task<bool> UserExists(string username)
        {
            if (await _context.Users.AnyAsync(x => x.Username == username))
                return true;
            return false;
        }
    }

我的register正在工作。 我用Postman測試過

但是為什么我不能登錄?

我在用戶registeredencrypted數據有什么問題decrpyting我已經嘗試解決了幾個小時了。 但我不能讓它工作。 我正在關注視頻教程。 但是我找不到教程中的和我的有什么不同。

[Route("api/[controller]")]
    [ApiController]
    public class AuthController : ControllerBase
    {
        private readonly IAuthRepository _repo;
        private readonly IConfiguration _config;

        public AuthController(IAuthRepository repo, IConfiguration config)
        {
            _repo = repo;
            _config = config;
        }
        [HttpPost("register")]
        public async Task<IActionResult> Register(UserForRegisterDto userForRegisterDto)
        {
            userForRegisterDto.Username = userForRegisterDto.Username.ToLower();

            if (await _repo.UserExists(userForRegisterDto.Username))
                return BadRequest("Username already exist");

            var userToCreate = new User
            {
                Username = userForRegisterDto.Username
            };

            var createdUser = await _repo.Register(userToCreate, userForRegisterDto.Password);

            return StatusCode(201);
        }

        [HttpPost("login")]
        public async Task<IActionResult> Login(UserForLoginDto userForLoginDto)
        {
            var userFromRepo = await _repo.Login(userForLoginDto.Username.ToLower(), userForLoginDto.Password);

            if (userFromRepo == null)
                return Unauthorized();


            return Ok();
        }
    }

我真的被困在這部分。 請幫我。 謝謝你。

我沒有遇到任何錯誤。

但是我在調​​試程序時注意到了這一點

在此處輸入圖片說明

在此處輸入圖片說明

數組結果不一樣。 這是Unauthorized login的原因嗎

如果是這樣的話。 如何正確驗證用戶名和密碼。

我還檢查了我在 web api 中傳遞的用戶名和密碼是否正確(純文本)。

我檢查過的問題是,當您創建和比較 System.Security.Cryptography.HMACSHA512() 的對象時,它總是會生成不同的哈希值。 解決方案是為此類聲明一個全局對象,並且在創建和驗證哈希時必須使用該對象。 我已經檢查過了。 在全局聲明后,它在我的情況下工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM