인증(Authentication)과 인가(Authorization)

Sang Jun Lee·2020년 7월 14일
0

인증(Authentication)

Authentication은 유저의 identification을 확인하는 절차입니다.
쉽게 설명하면, 유저의 아이디와 비번을 확인하는 절차.
인증을 하기 위해선 먼저 유저의 아이디와 비번을 생성할 수 있는 기능도 필요합니다.

코드를 보면서 설명해보겠습니다.

class MainView(View):
    def post(self, request):
        data = json.loads(request.body)
        if len(data['password']) < 5:
            return JsonResponse({'message': '비밀번호는 5자 이상이어야합니다.'}, status=400)
        try:
            signup = User(

                email = data['email'],
                password = bcrypt.hashpw(data['password'].encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
                )
            if User.objects.filter(email=data['email']).exists():
                return JsonResponse({'message': '이미 가입된 이메일주소 입니다.'}, status=400)
            elif '@' not in data['email']:
                return JsonResponse({'message': '이메일 형식으로 입력해주세요.'}, status=400)
            else:
                signup.save()
                return JsonResponse({'message':'SUCCESS'}, status=200)

        except KeyError:
            return JsonResponse({'message':'KEY_ERROR'}, status=400)

Post를 통해 가입요청을 받으면 가입형식에 맡게 입력되었는지 확인하고 가입을 진행합니다.

class Signin(View):
    def post(self, request):
        data = json.loads(request.body)
        if User.objects.filter(email=data['email']).exists():
            user = User.objects.get(email=data['email'])

            check = bcrypt.checkpw(data['password'].encode('utf-8'), user.password.encode("utf-8"))

            if check == True:
                id_value = User.objects.get(email=data['email'])
                ids = id_value.id
                print(ids)

                token = jwt.encode({'user-id':ids}, 'secret', algorithm='HS256')
                d_token = jwt.decode(token, 'secret', algorithm='HS256')
                return JsonResponse({'access_token': token.decode('utf-8')}, status=200)
            return JsonResponse({'message':'INVALID_USER'}, status=400)

로그인시 기존에 가입되어 있는 아이디 혹은 이메일인지 확인 후 비번까지 같으면 로그인 성공 리스폰스를 보내줍니다. 이 과정이 인증입니다.

인가(Authorization)

Authorization은 유저가 요청하는 request를 실행할 수 있는 권한이 있는 유저인가를 확인하는 절차입니다.
예를 들어, 해당 유저는 고객 정보를 볼 수 있는 있지만 수정 할 수는 없다 등.
Authroization도 JWT를 통해서 구현 될 수 있습니다.

access token을 통해 해당 유저 정보를 얻을 수 있음으로 해당 유저가 가지고 있는 권한(permission)도 확인 할 수 있다.

위에 로그인 시 기존에 회원가입시 비밀번호를 암호화하여 저장할 때 처럼 비밀번호를 암호화하여 비교 로그인을 진행하고 JWT 토큰을 보내 프론트엔드에서 활용 할 수 있도록 합니다.

profile
Live now and Dream better tomorrow

0개의 댓글