Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ted k'

Autenticando Facebook com ASP

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não testei, mas como sempre, mandou bem Ted k'.

 

Obrigado por compartilhar. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá hargoniado, quanto tempo, e as festas em minas? ehehe

 

Rapaz, testei em um projeto que fiz para um aplicativo para as pernabucanas, segue o link:

http://apps.facebook.com/diadospais/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.