Как я могу проверить учетную запись с помощью хранимой процедуры, которая использует хэш-шифрование, C #, ASP.NET MVC, Entity Framework - PullRequest
0 голосов
/ 19 октября 2019

Так что в основном у меня есть хранимая процедура, которая может расшифровать пароль и вернуть 1, если пользователь существует. Вот код:

CREATE PROCEDURE [dbo].[ValidateAccount]    
     @Username VARCHAR(50),
     @AccountPwd VARCHAR(100)   
AS 
BEGIN      
    SET NOCOUNT ON;

    DECLARE @Salt CHAR(25);   
    DECLARE @PwdWithSalt VARCHAR(125);  
    DECLARE @PwdHash VARBINARY(20);  

    SELECT @Salt = Salt, @PwdHash = [Pass]   
    FROM dbo.Users 
    WHERE Username = @Username;

    SET @PwdWithSalt = @Salt + @AccountPwd;

    IF (HASHBYTES('SHA1', @PwdWithSalt) = @PwdHash)
        RETURN 1;   
    ELSE
        RETURN 0;
END;

А также есть логин:

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    <div class="form-group">
    <i class="fa fa-user"></i>
    <!-- I'm using htmlAtributes to add CSS class styles and HTML atributes on Editor controls-->
    @Html.EditorFor(model => model.Username , new { htmlAttributes = new { @class = "form-control", @required = "true", @placeholder = "Username" } })
    </div>
    <div class="form-group">
        <i class="fa fa-lock"></i>                   
        @Html.TextBoxFor(model => model.Pass , new { data_bind = "value: Password", @class = "form-control", @required = "true", @placeholder = "Password", @type = "password" })
    </div>
    <div class="form-group">
        <input type="submit" class="btn btn-primary btn-block btn-lg" value="Login">
    </div>
    }

У меня есть модель:

public partial class Users
{
        public string Username { get; set; }
        public byte[] Pass { get; set; }

        public string Name { get; set; }
        public string Salt { get; set; }
        public int ID { get; set; }
}

Как видите, 'Столбец Pass 'в базе данных - Byte[], поэтому у меня возникают проблемы с выполнением процедуры и проверкой, существует ли пользователь или нет, и предпринимаются такие действия, как переход на панель инструментов.

Есть идеи? Я не былсмог найти практическое решение на этом

Вот контроллер Home, где я должен сделать проверку:

[HttpPost]
public ActionResult Index(Warehouse_APP.Models.Users userMod)
{
    return View();
}

1 Ответ

0 голосов
/ 19 октября 2019

На самом деле вы получили хранимую процедуру, которая хэширует введенный пароль для пользователя с той же солью, что и при вводе исходного пароля. Если эти 2 совпадения, то вы получите 1, иначе 0 в качестве возвращаемого значения.

Так что в методе HTTP_POST вашего контроллера MVC вам просто нужно вызвать эту хранимую процедуру с именем пользователя и паролем из привязанногомодели и на основе результата вам нужно перенаправить на соответствующую страницу успеха / ошибки.

Вы, вероятно, будете использовать каркас сущностей, поэтому вот как выполнить этот SQL: https://www.learnentityframeworkcore.com/raw-sql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...