iPhone 앱에 대한 Facebook 액세스 토큰 서버 측 검증
저는 서버와의 소통을 기반으로 한 아이폰 애플리케이션을 개발하고 있으며, 페이스북 인증 메커니즘을 사용하고 싶습니다.
기본적으로 다음과 같이 작동해야 한다고 생각합니다.
- 내 아이폰 앱에서 사용자는 자신의 이메일과 비밀번호를 사용하여 페이스북에 로그인합니다.
- 사용자는 관련 Facebook 응용 프로그램을 위해 자신의 데이터에 액세스할 수 있습니다.
- 성공적으로 로그인한 후 내 아이폰 앱이 액세스 토큰을 수신합니다.
- 서버와의 추가 통신을 위해 iPhone 응용 프로그램에서 수신된 Facebook 액세스 토큰을 사용해야 합니다(예: 쿼리).
- 내 서버가 iPhone 앱에서 액세스 토큰과 함께 일부 쿼리를 수신하면 Facebook에 이 토큰이 유효한지(그리고 누구에게 유효한지)를 물어봐야 하며, 유효하다면 서버는 사용자가 Facebook으로 인증되었다고 가정해야 합니다.
제 질문은: 주어진 액세스 토큰이 유효한지 서버가 페이스북에 어떻게 물어봐야 하는가 하는 것입니다.제 페이스북 앱에 토큰이 유효한지 어떻게든 확인해봐야 할 것 같습니다.
API를 그래프로 표시하기 위해 많은 페이스북 쿼리를 시도했지만, 제가 기대했던 대로 작동하는 것은 없었습니다.예를 들어 주시겠습니까?
사용자 액세스 토큰이 앱에 속하는지 확인하는 데 사용할 수 있는 2단계 프로세스는 다음과 같습니다.
앱 액세스 토큰 생성
(https://developers.facebook.com/docs/howtos/login/login-as-app/)
https://graph.facebook.com/oauth/access_token?
client_id=YOUR_APP_ID
&client_secret=YOUR_APP_SECRET
&grant_type=client_credentials
사용자 액세스 토큰 디버그
(https://developers.facebook.com/docs/howtos/login/debugging-access-tokens/)
https://graph.facebook.com/debug_token?
input_token=INPUT_TOKEN
&access_token=ACCESS_TOKEN
여기서 INPUT_TOKEN은 확인하려는 사용자 액세스 토큰이고 ACCESS_TOKEN은 1단계에서 얻은 앱의 토큰입니다.
디버그 끝점은 기본적으로 토큰에 대한 모든 정보를 덤프하므로 다음과 같은 응답을 합니다.
{
data: {
app_id: YOUR_APP_ID,
is_valid: true,
metadata: {
sso: "iphone-safari"
},
application: YOUR_APP_NAMESPACE,
user_id: USER_ID,
issued_at: 1366236791,
expires_at: 1371420791,
scopes: [ ]
}
}
해당 토큰이 "당신의 앱"의 토큰이 아닌 경우 오류 응답을 반환합니다.
업데이트: 이 답변은 토큰이 앱에 속한다는 것을 먼저 검증하지 않기 때문에 안전하지 않은 것 같습니다. 다음과 같은 의견, 원래 답변을 참조하십시오.
이미 액세스 토큰을 보유하고 있을 것입니다.이러한 경우 액세스 토큰의 유효성을 검사하는 가장 간단한 방법은 다음 요청을 발급하는 것입니다.
https://graph.facebook.com/me?fields=id&access_token=@accesstoken
여기서 @accessstoken을 사용자가 가지고 있는 액세스 토큰으로 바꿉니다.제가 url을 분해해서 각각 설명해드리겠습니다.
액세스 토큰 소유자의 Facebook 사용자 ID를 JSON 문자열로 반환하는 그래프 API 요청을 발행합니다.키워드 'me'는 현재 로그인한 사용자 또는 액세스 토큰의 소유자를 나타냅니다.이 요청의 경우 액세스 토큰은 필수 매개 변수입니다.
제공된 액세스 토큰이 유효하지 않거나 만료된 경우 Facebook은 어떤 종류의 오류 메시지를 반환합니다.
유효한 액세스 토큰의 경우 결과는 다음과 같습니다.
{
"id": "ID_VALUE"
}
또 다른 해결책은 다음과 같습니다.https://graph.facebook.com/app/?access_token=[user_access_token]
사용자 액세스 토큰에서 응용 프로그램 ID 가져오기(또는 토큰에 대한 원본 응용 프로그램 확인)에 설명되어 있습니다.
문서화되지 않은 기능으로 보이지만 토큰이 생성된 앱의 ID가 포함된 JSON을 반환합니다.만약 토큰이 당신의 앱을 위한 것이 아니라면, 400을 400을 반환합니다.
최신 버전의 Facebook(2.2)에서는 다음과 같은 방법으로 수행할 수 있습니다.
https://developers.facebook.com/docs/graph-api/reference/v2.2/debug_token
샘플 출력:
{
"data": {
"app_id": "THE APP ID",
"application": "APP NAME",
"expires_at": 1427245200,
"is_valid": true,
"scopes": [
"public_profile",
"basic_info",
"read_stream",
"email",
"publish_actions",
"read_friendlists",
"user_birthday",
"user_hometown",
"user_location",
"user_likes",
"user_photos",
"user_videos",
"user_friends",
"user_posts"
],
"user_id": "THE USER ID"
}
}
private function facebookRequestMe($access_token)
{
include_once "facebook.php";
$facebook = new Facebook(array(
"appId" => "your_application_id",
"secret" => "your_application_secret"
));
$facebook->setAccessToken($access_token);
return $facebook->api("/me", "GET");
}
GitHub에서 PHP용 Facebook SDK를 다운로드할 수 있습니다.
사용자가 자신의 것이라고 주장하는 Facebook UID를 전달했으며 합법적인지 확인하려면 액세스 토큰(Robin Jome의 응답 구현)에 대해 이를 확인하는 Python 함수입니다.
def verify_facebook_id(id, access_token):
import requests
import simplejson
params = {'fields': 'id', 'access_token': access_token}
text = requests.get("https://graph.facebook.com/me", params=params).text
json = simplejson.loads(text)
response_id = json["id"]
return response_id == id
이 방법은 하나의 요청만 사용하여 사용자 토큰을 확인하는 유일한 보안 방법입니다.
https://graph.facebook.com/debug_token?input_token={token-to-inspect}&access_token={app_id}|{app_secret}
위 URL의 "|" 기호는 OR로 사용되지 않고 구분 기호로 사용되며 다른 필드를 채운 후에 있어야 합니다.
JSON은 다음과 같이 응답합니다.
{
data: {
app_id: {app_id},
application: {app_name},
expires_at: {some_number},
is_valid: {true|false}
scopes: {array_of_permissions},
user_id: {user_id}
}
}
참조: https://developers.facebook.com/docs/facebook-login/access-tokens/ #apptokens(위의 방법은 이 섹션의 하단에 설명되어 있습니다)
액세스 토큰과 함께 Facebook은 오프셋 값인 "expires_in" 매개 변수도 보냅니다.이 값을 사용하여 액세스 토큰이 NSDate로 만료되는 시기를 계산합니다.그런 다음 요청이 필요할 때 현재 날짜와 만료 날짜를 비교합니다.
또한 Facebook이 다시 보내는 상태 코드와 응답 문자열을 검사해 보십시오.
언급URL : https://stackoverflow.com/questions/5406859/facebook-access-token-server-side-validation-for-iphone-app
'programing' 카테고리의 다른 글
웹 애플리케이션이 iOS 기기에 푸시 알림을 보내는 방법은 무엇입니까? (0) | 2023.06.01 |
---|---|
배열을 하나의 문자열로 결합하는 루비 (0) | 2023.06.01 |
SQL Server: 테이블이 단일 행을 포함하도록 제한하는 방법은 무엇입니까? (0) | 2023.06.01 |
Git 저장소 크기 찾기 (0) | 2023.06.01 |
Angular/Angular-CLI 및 Node.js에 대한 호환성 목록이 있습니까? (0) | 2023.06.01 |