. [LINE API] 라인 로그인 v2.1
본문 바로가기
프로그래밍 공부/LINE 관련

[LINE API] 라인 로그인 v2.1

by 불냥이_ 2021. 6. 14.

https://developers.line.biz/ja/reference/line-login/

 

https://developers.line.biz/

 

developers.line.biz

 

라인 플랫폼이 제공하는 것

 유저ID, 유저명, 프로필 사진, 상태 메시지 등을 제공함.


엑세스 토큰을 발급받기

 HTTP Request

POST https://api.line.me/oauth2/v2.1/token

 

Request Header

  Content-Type :: application/x-www-form-urlencoded

 

Request Body

  - grant_type :

     [String] authotization code

 

  - code :

     [String] 라인플랫폼으로 받은 허가코드

 

  - redirect_uri :

     [String] 콜백 URL (✱ 콜백 URL : 유저가 라인 로그인을 완료하면 다시 돌아갈 페이지를 말하는 것 같다.)

 

  - clinet_id :

     [String] 채널Id (라인 개발자 콘솔에서 확인 가능함 : https://developers.line.biz/console/ ) (※ 채널 : 채팅방을 말하는 것 같다.)

 

  - client_secret :

     [String] 채널 Secret (라인 개발자 콘솔에서 확인 가능)

 

  - code_verifier :

     [String] 반각영문자/숫자 및 기호로 구성된 43~128 무작위 문자로 구성됨

(예 : wJKN8qz5t8SSI9lMFhBB6qwNkQBkuPZoCxzRhwLRUo1)

  LINE 로그인이 PKCE를 장착하는 경우, 본 파라미터를 추가하는 것으로 라인 플랫폼측에서 code_verifier 의 유효성을 검증한 뒤, 액세스 토큰을 발급합니다. PKCE 장착 방법에 대해서는 https://developers.line.biz/ja/docs/line-login/integrate-pkce/#how-to-integrate-pkce 를 참조.

 (※ PKCE란? https://juniortech.tistory.com/15 )

 

Response

상태 코드 200과 아래의 정보를 퐇마하여 JSON 오브젝트를 반환합니다. 

 

  - access_token

    [String] 액세스 토큰. 유효기간은 30일.

 

  - expires_in

    [Number] 액세스 토큰의 유효기간이 만료될때까지 숫자. 초 단위

 

  - id_token

    [String] 유저 정보를 포함한 JWT. 이 프로퍼티는 스코프에 openid를 지정한 경우에만 반환. ID 토큰에 관해 상세한 정보는 (ID토큰으로부터 프로필정보를 취득함 https://developers.line.biz/ja/docs/line-login/verify-id-token/) 를 참조.

 

  - refresh_token

    [String] 새로운 액세스 토큰을 취득하기 위한 토큰. 액세스 토큰 유효기간이 만료되고 나서 최장 10일간 유효..

 

  - scope

    [String] 액세스토큰에 부여되고 있는 권한. 스코프에 관해 상세한 것은 https://developers.line.biz/ja/docs/line-login/integrate-line-login/#scopes 를 참조. (주의 : 이메일 스코프는 권한에 부여되어 있어도 스코프 프로퍼티의 값으로서는 반환되지 않음.)

 

  - token_type

    [String] Bearer

 

  - Response example)

{
    "access_token": "bNl4YEFPI/hjFWhTqexp4MuEw5YPs...",
    "expires_in": 2592000,
    "id_token": "eyJhbGciOiJIUzI1NiJ9...",
    "refresh_token": "Aa1FdeggRhTnPNNpxr8p",
    "scope": "profile",
    "token_type": "Bearer"
}

액세스 토큰의 유효성을 검증

 액세스 토큰을 이용하여, 안전하게 유저 등록과 로그인을 처리하는 방법에 대해서는 https://developers.line.biz/ja/docs/line-login/secure-login-process/ 를 참조.

 

Requset 예)

curl -v -X GET \
'https://api.line.me/oauth2/v2.1/verify?access_token=eyJhbGciOiJIUzI1NiJ9.UnQ_o-GP0VtnwDjbK0C8E_NvK...'

 

HTTP Request

GET https://api.line.me/oauth2/v2.1/verify

 

쿼리 파라미터

access_token : 액세스 토큰 

 

Response

 엑세스 토큰이 휴효한 경우에는 HTTP 상태 코드 200 OK와 아래의 JSON 오브젝트가 반환.

 

  - scope

    [String] 엑세스 토큰에 부여된 권한.

 

  - clinet_id

    [String] 엑세스 토큰이 발행된 채널 ID

 

  - expires_in

    엑세스 토큰의 유효기한이 만료되는 시간. 초단위.  

 

  - Repsponse Example

 

{
   "scope":"profile",
   "client_id":"1440057261",
   "expires_in":2591659
}

ID 토큰을 검증하기

 ID 토큰은 유저 정보를 포함한 JWT를 말한다. 수신한 ID토큰은 실제 유저인 척 하는 해커가 발행하고 있을 가능성이 있다. 수신한 ID토큰이 정식 토큰인 것을 확인하고, 유저의 프로필 정보와 메일 주소를 습득한다.

 

 Request의 예)

curl -v -X POST 'https://api.line.me/oauth2/v2.1/verify' \
 -d 'id_token=eyJraWQiOiIxNmUwNGQ0ZTU2NzgzYTc5MmRjYjQ2ODRkOD...&client_id=1234567890'

 

HTTP Request

POST https://api.line.me/oauth2/v2.1/verify

 

Request Body

  - id_token

    [String] ID 토큰

 

  - clinet_id

    [String] 예상되는 채널ID. 라인이 발행한 채널 고유의 식별자. 라인 개발자 콘솔에서 확인가능.

 

  - nonce (임의)

    [String] 예상되는 nonce의 값. 인가 Request에 지정한 nonce 의 값을 지정한다. 인가 Request에서 nonce의 값을 지정하지 않은 경우는 생략한다.

(※ nonce란? 암호 통신에서 1회용으로 사용되는 무작위의 숫자를 말함.  https://en.wikipedia.org/wiki/Cryptographic_nonce 참조.)

 

  - user_id (임의)

    예상되는 유저 ID. 유저 ID를 습득하는 방법에는 유저 프로필을 습득하기 (https://developers.line.biz/ja/reference/line-login/#get-user-profile) 을 참조.

 

Response

ID 토큰 검증에 성공한 경우, ID토큰의 Payload에 실려 반환.

  - iss

    [String] ID토큰의 생성 URL

 

  - sub

    [String] ID토큰의 대상 유저 ID

 

  - aud

    [String] 채널ID

 

  - exp

    [Number] ID토큰의 유효기간. UNIX 타임.

 

  - iat

    [Number] ID토큰의 생성기간. UNIX 타임.

 

  - auth_time

    [Number] 유저 인증기간. UNIX 타임. 인가 Request 에 max_age의 수치를 지정하지 않은 경우엔 들어있지않다.

 

  - nonce

    [String] 인가 URL에 인정한 nonce의 값. 인가 Request에 nonce의 수치를 지정하지 않은 경우엔 들어있지않다. 

 

  - amr

    [String List] 유저가 사용한 인정방법의 리스트. 아래의 값이 들어있다.

    pwd : 메일 주소와 패스워드에 의한 로그인

    lineautologin : 라인에 의한 자도 고르인 (LINE SDK를 사용한 경우도 포함)

    lineqr : QR코드에 의한 고르인

    linesso : 싱글 사인 온에 의한 로그인 (※ 싱글사인온(SSO) : 과거에 라인으로 로그인한 적이 있는 경우, 다음에 버튼 클릭만으로도 라인을 통한 로그인 기능. 쿠키를 활용)

 

  - name

    [String] 유저의 표시명. 인가 Request에 profile 스코프를 지정한 경우에는 들어있지않다.

 

  - picture

    [String] 유저 프로필 사진URL. 인가 Request에 profile 스코프를 지정한 경우에는 들어있지않다.

 

  - email

    [String] 유저의 메일 주소. 인가 Request에 email 스코프를 지정하지 않은 경우에는 들어있지않다.

 

  - Response Example

 

{
    "iss": "https://access.line.me",
    "sub": "U1234567890abcdef1234567890abcdef",
    "aud": "1234567890",
    "exp": 1504169092,
    "iat": 1504263657,
    "nonce": "0987654asdf",
    "amr": [
        "pwd",
        "linesso",
        "lineqr"
    ],
    "name": "Taro Line",
    "picture": "https://sample_line.me/aBcdefg123456",
    "email": "taro.line@example.com"
}

 

 

 

 

댓글