Facebook 액세스 토큰을 확인하는 방법은 무엇입니까?


108

서버가해야 할 일이 있습니다. 액세스 토큰의 유효성을 확인하십시오.

클라이언트는 서버 사용자 ID와에서 얻은 액세스 토큰을 보냅니다 FB.getLoginStatus. 예상대로 액세스 토큰의 유효성을 확인하는 URL이 있습니다 http://xxx.facebook.com/access_token?=xxxxxxxxxxxxxxxxxxxxxxxxxxxx.

사용 가능한지 여부를 반환하거나 API (서버 측)가 있습니까?


2
graph.facebook.com/me/permissions를 호출하지 않는 이유는 무엇입니까?
Igy



답변:


136

공식적으로 지원되는 방법은 다음과 같습니다.

GET graph.facebook.com/debug_token?
     input_token={token-to-inspect}
     &access_token={app-token-or-admin-token}

자세한 정보 는 체크 토큰 문서 를 참조하십시오.

응답의 예는 다음과 같습니다.

{
    "data": {
        "app_id": 138483919580948, 
        "application": "Social Cafe", 
        "expires_at": 1352419328, 
        "is_valid": true, 
        "issued_at": 1347235328, 
        "metadata": {
            "sso": "iphone-safari"
        }, 
        "scopes": [
            "email", 
            "publish_actions"
        ], 
        "user_id": 1207059
    }
}

24
페이스 북이 획기적인 변화를 도입 할 가능성이 더 높다고 말하는 것은 오해의 소지가 있다고 생각합니다. 그들은 어디에나 그들의 공식 문서가 이것이 액세스 토큰의 유효성을 검사하는 방법임을 분명히 밝히지 않는다고 말하지 않았습니다
Ed Sykes

1
@rynop, 음, API 엔드 포인트의 이름은 "debug_token"이며, Facebook API 문서의 Get Info about Tokens and Debugging 섹션에 설명되어 있습니다. 문서의이 섹션은 HTML 앵커 #debug에서 참조하며 API가 디버그 도구의 백엔드임을 명시합니다. 보인다는 꽤 나 취소,하지만 당신은 아무데도 그것을 명확하고 직접 기능은 제품 용으로 고안되지 않는다는 것을 언급하지, 그 권리를 기술적으로 ... :-)
조나단 길버트

5
여기서 가장 중요한 문제는 데이터가 클라이언트 측에서 오는 경우 me? access_token 메서드를 사용하는 것이 잘못되었다는 것입니다. 모든 사이트가 토큰을 낚시 한 다음이를 사용하여 API에 액세스하여 사이트에 인증 할 수 있기 때문입니다.
srcspider

4
OP는 토큰과 관련된 사용자 ID를 확인하려고했습니다. / me 끝점은 사용자 ID를 반환하지만 액세스 토큰이 유효한 경우에만 반환합니다 (결국 반환 "me"를 결정 하는 데 토큰이 사용되기 때문입니다 ). 따라서 / me를 잡고 사용자 ID를 비교하십시오. 각 앱은 고유 한 범위의 사용자 ID를 가져 오므로 다른 소스의 ID를 앱의 토큰으로 얻은 / me와 비교할 수 없습니다.
Jonathan Gilbert

3
문서는 과거에 디버깅을 위해 이것을 사용하여 참조했을 수 있습니다. 그러나 현재는 이것이 바로 사용 사례임을 시사합니다.
AndHeiberg

78

오류가 발생하면 https://graph.facebook.com/me?access_token=xxxxxxxxxxxxxxxxx 를 요청 하면됩니다. 토큰은 유효하지 않습니다. id 속성이있는 JSON 개체를 가져 오면 유효한 것입니다.

불행히도 이것은 당신의 토큰이 당신의 앱에서 나온 것이 아니라 유효한지 여부 만 알려줄 것입니다.


9
죄송합니다. 질문이 명확하지 않습니다. 문제는 uid와 accessToken만으로 사용자를 확인하는 방법입니다. graph.facebook.com/100000726976284?access_token=xxxxxx 예를 들어 사용자 100000726976284의 액세스 토큰이 xxxxxx인지 확인하는 간단한 방법이 있습니까? 나는 '검증 된'파일이 열쇠라고 생각한다. 올바른 xxxxxx를 입력했을 때만 응답에서 Verified = true를 볼 수 있습니다.
그래서 재 경

14
요청 graph.facebook.com/me?access_token=xxxxxxxxxxxxxxxxx 를 사용해서 ID가 다시 요청에서 통과 성냥을 가지고 uid를 확인 후 위에서 언급하고있다.
AlexQueue 2010 년

51
이것은 access_token이 앱에 대한 것인지 확인하지 않습니다.
Ed Sykes 2013

또한 expires_at정보를 제공하지 않습니다 .
vinesh

4
반대 투표, @EdSykes에 동의합니다. 이렇게하면 액세스 토큰이 앱에 속하는지 확인할 수 없습니다. developers.facebook.com/docs/facebook-login/security
nikis

35

오늘까지 먼저 앱 액세스 토큰 (Facebook에 대한 GET 요청을 통해)을 얻은 다음 수신 된 토큰을 다음과 같이 사용했음을 알려 드리고자합니다 app-token-or-admin-token.

GET graph.facebook.com/debug_token?
    input_token={token-to-inspect}
    &access_token={app-token-or-admin-token}

그러나 나는 이것을하는 더 나은 방법을 깨달았습니다 (GET 요청이 하나 더 적게 필요하다는 추가 이점과 함께).

GET graph.facebook.com/debug_token?
    input_token={token-to-inspect}
    &access_token={app_id}|{app_secret}

여기 에서 액세스 토큰에 대한 Facebook의 문서에 설명되어 있습니다 .


6
감사합니다. 기타 참고 사항 : 문자 "|" 답변에 링크 된 페이지에 표시된대로 문자가 포함되어야합니다 ( '또는'을 나타내지 않음) : developers.facebook.com/docs/facebook-login/…
Mike S

1
이것은 안전하지 않습니까? URL 쿼리 매개 변수를 통해 앱 시크릿을 전송하면 URL이 암호화되지 않았기 때문에 서버와 Facebook 및 HTTPS 사이의 "중간"에있는 모든 사람에게 노출됩니다. 누구나 debug_token 형식의 URL로 요청을 "수신"(스 니프)하고 Facebook 앱 비밀을 훔칠 수 있습니다.
Simeon


@Xeing 감사합니다. 잘못된 인상을 받았습니다. :) URL의 호스트 부분이 암호화되지 않은 것 같습니다.
Simeon

1
'|'추가 앱 비밀을 가지고 마침내 나에게 갔다. 그렇지 않으면이 API가 작동하지 않습니다.
Uday

4

간단히 요청 (HTTP GET) :

https://graph.facebook.com/USER_ID/access_token=xxxxxxxxxxxxxxxxx

그게 다야.



1

교환 Access Token에 대한 Mobile Number and Country Code(서버 측 또는 클라이언트 측)

당신은 얻을 수 있습니다 mobile number당신과 함께 access_token이 함께 API https://graph.accountkit.com/v1.1/me/?access_token=xxxxxxxxxxxx . 당신은 일단 어쩌면, mobile number과를 id, 당신은 그것을 작업 할 수 있습니다 확인 을 사용자에게 당신의server & database .

xxxxxxxxxx 위는 Access Token

응답 예 :

{
   "id": "61940819992708",
   "phone": {
      "number": "+91XX82923912",
      "country_prefix": "91",
      "national_number": "XX82923912"
   }
}


교환 Auth Code에 대한 Access Token(서버 측)

당신이있는 경우 Auth Code대신, 먼저 얻을 수있는 Access Token이와 API- https://graph.accountkit.com/v1.1/access_token?grant_type=authorization_code&code=xxxxxxxxxx&access_token=AA|yyyyyyyyyy|zzzzzzzzzz을

xxxxxxxxxx, yyyyyyyyyyzzzzzzzzzz상기있다 Auth Code, App ID그리고 App Secret각각.

예제 응답

{
   "id": "619XX819992708",
   "access_token": "EMAWdcsi711meGS2qQpNk4XBTwUBIDtqYAKoZBbBZAEZCZAXyWVbqvKUyKgDZBniZBFwKVyoVGHXnquCcikBqc9ROF2qAxLRrqBYAvXknwND3dhHU0iLZCRwBNHNlyQZD",
   "token_refresh_interval_sec": XX92000
}

주 -이은에 선호 server-side(가)부터 API요구 APP Secret될 운명되지 않은 shared위해를 security reasons.

행운을 빕니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.