Android 학습 요약 (2) - App 클라이언트와 서버의 상호작용에서 token

5979 단어

학습 토큰


토큰이 뭐예요?


Token은 클라이언트가 요청하는 영패로 서버에서 Token을 생성하면 이 Token을 클라이언트에게 되돌려줍니다. 이후 클라이언트는 이 Token을 가지고 와서 데이터를 요청하면 됩니다. 사용자 이름과 비밀번호를 다시 가져올 필요가 없습니다.

Token의 도입--


Token은 클라이언트가 빈번하게 서버에 데이터를 요청하고 서버가 빈번하게 데이터베이스에 가서 사용자 이름과 비밀번호를 조회하고 비교하여 사용자 이름과 비밀번호의 정확성을 판단하고 해당하는 알림을 하는 배경에서 Token은 생겨났다.

Token을 사용하는 목적--


Token의 목적은 서버의 압력을 줄이고 빈번한 검색 데이터베이스를 줄여 서버를 더욱 튼튼하게 하기 위한 것이다.

Token은 어떻게 사용합니까?


두 가지 사용 방법:
장치 번호/장치 맥 주소를 Token(추천) 클라이언트로 사용합니다. 클라이언트는 로그인할 때 장치의 장치 번호/맥 주소를 가져와 서버에 매개 변수로 전달합니다.서버: 서버가 이 파라미터를 수신하면 하나의 변수로 수신하고 이를 Token으로 데이터베이스에 저장하며 이 Token을session에 설정합니다. 클라이언트가 요청할 때마다 통일적으로 차단하고 클라이언트가 전달하는 token과 서버측 session의 token을 비교합니다. 같으면 실행하고 다르면 거부합니다.분석: 현재 클라이언트와 서버 측은 하나의 유일한 표지인 Token을 통일시켰고 모든 장치가 하나의 유일한 세션을 가지도록 보장했다.이 방법의 단점은 클라이언트가 장치 번호/mac 주소를 매개 변수로 전달해야 하고 서버 측은 저장해야 한다는 것이다.장점은 클라이언트가 다시 로그인할 필요가 없고 한 번 로그인한 후에 계속 사용할 수 있다는 것이다. 시간 초과 문제는 서버가 처리하는 것이다. 어떻게 처리합니까?만약에 서버의 Token이 시간을 초과하면 서버는 클라이언트가 전달한 Token을 데이터베이스에 조회하고 변수 Token에 값을 부여해야 한다. 그러면 Token의 시간을 초과하면 다시 시간을 계산한다
세션 값을 Token 클라이언트로 사용합니다. 클라이언트는 사용자 이름과 비밀번호를 가지고 로그인하면 됩니다.클라이언트: 클라이언트가 사용자 이름과 비밀번호를 받은 후에 올바르면 로컬에서 sessionID를 Token으로 가져와 클라이언트에게 되돌려주고 클라이언트는 나중에 요청 데이터만 가져오면 된다고 판단합니다.분석: 이런 방식으로 사용하는 장점은 편리하고 데이터를 저장하지 않아도 된다는 것이다. 그러나session이 만료된 후에 클라이언트가 다시 로그인해야만 데이터에 접근할 수 있다는 단점이 있다

git-osc에서 Session 및 Token 사용:


얼마 전에 로그인을 공부할 때 Token을 처음 접했지만 그때는 어떤 상황인지 잘 몰랐어요. 이제 알았어요.
사용자가 로그인할 때 서버는 세션을 되돌려줍니다. 세션에 Token이 끼워져 있습니다. Token을 받으려면 Token을 저장해야 합니다.다음 사용자가 요청을 보낼 때 사용자 이름과 비밀번호를 더 이상 휴대하지 않아도 서버의 부담을 줄일 수 있고 Token과 해당 요청이 휴대해야 하는 파라미터만 휴대하면 된다.
이로써 나는 몇 가지 문제를 알게 되었다.
원본 공부할 때 Token이 뭔지 몰랐는데 이제 알겠어요..
이전 원본 코드에는 get Token이 많았는데 그때는 몰랐어요. 이제 알겠어요..
데이터를 요청할 때, 매개 변수 중, 항상 token 매개 변수를 연결해야 하는데, 그때는 몰랐고, 지금은 이해했다..
<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">    <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
     *  , token 
     * 
     *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> appContext
     *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> username
     *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> password
     *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span> GitlabUser 
     *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @throws</span> IOException
     */</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> User <span class="hljs-title" style="box-sizing: border-box;">login</span>(AppContext appContext, String userEmail,
            String password) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">throws</span> AppException {
        String urlString = URLs.LOGIN_HTTPS;
        Session session = getHttpRequestor()
                .init(appContext, HTTPRequestor.POST_METHOD, urlString)
                .with(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"email"</span>, userEmail)
                .with(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"password"</span>, password)
                .to(Session.class);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//  token</span>
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (session != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span> && session.get_privateToken() != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>) {
            String token = CyptoUtils.encode(GITOSC_PRIVATE_TOKEN, session.get_privateToken());
            appContext.setProperty(PRIVATE_TOKEN, token);
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> session;
    }</code>

좋은 웹페이지 즐겨찾기