Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
Ted k'

Autenticando Facebook com ASP

Question

Olá galera, vou mostrar como usar ASP para autenticar sua aplicação no Facebook.

Precisamos de dois arquivos fundamentais:

Arquivo de Função de acesso ao Facebook (achei na net, não lembro o autor, mais não tirei o cabeçalho): LINK

Arquivo de configuração jSON para ASP (retirado do site oficial do jSON: LINK.

Você vai precisar de uma função de base64, eu adicionei a de Encode e Decode, caso precisem em outros projetos.

Você precisa adicionar o ID da sua aplicação, A URL de retorno (não precisa mudar a query que coloquei, facilita a autenticação em um arquivo só), e as permissões em sequencia (isso você acha no facebook developer).

Eu salvei tudo em Session, o token, o signed request e o ID do usuário do facebook:

set user = JSON.parse(base64Decode(playload))
session("signed_request") = request("signed_request")
session("oauth_token") = user.oauth_token
session("id_atual") = user.user_id
response.redirect("pagina.asp")
E Adicionei um Redirect para quando estiver autenticado: Segue o Código completo:
<script language="javascript" runat="server" src="json2.asp"></script>
<!-- #include file="fb_app.asp" -->
<%
session.lcid = 1046
session.timeOut = 1440
server.scriptTimeOut = 999999999

if (request.QueryString("logar") = "") then
    main
    function main
        dim strJSON
        dim URL
        dim sToken
        dim user
        dim loc

        set cookie = get_facebook_cookie( FACEBOOK_APP_ID, FACEBOOK_SECRET )
        if cookie.count > 0 then
            response.write "Logado... Ok! <br/>"
            sToken = cookie("access_token")
            url = "https://graph.facebook.com/me?access_token=" & sToken
            strJSON = get_page_contents(URL) 

            set user = JSON.parse(strJSON)
            response.write cookie("access_token")
        else
            link = "http://www.facebook.com/dialog/oauth?client_id=ID_DA_SUA_APLICAÇÃO&redirect_uri="&server.URLEncode("http://apps.facebook.com/NOME_DA_MINHA_APP/autenticacao.asp?logar=ok")&"&scope=offline_access,user_location,email,publish_stream,user_birthday,read_friendlists"
            response.write("<script>top.location.href='" & link & "';</script>")
        end if
    end function
else
    const BASE_64_MAP_INIT ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    dim nl
    dim Base64EncMap(63)
    dim Base64DecMap(127)

    public sub initCodecs()
        nl = "<P>" & chr(13) & chr(10)
        dim max, idx
           max = len(BASE_64_MAP_INIT)
        for idx = 0 to max - 1
             Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
        next
        for idx = 0 to max - 1
             Base64DecMap(asc(Base64EncMap(idx))) = idx
        next
    end sub

    public function base64Encode(plain)
        if len(plain) = 0 then
             base64Encode = ""
             exit function
        end if
        dim ret, ndx, by3, first, second, third
        by3 = (len(plain) \ 3) * 3
        ndx = 1
        do while ndx <= by3
             first  = asc(mid(plain, ndx + 0, 1))
             second = asc(mid(plain, ndx + 1, 1))
             third  = asc(mid(plain, ndx + 2, 1))
             ret = ret & Base64EncMap((first \ 4) and 63)
             ret = ret & Base64EncMap(((first * 16) and 48) + ((second \ 16) and 15))
             ret = ret & Base64EncMap(((second * 4) and 60) + ((third \ 64) and 3))
             ret = ret & Base64EncMap(third and 63)
             ndx = ndx + 3
        loop
        if by3 < len(plain) then
             first  = asc(mid(plain, ndx + 0, 1))
             ret = ret & Base64EncMap((first \ 4) and 63)
             if (len(plain) MOD 3) = 2 then
                  second = asc(mid(plain, ndx+1, 1))
                  ret = ret & Base64EncMap(((first * 16) and 48) + ((second \ 16) and 15))
                  ret = ret & Base64EncMap(((second * 4) and 60))
             else
                  ret = ret & Base64EncMap((first * 16) and 48)
                  ret = ret & "="
             end if
             ret = ret & "="
        end if
        base64Encode = ret
    end function

    public function base64Decode(scrambled)
        if len(scrambled) = 0 then
             base64Decode = ""
             exit function
        end if
        dim realLen
        realLen = len(scrambled)
        do while mid(scrambled, realLen, 1) = "="
             realLen = realLen - 1
        loop
        dim ret, ndx, by4, first, second, third, fourth
        ret = ""
        by4 = (realLen \ 4) * 4
        ndx = 1
        do while ndx <= by4
             first  = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
             second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
             third  = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
             fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1)))
             ret = ret & chr(((first * 4) and 255) + ((second \ 16) and 3))
             ret = ret & chr(((second * 16) and 255) + ((third \ 4) and 15))
             ret = ret & chr(((third * 64) and 255) + (fourth and 63))
             ndx = ndx + 4
        loop
        if ndx < realLen then
             first  = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
             second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
             ret = ret & chr(((first * 4) and 255) + ((second \ 16) and 3))
             if realLen mod 4 = 3 then
                  third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
                  ret = ret & chr(((second * 16) and 255) + ((third \ 4) and 15))
             end if
        end if
        base64Decode = ret
    end function
    call initCodecs

    splitvar = split(request("signed_request"), ".")
    encoded_sig = splitvar(0)
    playload = splitvar(1)

    set user = JSON.parse(base64Decode(playload))
    session("signed_request") = request("signed_request")
    session("oauth_token") = user.oauth_token
    session("id_atual") = user.user_id
    response.redirect("animacao.asp")
end if
%>

Espero que ajude. Abraços

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

fiz corretamento como o exemplo do Ted K'

mas esta dando o seguinte erro depois que o facebook retorna para o meu site

Microsoft VBScript runtime error '800a0009'

Subscript out of range: '[number: 0]'

/login.asp, line 121

splitvar = split(request("signed_request"), ".")

linha 121 encoded_sig = splitvar(0)
playload = splitvar(1)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  



  • Forum Statistics

    • Total Topics
      148104
    • Total Posts
      643373
×
×
  • Create New...