etc

Login 시나리오

h0ng3 2017. 8. 29. 23:45

@마크다운


Login

    (유저입장)

        사이트에 접속

        ID/PW입력

            왠지는 모르지만 로그인이 유지됨 <- 이걸 로그인했다 라고 생각


로그인이 되어있다 -> 인증이 되어있다

Authentication!


Django(Web application) - Session인증


    1. Login 했을 (Django login함수)

    2. Session User 특정할 있는 Hash값을 저장

        User1 -> hash문자열1

        User2 -> hash문자열2…

    3. 해당 Hash문자열을 Client 전달 (Response)

    4. Django Template에서는 해당 Hash문자열을 Cookie 저장

    5. 이후 Request에는 Cookie 저장된 Hash문자열을 항상 보냄

    6. Django 전달받은 Hash문자열이 hash문자열1 경우, 현재 Request User1 인증되어 있는것으로 취급



DRF(RESTful API Framework) - Token인증


    1. Login(정확히는 authenticate) 했을 (User credential 전달받음. 일반적으로는 username/password)

    2. 해당 User 특정할 있는 Hash값을 DB 저장

    3. Session 저장된 Hash값을 특정할 있는 Token 생성

    4. 생성한 Token Login Request Response 돌려줌

    5. 해당 Token Request Header 담겨 경우, Request 전달받은 Token 해당하는 User 인증된 상태로 취급

        -> [Header] Authorization: Token “토큰문자열

    6. LoginAPIView

            username/password 전달받고

            token 돌려주기

    7. FacebookLoginAPIView

            7-1. accesstoken 받음

            7-2. 해당 token debug해서 유효한지 검사

            7-3. 해당 token 사용해 facebook_user_id 가져옴

            7-4. 가져온 facebook_user_id 해당하는 Django User 있는 확인, 없으면 생성

                (만약 이메일이 반드시 필요할경우)

                -> 유저가 없다는 response 보내주면서, facebook_user_id 포함

                -> 클라이언트에서는 facebook_user_id 포함해서 나머지 정보를 입력할 있는 창을 생성

                -> 나머지(이메일)정보를 입력 서버에 가입 요청

                -> FacebookSignupAPIView등의 다른 APIView에서 해당 요청을 처리

                -> 이후는 아래과정 진행

            7-5. 생성 또는 가져온 유저에 대해 존재하는 Token 가져오거나 생성

            7-6. get_or_create Token 전달


Django rest auth <- DRF에서 과정을 자동화



클라이언트측

    1. 자신이 갖고있는 token 없을 경우

        -> 로그인 창을 띄워줌

    2. 갖고있는 token 있지만, 정상적으로 요청에 실패한 경우

        -> token 유효하지 않거나 만료됨

        -> 로그인 창으로 이동

    3. 갖고있는 token 있고, 요청에 성공

        -> 올바른 token이며, 로그인 상태로 취급