DFR Auth System
Authentication & Authorization
Authentication - μΈμ¦, μ μ¦
β μμ μ΄λΌκ³ μ£Όμ₯νλ μ¬μ©μκ° λꡬμΈμ§ νμΈνλ νμ
β λͺ¨λ 보μ νλ‘μΈμ€μ 첫 λ²μ§Έ λ¨κ³
β μ¦, λ΄κ° λꡬμΈμ§ νμΈνλ κ³Όμ
β 401 Unauthorized
Authorizaion - κΆν λΆμ¬, νκ°
β μ¬μ©μμκ² νΉμ 리μμ€ λλ κΈ°λ₯μ λν μμΈμ€ κΆνμ λΆμ¬νλ κ³Όμ (μ μ°¨)
β 보μ νκ²½μμ ꡬλν λΆμ¬λ νμ μΈμ¦μ΄ λ¨Όμ νμν¨
- μ¬μ©μλ μ‘°μ§μ λν μμΈμ€ κΆνμ λΆμ¬ λ°κΈ° μ μ λ¨Όμ μμ μ IDκ° μ§μ§μΈμ§ λ¨Όμ νμΈν΄μΌ νλ€.
β μλ₯μ λ±κΈ, μΉ νμ΄μ§μμ κΈμ μ‘°ν/μμ /μμ ν μ μλ λ°©λ², μ νꡬμ(admin) λ±λ±
- μΈμ¦μ΄ λμμ΄λ λͺ¨λ κΆνμ λΆμ¬ λ°λ κ²μ μλλ€
β 403 Forbidden
- 401κ³Ό λ€λ₯Έ μ μ μλ²λ ν΄λΌμ΄μΈνΈκ° λꡬμΈμ§ μκ³ μμ
How to determine authentication
μΈμ¦ μ¬λΆ νμΈ λ°©λ²
β settings.pyμ κΈ°λ³Έμ μΈ μΈμ¦ μ μ°¨λ₯Ό μ΄λ ν λ°©μμΌλ‘ λ κ²μΈμ§ μ€μ (κΈλ‘λ²)
β μ°λ¦¬κ° μ¬μ©ν λ°©λ²μ ToeknAuthentication
β κ°λ³ viewν¨μλ§λ€ decoratorλ₯Ό νμ©ν΄ λ€λ₯Έ μΈμ¦ λ°©μμ μ μ©ν μ μλ€.
λ€μν μΈμ¦ λ°©μ
β BasicAuthentication
- κ°μ₯ κΈ°λ³Έμ μΈ μμ€μ μΈμ¦λ°©μ
- ν μ€νΈμ μ ν©
β SessionAuthentication
- Djangoμ μ¬μ©νμλ session κΈ°λ°μ μΈμ¦ μμ€ν
- DRFμ Djano session μΈμ¦ λ°©μμ 보μμ μΈ‘λ©΄μ ꡬμ±νλ λ°©λ²μ μ°¨μ΄κ° μλ€.
β RemoteUserAuthentication
- Djangoμ Remote user λ°©μμ μ¬μ©ν λ νμ©νλ μΈμ¦ λ°©μ
β ToeknAuthentication
- κ°λ¨ν ꡬν
- κΈ°λ³Έμ μΈ λ³΄μ κΈ°λ₯ μ 곡
- λ€μν μΈλΆ ν¨ν€μ§
β settings.pyμμ DEFAULT_AUTHENTICATION_CLASSES
λ₯Ό μ μν΄μΌ νλ€!!
TokenAuthentication
μΈμ¦ λ°©μμ μ¬μ©ν κ²μμ λͺ μ
ToeknAuthentication μ¬μ© λ°©λ²
- INSTALLED_APPSμ
rest_framework.authtoken
λ±λ‘
INSTALLED_APPS = [
...
# Auth
'rest_framework.authtoken',
]
β λ±λ‘νκ³ migrate ν΄μ£ΌκΈ°
- κ° userλ§λ€ κ³ μ Token μμ±
- μμ±ν Toeknμ κ° Userμκ² λ°κΈ
- Userλ λ°κΈ λ°μ Tokenμ headersμ λ΄μ μμ²κ³Ό ν¨κ» μ μ‘
- λ¨ λ°λμ
Token
λ¬Έμμ΄ ν¨κ» μ½μ - Token λ¬Έμμ΄κ³Ό λ°κΈλ°μ μ€μ token μ¬μ΄λ₯Ό ' '(곡백)μΌλ‘ ꡬλΆ
ν ν° μμ± λ° κ΄λ¦¬ λ¬Έμ μ
- Token μμ± μμ
- μμ±ν Token κ΄λ¦¬ λ°©λ²
- Userμ κ΄λ ¨λ κ°μ’ κΈ°λ₯ κ΄λ¦¬ λ°©λ²
dj-rest-auth
κ°μ
β νμ΄κ°μ
, μΈμ¦(μμ
λ―Έλμ΄ μΈμ¦ ν¬ν¨), λΉλ°λ²νΈ μ¬μ€μ , μ¬μ©μ μΈλΆ κ²μ, νμμ 보 μμ λ±μ μν REST API end point μ 곡
β django-rest-authλ λ μ΄μ μ§μx!!
β dj-rest-auth μ¬μ©!!
μμνκΈ° μ μ
β μμνκΈ° μ , auth.User
λ₯Ό accounts.User
λ‘ λ³κ²½
β auth.User
λ‘ μ€μ λ DB μ κ±°
β my_api/settings.py
μ€μ
dj-rest-auth μ μ©νκΈ°
β λ€μ migration ν΄μ£ΌκΈ°!
β νμ κ°μ κΈ°λ₯μ μλ€!!
Registration
β Registration κΈ°λ₯μ μ¬μ©νκΈ° μν΄ μΆκ° κΈ°λ₯ λ±λ‘ λ° μ€μΉ νμ
β signup νμ΄μ§ νμΈ
Sign up & Login
β νμ κ°μ μμ² ν κ²°κ³Ό νμΈ
- μμ²μ λν μλ΅μΌλ‘ Token λ°κΈ
β λ‘κ·ΈμΈ μμλ λμΌν ν ν° λ°κΈ
Password Change
β /accounts/password/change/
κΈ°λ₯ νμΈ
- λ‘κ·ΈμΈ λμ΄ μκ±°λ, μΈμ¦μ΄ νμν κΈ°λ₯
- DRF μ체 μ 곡 HTML form μμλ ν ν°μ μ λ ₯ν μ μλ 곡κ°μ΄ μλ€.
- PostmanμΌλ‘ POST μμ²
β body/form-dataμ κ° μ λ ₯
- headersμ Token μ λ ₯
β Authorization: Token { your token } νμμ λ§μΆ° μ λ ₯ (λμ΄μ°κΈ° μ£Όμ!)
- μΈμ¦ λ°©λ² μ μ¦
# settings.py
REST_FRAMEWORK = {
# Authentication
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
}
β settings.pyμ token κΈ°λ° μΈμ¦ λ°©μ μ¬μ© μ μΈ
- μ΅μ’ κ²°κ³Ό νμΈ
Permission Setting
drf: permissions 곡μ λ¬Έμ
β κΆν μΈλΆ μ€μ
- λͺ¨λ μμ²μ λν μΈμ¦μ μꡬνλ μ€μ
- λͺ¨λ μμ²μ λν΄ μΈμ¦μ΄ μμ΄λ νμ©νλ μ€μ
β μ€μ μμΉ: μΈμ¦ λ°©λ²μ μ€μ ν κ³³κ³Ό λμΌ
# my_api/settings.py
REST_FRAMEWORK = {
# permission
'DEFAULT_PERMISSION_CLASSES': [
# 'rest_framework.permissions.IsAuthenticated',
'rest_framework.permissions.AllowAny',
],
}
β λͺ¨λ μμ²μ λν΄ νμ© μ€μ
Article List Read
articles/views.py
# articles/views.py
# permission Decorators
from rest_framework.decorators import permission_classes
from rest_framework.permissions import IsAuthenticated
@api_view(['GET', 'POST'])
@permission_classes([IsAuthenticated])
def article_list(request):
if request.method == 'GET':
# articles = Article.objects.all()
articles = get_list_or_404(Article)
serializer = ArticleListSerializer(articles, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = ArticleSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
serializer.save()
# serializer.save(user=request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
β κ²μκΈ μ‘°ν λ° μμ± μμ² μ μΈμ¦λ κ²½μ°λ§ νμ©νλλ‘ κΆν λΆμ¬ -> decorator νμ©
- μ‘°ν μμ² νμΈ
β κ²μκΈ μ‘°ν μ λ‘κ·ΈμΈ νμ
Article Create
- PostmanμΌλ‘ μμ± μμ² νμΈ
β μΈμ¦λ μ¬μ©μμμ λνλ΄λ tokenμ μΆκ° ν΄μ€λ€.
- κ²°κ³Ό νμΈ
'β Personal_Study > Vue' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
drf-spectacular (0) | 2022.11.24 |
---|---|
DRF Auth with Vue (0) | 2022.11.23 |
Vue with DRF (0) | 2022.11.21 |
Cross - Origin Resource Sharing (CORS) (0) | 2022.11.20 |
Vue with DRF: Server & Client (0) | 2022.11.20 |
λκΈ