요즘 웹사이트에서 회원가입은 필수이다.
이때, 입력받아야 하는 정보는 줄어드는 추세이지만
그래도 아이디/패스워드는 필수로 입력받아야 되는 정보이다.
ASP.NET Core Identity에서 PasswordHasher클래스를 제공해준다.
해시(hash)라는 것이 문자열을 더 짧은 길이의 값이나 키로 변화하는 것으로 방대한 내용의 문장도 짧은 몇 개의 문자로 표현이 가능한 것으로 블록체인을 가능하게 만드는 기술을 말한다.
웹사이트에서 사용자에게 아이디/패스워드를 입력받고
ASP.NET Core Identity에서 해시처리한 후, 해시값을 데이터베이스에 저장한다.
회원가입한 사용자가 로그인할때 아이디/패스워드를 입력받고
해당 패스워드를 다시 해시처리한다.
그리고 데이터베이스에 저장되어진 해시값과 비교한다. 같으면 로그인 성공, 다르면 로그인 실패.
PasswordHasher클래스를 사용해서 코드로 구현해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
// PasswordHasher클래스 객체생성
var hash = new PasswordHasher();
// 사용자가 입력받은 패스워드
var input = "123456";
// 사용자가 입력받은 패스워드를 해시
// input을 해시했을때 아래와 같은 값이 나온다.
// ABs1JurjrKvsQC8wWNZndBbvq+5zmbCvOwDRyQEmrAMnfCQn9VSSR4zIEc/uRtCrcg==
var db = hash.HashPassword(input);
// 함수명을 보면 알 수 있듯이
// 해시된 패스워드를 검증하는 함수이다.
// 두 매개변수를 받는다.
// string hashedPassword : 이미 DB에 저장되어 있는 해시 값
// string providedPassword : 해시하지 않은 패스워드 값
var rst = hash.VerifyHashedPassword(db, input);
if (rst.Equals(PasswordVerificationResult.Success)) {
// 성공
} else {
// 실패
}
|
cs |
사용자에게 입력받은 패스워드를 HashPassword 함수를 사용하여 해시하고
로그인시 입력받은 패스워드와 데이터베이스에 이미 저장되어 있는 해시값을 VerifyHashedPassword 함수를 사용하여 비교하면 된다.
그리고 위에 그림에서 보듯이
PasswordHasher클래스의 HashPassword/PasswordVerificationResult함수가 가상메서드로 되어있기 때문에
PasswordHasher클래스를 상속받어 HashPassword/PasswordVerificationResult함수를 재정의해서 자신만의 암호화방식을 선택해도 좋은 방법인것 같다.
'개발 > ASP.NET' 카테고리의 다른 글
[ASP.NET MVC] View() / RedirectToAction() 무엇이 다른가 살펴보자. (0) | 2020.02.06 |
---|---|
[ASP.NET MVC] DropDownList DataBind에 대해 알아보자. (0) | 2020.02.06 |
HTTP 응답 상태 코드 301 / 302 에 대해 알아보자. (1) | 2020.01.15 |
[ASP.NET] 업로드 파일 용량을 web.config에서 제어하자. (0) | 2019.12.04 |
[ASP.NET] 라우팅(Routing) 이란? (0) | 2019.12.04 |