Facebook Аутентификация на стороне сервера с классическим ASP - PullRequest
0 голосов
/ 28 января 2012

Похоже на этот закрытый вопрос , но я уточню мой вопрос, так что, надеюсь, будет ответ:)

Я добавляю кнопку входа в Facebook на сайт, вот и всев классическом ASP, и я новичок в Facebook SDK / API, и https: //developers.facebook.com/docs/authentication дает все примеры кода на PHP.Мне нужно передать некоторую информацию о пользователях FB в базу данных сервера с некоторыми функциями COM, поэтому я собираюсь выполнить аутентификацию на стороне сервера.Все идет нормально.Аутентификация на стороне сервера не дает мне токен доступа напрямую, хотя дает мне код , и я в основном понимаю пример PHP, как это сделатьв токен доступа,

$token_url = "https://graph.facebook.com/oauth/access_token?"
   . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
   . "&client_secret=" . $app_secret . "&code=" . $code;
 $response = @file_get_contents($token_url);
 $params = null;
 parse_str($response, $params);
 $graph_url = "https://graph.facebook.com/me?access_token=" 
   . $params['access_token'];
 $user = json_decode(file_get_contents($graph_url));

Я действительно не знаю способ ASP / VBScript, чтобы сделать что-либо из вышеперечисленного.PHP содержит намного больше встроенных функций, чем ASP, например urlencode, file_get_contents, parse_str, который достаточно умен, чтобы обрабатывать строку как параметры запроса, и я даже не знаю, хочу ли я что-нибудь подобноеjson_decode или нет!

Для file_get_contents Я думаю попробовать что-то вроде

fbApiCode = Request.QueryString("code")
    if len(fbApiCode) > 0 then
        set xmlHttp = Server.CreateObject("Microsoft.XMLHTTP")
        appAuth = "https://graph.facebook.com/oauth/access_token?client_id=" & _
           Application("fbAppId") & "&redirect_uri=" & Application("fbRedirectUri") & "&client_secret=" _
           Application("fbAppSecret") & "&code=" & fbApiCode
        xmlHttp.open("GET", appAuth, false) ' or post?
        accessResponse = xmlHttp.responseText

Это даже близко к правильному подходу, или я бегу по кроличьей норе?Если я не могу перевести код на токен доступа с помощью простого VBScript, мне придется захватить информацию о пользователе FB (имя, адрес электронной почты и т. Д.) В JavaScript с помощью FB.getLoginStatus() и передать ее на мой сервер с помощью AJAX, чтоЯ знаю, что это не очень безопасно, поэтому я хочу не прибегать к этому.

1 Ответ

1 голос
/ 24 марта 2016

Я знаю, что это старая ветка, но это решение может кому-нибудь помочь.

Вам потребуется запросить токен с помощью кода, а затем запросить информацию о пользователе с помощью токена.

<script language="javascript" runat="server">
"use strict";
function getJSON(strOrObject){
    if (typeof strOrObject == "string") {
        return eval("(" + strOrObject + ")");
    }
    return strOrObject;
}
</script>
<%
fbClientToken = [[CLIENTTOKEN]]
fbAppID = [[APPID]]
fbAppSecret = [[APPSECRET]]

fbAuthURL = "https://www.facebook.com/dialog/oauth"
fbTokenURL = "https://graph.facebook.com/v2.3/oauth/access_token"
fbOAuthCallback = [[CALLBACKURL]]
fbScope = "public_profile,email"
if request("go")="login" then
    Randomize
    nonce = Rnd
    response.redirect fbAuthURL & "?response_type=code&client_id=" & fbAppID & "&redirect_uri=" & Server.URLEncode(fbOAuthCallback) & "&scope=" & fbScope & "&state=" & nonce
else
    if request("code") <> "" then       
        information = "client_id=" & fbAppID & "&redirect_uri=" & Server.URLEncode(fbOAuthCallback) & "&client_secret=" & fbAppSecret & "&code=" & request("code")
        Set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")
        xmlhttp.Open "GET", fbTokenURL & "?" & information, false
        xmlhttp.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
        xmlhttp.send        
        respText = xmlhttp.ResponseText     
        if InStr(respText,"access_token") then
            dim respJSON : set respJSON = getJSON(respText)
            getURL = "https://graph.facebook.com/me?access_token=" & respJSON.access_token
            xmlhttp.Open "GET", getURL, false
            xmlhttp.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
            xmlhttp.send
            respToken = xmlhttp.ResponseText
            %><h1>Token Inspection Response</h1><%
            if InStr(respToken,"{") and InStr(respToken,"}") then
                dim userJSON : set userJSON = getJSON(respToken)
                response.write "<br/>ID: " & userJSON.id
                response.write "<br/>email: " & userJSON.email
                response.write "<br/>first_name: " & userJSON.first_name
                response.write "<br/>last_name: " & userJSON.last_name
                response.write "<br/>name: " & userJSON.name
                response.write "<br/>gender: " & userJSON.gender
                response.write "<br/>locale: " & userJSON.locale
                response.write "<br/>verified: " & userJSON.verified
                response.write "<br/>link: " & userJSON.link
                response.write "<br/>timezone: " & userJSON.timezone
            else
                %><h1>Invalid Inspection Response</h1><%=respToken%><%
            end if          
        else
            %><h1>Invalid Response</h1><%=respText%><%
        end if
    end if
end if
%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...