본문으로 바로가기
728x90
반응형

목차

     

    개요 

    과거 Google Oauth 로그인을 Python으로 테스트하기에 앞서 다음과 같은 라이브러리가 필요했었다.

    google-api-core==2.14.0
    google-api-python-client==2.108.0
    google-auth==2.23.4
    google-auth-httplib2==0.1.1
    google-auth-oauthlib==1.1.0
    

    이번엔 KaKao Oauth Login(이하 KaKao Login)을 Python으로 테스트해 봤는데. 테스트하는 과정에서 KaKao Login을 위한 Python 라이브러리를 따로 찾을 수 없었다.

     

    머리를 굴려보다 Python에서 KaKao Login을 테스트해보기 위한 방법으로 requests_oauthlib을 이용해 KaKao Login을 테스트에 성공할 수 있었고 이 글은 그 과정을 기록한 글이다.

     

    1. Python Library

    “개요”에서 언급했듯이 KaKao Login을 Python으로 테스트해보기 위해 필자가 사용한 라이브러리는 request_oauthlib이다.

    pip install requests-oauthlib
    

    Oauth Login은 중간에 Redirection 과정이 있기 때문에 callback server를 필요로 하고 이 때문에 Flask와 같은 경량 프레임워크를 통해 구현한다. 그러나 Flask를 굳이 사용하지 않아도 callback server를 사용할 수 있는데 python에 bulit-in으로 제공되는 HttpServer가 그것이다.

     

    python3에서는 다음과 같은 명령으로 간단한 http server를 띄울 수 있고 이를 callback server로 활용할 것이다.

    python3 -m http.server 8080
    

     

     

    2. KaKao Oauth Login을 위한 준비 

    Oauth 로그인 과정에서 필요한 값들은 “client_id”, “client_secret”, “redirect_url”이다. KaKao developers에서 “app”을 생성했다면 각각의 값을 확인해 보자.

     

    2.1 client_id 확인하기

    “client_id”의 경우 “내 애플리케이션 > 앱 설정 > 요약 정보”에서 확인할 수 있다.

     

    2.2 client secret 확인하기

    client_secret”은 “내 애플리케이션 > 제품 설정 > 카카오 로그인 > 보안” 에서 확인할 수 있다.

     

     

    2.3 Redirect URL 확인하기

    Redirect URL은 “내 애플리케이션 > 제품 설정 > 카카오 로그인” 화면에서 확인할 수 있다.

     

     

    3. KaKao Oauth API URI

    KaKao Oauth Login을 테스트하기 위해 두 개의 API 주소는 알고 있어야 한다. 하나는 Authorizaion Code를 얻기 위한 API 주소와 다른 하나는 Authorization Code를 통해 Access Token을 얻기 위한 API 주소이다.

    3.1 Authorization Code API

    https://kauth.kakao.com/oauth/authorize

    3.2 Acces Token API

    https://kauth.kakao.com/oauth/token

     

    4. KaKao OAuth Login

    4.1 Variable 설정

    KaKao Oauth Login을 위해 앞서 기술한 정보를 변수로 나타내면 다음과 같다.

    authorize_url = "https://kauth.kakao.com/oauth/authorize"
    token_url     = "https://kauth.kakao.com/oauth/token"
    client_id     = ""
    client_secret = ""
    redirect_url  = ""

    4.2. Authorization Code 얻기

    이제 request_oauthlib을 이용해 KaKao Oauth Login을 진행해 보자. 먼저 Authorization Code를 얻도록 하자.

    from requests_oauthlib import OAuth2Session
    
    oauth_session = OAuth2Session(client_id=client_id, redirect_uri=redirect_url)
    url, state = oauth_session.authorization_url(authorize_url)
    print(url, state)
    

    위 코드를 실행하면 다음과 같은 결과를 얻을 수 있다.

    https://kauth.kakao.com/oauth/authorize?response_type=code&client_id=&redirect_uri=http%3A%2F%2Flocalhost%3A8080&state=no50aIOjyIJTDzb8lc06HjGhdxcMmO> no50aIOjyIJTDzb8lc06HjGhdxcMmO

    url과 state 값을 얻을 수 있다. 이때 python Http Server가 가동 중이면 다음과 같이 Authorization Code를 얻을 수 있게 된다.

    $ python3 http.server 8080
    ::1 - - [04/Mar/2024 21:44:12] "GET /?code=u...g&state=SnIcItkEGMgqlVqhIV0N4yeUBwIWKr HTTP/1.1" 200 -
    

    Query String의 Code 부분이 Authorization Code이다.

    4.3 Access Token 얻기

    이제 access token을 얻기 위해 oauthlib에서 제공하는 fetch_token() 메서드를 이용하도록 하자.

    result = oauth_session.fetch_token(
        token_url=token_url,
        client_id=client_id,
        client_secret=client_secret,
        include_client_id=True,
        code=authorization_code
    )
    

    성공한 경우 access_token을 확인할 수 있는 json을 응답받는다.

     

    마치며

    fetch_token() 메서드를 이용해 access_token을 얻는 과정에서 include_client_id를 True로 설정하지 않은 채 테스트를 시도했는데 계속 client_secret을 찾을 수 없다는 응답을 받았는데 이 부분을 주의하도록 하자.

    728x90
    반응형