Django Rest API(3)

‍박소연·2022년 8월 26일
0

Django

목록 보기
1/10

Django Rest API Token AUTH 토큰인증

보안을 위해 token 정보가 있을때는 데이터를 넘겨주고, 없을때는 권한이 없게 만들자

test.py

url = 'http://127.0.0.1:8000/api/student_list'
response = requests.get(url)
print(response.text)

정보들이 콘솔창에 그대로 나오는 것을 확인할 수 있다.

Django에 JWT 사용하기

django는 쿠키를 사용해서 유저를 식별하는 데 site-a에서 발행한 쿠키는 site-b에서 사용할 수 없다. 따라서, 다른 도메인에서 API를 호출해야 하는 상황에서는 JWT 토큰을 사용해야 한다.

JWT란?

JSON 형태로 인증 토큰을 만들어 통신할 때 쓰는 인증방식이다.

DEFAULT_PERMISSION_CLASSES

접근 권한을 설정할 수 있다.

  1. IsAuthenticated : 인증된 사용자만 접근 가능
  2. IsAdminUser : 관리자만 접근 가능
  3. AllowAny : 누구나 접근 가능

DEFAULT_AUTHENTICATION_CLASSES

로그인과 관련된 클래스를 JWT를 사용하도록 설정할 수 있다.

  1. JWT_ALGORITHM : 암호화에 사용되는 알고리즘 설정
  2. JWT_ALLOW_REFRESH : JWT 토큰을 refresh 할 건지
  3. JWT_EXPIRATION_DELTA : JWT 토큰의 유효기간 설정
  4. JWT_REFRESH_EXPIRATION_DELTA : JWT 토큰의 갱신 유효기간
  5. REST_USE_JWT : 로그인 전에 JWT를 사용하고 싶을 때
  6. ACCOUNT_EMAIL_REQUIRED / ACCOUNT_EMAIL_VERIFICATION : 로그인을 할 때 username, password, email이 필요한데 여기서 email을 사용하고 싶지 않을 때 위처럼 설정
  7. ACCOUNT_LOGOUT_ON_GET : 로그아웃 설정

settings.py

INSTALLED_APPS=['rest_framework.authtoken',]

REST_FRAMEWORK = {
        'DEFALUT_AUTENTICATION_CLASSES':[
            'rest_framework.authentication.TokenAuthentication'
        ],
        'DEFAULT_PERMISSION_CLASSES':[
            'rest_framework.permissions.IsAuthenticated'
        ],
}

Django rest API Token 토큰 만들기

urls.py

path('api/auth', views.obtain_auth_token, name='obtain_auth_token'),

auth 페이지에서 token 요청을 해보자 -> username과 password로 접근

test.py

url = 'http://127.0.0.1:8000/api/auth'

response = requests.get(url, data = {'username' : 'admin', 'password' : '123123'})

myToken = response.json()

#Token 뒤에 스페이스바 필수

header = {'Authorization' : 'Token ' + myToken['token']}

response = requests.get('http://127.0.0.1:8000/api/student_list', headers = header)

response.json()과 responese.text()의 차이

response.json()

응답을 읽고 json 형태로 파싱, 자바 스크립트 객체로 변환해준다.

response.text()

응답을 읽고 텍스트를 반환한다.

본문을 읽을 때 사용되는 메서드는 둘 중 하나만 사용할 수 있다.

response.text()를 사용해 응답을 얻었다면 본문의 콘텐츠는 모두 처리 된 상태이기 때문에 response.json()은 동작하지 않습니다.

0개의 댓글