https://developers.line.biz/ja/reference/line-login/
라인 플랫폼이 제공하는 것
유저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 스코프를 지정한 경우에는 들어있지않다.
[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"
}
댓글