2010-04-29 4 views
4

저는 iFrame 내에 새로운 Facebook Canvas 애플리케이션을 개발하고 사용자를 인증하려고합니다. 새로운 OAuth API에서는 다음과 같이 앱 리디렉션을 권장합니다.Facebook 캔버스 iFrame 앱 - 새로운 OAuth 프로토콜로 사용자 인증

https://graph.facebook.com/oauth/authorize? CLIENT_ID = ... = & redirect_uri로 http://www.example.com/oauth_redirect

그러나 이것은 사용자로부터 권한을 요구하는 전체 북 페이지는 Iframe 자체 내에서 렌더링 이상한 문제 (북 내의 즉 한국어)를 생성한다. 오래된 REST API 메소드를 사용하고 싶지 않기 때문에 누구나 새로운 OAuth API로이를 해결하는 방법을 알고 있습니까?

+0

FYI : iFrames에서 제 3 자 쿠키를 수락 할 수없는 추가 보안 기능이 있습니다.이 경우 iFrame에 의해 거부되는 Facebook의 승인 쿠키가 될 것입니다. IE 브라우저가 서비스를 제공 할 수 없음을 의미합니다. 귀하의 iFrame 응용 프로그램 ....). 이 문제를 해결하려면 HTTP 응답에 P3P 헤더를 추가해야합니다. – Amir

답변

0

같은 문제가 있어도 페이스 북 포럼에 게시했습니다. 중재자는 현재로서는 해결책이없는 문제라고 알려줍니다. 이 스레드를보세요 - http://forum.developers.facebook.com/viewtopic.php?id=56590

+0

당신의 솔루션은 무엇입니까? – zerkms

+0

이 답변은 페이스 북이 Canvas 페이지 용 oAuth를 구현 한 이후 더 이상 유효하지 않을 수 있습니다. – Amir

0

반대로, 나는 내 블로그 게시물 here에서 설명한이 문제에 대한 해결책을 발견했습니다. 확인 해봐.

+0

귀하의 솔루션이 새로운 oauth 인증이나 Facebook 그래프 API를 사용하지 않는다고 생각합니다. – Abhi

+0

링크가 404 오류로 응답합니다. –

0

지난 2 일 동안이 문제로 어려움을 겪었으며 Facebook developers forum에서이 문제의 해킹을 발견했습니다.

0

oAuth v2를 사용하는 다른 방법이 있습니다. 이는 페이스 북 문서에 설명되어 있지만 여러 페이지로 나누어 져 있으므로 이해하기 쉽지 않습니다.

먼저 앱의 '고급 매개 변수'에 '캔버스 용 OAuth 2.0'플래그를 활성화해야합니다.

function parse_signed_request($signed_request, $secret) { 
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    // decode the data 
    $sig = base64_url_decode($encoded_sig); 
    $data = json_decode(base64_url_decode($payload), true); 

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { 
      error_log('Unknown algorithm. Expected HMAC-SHA256'); 
      return null; 
    } 

    // check sig 
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
    if ($sig !== $expected_sig) { 
      error_log('Bad Signed JSON signature!'); 
      return null; 
    } 

    return $data; 
} 

function base64_url_decode($input) { 
    return base64_decode(strtr($input, '-_', '+/')); 
} 

$data = parse_signed_request($_REQUEST["signed_request"], <your facebook app api secret>); 

if (empty($data["user_id"]) && !isset($_REQUEST['redir'])) { 
    // The user isn't authenticated 
    $auth_url = "http://www.facebook.com/dialog/oauth?client_id=" . 
      <your facebook app id> . "&redirect_uri=" . 
      urlencode('http://apps.facebook.com/<yourapp>/?redir=1'); 
    echo("<script> top.location.href='" . $auth_url . "'</script>"); 
    die; 
} 
// Here the user is authenticated 
echo ("Welcome User: " . $data["user_id"]); 
// And now you have the Graph API auth token in $data["oauth_token"], 
// so you can use any graph api method 
0

canvas iframe에서 간단한 리디렉션 302 또는 301을 수행 할 수 없으므로 iframe 내의 콘텐츠 만 리디렉션됩니다. Facebook이 권장하는 것은 top.location을 대화/oauth 페이지로 설정할 작은 JavaScript를 보내는 것입니다. 당신의 APPID 인 및 redirect_uri는 인증 대화 상자 페이지에서 리디렉션을 처리하는 페이지 인

<script>top.location='https://www.facebook.com/dialog/oauth?client_id={0}&redirect_uri={1}&scope=publish_actions';</script>. 

clientid.

관련 문제