Ir para conteúdo
Fórum Script Brasil
  • 0

Autenticando Facebook com ASP


Ted k'

Pergunta

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

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 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)
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...