Facebook登录:有没有办法在重定向中接收URL片段作为查询字符串参数?

Jay*_*Pea 2 facebook facebook-login

因此,当使用Facebook登录时,事实证明,如果您设置response_typetokencode%20token将"响应数据作为URL片段包含在"重定向到您的应用的URL上.说真的,为什么?什么时候对任何人都有用?

无论如何,我希望这在某种程度上与安全有关,并且除了惹恼别人之外还有其他原因,但我想知道是否有办法禁用它,因为我使用的是Angular并且它是真实的使用hashbangs处理网址的痛苦.

如果我设置response_typecode唯一的代码返回一个非常干净的查询参数,但我想,以执行额外的验证能够同时接收.有没有办法改变这种行为?谢谢.

编辑: 那么事实证明,设定response_typecode收益#/ =在URL的末尾,所以没有办法得到一个干净的查询字符串.已经确定没有办法改变这种行为,但我仍然有兴趣找出Facebook为什么这么做.它与安全有关吗?这些url片段的目的是什么?

Ven*_*ing 6

答案

对于你的第一个问题,我想你会token在浏览器中处理所有内容而不是在服务器上处理时使用.

对于您的主要问题,据我所知,您无法改变Facebook重定向成功授权的方式.Facebook不会将令牌作为干净的查询参数提供给您.如果您使用tokencode token,您想要的将在哈希片段中.抱歉.


注意:这对您来说可能不是问题.我不确定你想要什么"附加验证",但是当你使用时code token,交换生成的代码会获得与你刚刚嵌入URI中的代码不同的标记.两者现在都有效,将分别到期.真的,你可能需要代码令牌; 两者都不会帮助你,因为他们没有联系.


使用所有三种方法的示例:

如果你设置response_typecode你被重定向到如下:

http://example.com/redirect_uri?state=thestatepassed&code=AQDN9E9GYjA8NbyCt
87_jV5vHnCQylNxmBswo6Z1BsrR7lmTPom6wjrzfan6P4GBLDt3EQrfPg0xSLoMLxBBfscsyfSY
JNM2vu9OoqEQXXSJCTUq_fMpUwqkYbCHp-GAqL4H1ymbMz7zPKAG61V9BtKTSuez39yhawOu7l-
6ww4thP41Ka9PVcknTQ6fPjPXKYSyxEmANps9zevCPFsXpBZCO7_dms65-ZZuG2wVBd16gFnBZH
q8EY0qih6-9o61wXh7bBvVPVSZ2im7Oj1nx47YgDpbD3X0XdlVhUoGYmBdER9hNmIC2PmmY7VAo
PlYCZc#_-_

从那里,您需要通过Facebook的OAuth端点交换代码以接收访问令牌.然后可以对Facebook API使用访问令牌.

如果你设置response_typetoken你被重定向到如下:

http://example.com/redirect_uri#access_token=CAACYnSxGEhsBAJBg0ohZBhAf7pKEU
sm5ytZAZBzKjISFuRun2ZByZCqEsxrVIgtiO7iIlJZBBbGm6fRPQXItZCX6YgjPknUBsr78tJtv
W6fySULrUo9vdW57ZCMUUIlNaeZAcU8DzUXKmFpgotOyhE3jXYz1c3eu00Aii0AZBsPrtrwjpwQ
mV8VYQNiqKZBIsqOrIwZD&expires_in=4168&state=thestatepassed

您拥有调用Facebook API所需的一切.返回的访问令牌是有效的,但如果您在服务器端执行某些操作,则应该针对Facebook的令牌检查端点进行检查.(真的,在这一点上,只是使用code.我从来没有这样做过,祝你好运.)

如您所述,访问令牌现在包含在URL的哈希片段中.

如果你设置response_typecode token你被重定向到如下:

http://example.com/redirect_uri#code=AQAtzsjPivFPsJ538KFlPuhLaK6pDMlrGDiwmi
KDcpgNfWrO1EdX5i6zK_Op2D0QDEXZLyifXxh4TSeBZCWhnkl7YV1LMyEkbPURAWSoqRoeG7tfM
4nB4nDAHOK0H9umb0KnoypRT1pP05FJKhl2QjpCJrPPFDHl6y-1X9ZMj1uVHtmPNi4tG_6QAbuL
RaGadBkekb22uJ0iwSrWc9OKi6ET70lCTYb18hbwUkzHXtTq12nNEdsDJ7Ku2wEBwMygFwErYDX
CrnPoFoah_z0UPCfv3XZLy98Dhlzw_lnx8nnCB-PCppOWRqmydvQJehPd86k&access_token=C
AACYnSxGEhsBALXHRQwfm4UoauRlZBJDVpZCiM6ZCuM3bE965F5JVBfBB8inTFdhfJ5obnonSqa
m3v8FbWhHXrhRSx4ugwAmmDaWyxmPELWqSrkrDO5ueTUXhhjiEZBTd7HjCVCSOXXhOSo3DjEVSC
lOaZBfqmXsprYyc6LJC39sroCcHYCZCv&expires_in=5183426&state=thestatepassed

现在你有一个访问令牌一个代码(到期适用于令牌,而不是代码).如前所述,该代码可以通常的方式交换访问令牌,但返回的访问令牌将与您刚嵌入URI中的访问令牌不同.

但是,同样,你关心的是哈希片段.


请参阅$ location上AngularJS doc以访问哈希.比我更了解的人可以谈谈如何使用路线以及如何最好地削减参数.