일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- html
- cookie
- Project
- programmers
- jenkins
- google oauth
- DI
- jQuery
- Stream
- Hibernate
- javascript
- WIL
- JWT
- hanghae99
- session
- spring
- real time web
- Java
- web
- Spring Security
- JPA
- oauth
- Anolog
- bean
- 항해99
- flask
- SseEmitter
- 생명주기 콜백
- server send event
- python
Archives
- Today
- Total
끄적끄적 코딩일지
flask 에서 JWT를 사용한 인증하기 본문
JWT란?
Json Web Token의 약자로써 사용자를 구분하는 Json을 만들고 (보통 로그인한 정보로 생성)
암호화를 한다음 token을 발급하여 사용자에게 전달하면 사용자는 그 정보로 서버에 자신을 인증하는 용도로 쓰인다.
시작하기
일단 jwt 모듈을 설치한다.
pip install pyjwt
토큰 발급하기
import jwt
import hashlib
from datetime import dateitime,timedelta
SECRET_KEY = 'this is key' # 토큰을 암호화할 key 세팅
@app.route('/signin',methods=['POST'])
def sign_in():
id = request.form['id']
pw = request.form['pw']
if id=='맞는 id' and pw == '맞는 pw':
# 사용자 정보를 json 형태로 만든다.
# exp를 설정하여 만료 일자를 설정한다.
payload = {
'id': id,
'pw' : pw,
'exp': datetime.utcnow() + timedelta(seconds=60 * 60 * 24)
}
# 토큰을 발급한다.
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
# 토큰 리턴하기
# 최신 버전의 jwt에서는 decode 된 상태로 만들어지지만 옛날 버전의 jwt에서는
# 바이너리 형태로 리턴한다. 만약 오류가 난다면
# token = jwt.encode(payload, SECRET_KEY, algorithm='HS256').decode('utf-8')
# 으로 시도해 볼것
return jsonify({'result': 'success', 'token': token})
토큰 인증하기
SECRET_KEY = 'this is key' # 토큰을 발급할때 사용한 키값
@app.route('/')
def index():
# 발급한 토큰을 쿠키등에 저장해 놓도록 하자
token = request.cookies.get('token') # 토큰을 저장할때 쓴 키값
try:
payload = jwt.decode(token, SECRECT_KEY, algorithms=['HS256'])
print(payload['id']) # 로그인한 id 조회
print(payload['pw']) # 로그인한 pw 조회
return render_template('index.html')
# token이 만료 되었을때
except jwt.ExpriedSignatureError:
return '로그인이 만료되었습니다. 다시 로그인 해주세요'
# token이 없을때
except jwt.exceptions.DecodeError:
return '로그인 정보가 없습니다.'
DB랑 접목하면 사용자 로그인을 일정 시간동안 유지하도록 할 수 있고
로그인한 사용자 정보를 쉽게 조회할 수 있다.
'Python' 카테고리의 다른 글
flask 에서 Cookie , Session Storage를 활용해 보자 (0) | 2022.05.12 |
---|---|
Jinja2를 사용해서 페이지를 만들어보자 (0) | 2022.05.11 |
[python] APScheduler 사용하기 (0) | 2022.05.10 |
BeautifulSoup + Selenium을 이용한 동적 페이지 크롤링 (0) | 2022.05.10 |
Flask 사용하기 (0) | 2022.03.24 |