Facebook登录:有没有办法在重定向中接收URL片段作为querystring参数?

Facebook登录:有没有办法在重定向中接收URL片段作为querystring参数?,facebook,facebook-login,Facebook,Facebook Login,因此,在使用Facebook登录时,如果您将response\u type设置为token或code%20token,则会在重定向到应用程序的URL上显示“响应数据作为URL片段包含”。说真的,为什么?什么时候这对任何人都有用 不管怎么说,我希望这是某种安全相关的,它存在的原因不是为了骚扰人们,但我想知道是否有办法禁用它,因为我使用Angular,用Hashbang处理URL真的很痛苦 如果我只设置了code的response\u type,那么代码将作为一个简洁的查询参数返回,但我希望同时接收

因此,在使用Facebook登录时,如果您将
response\u type
设置为
token
code%20token
,则会在重定向到应用程序的URL上显示“响应数据作为URL片段包含”。说真的,为什么?什么时候这对任何人都有用

不管怎么说,我希望这是某种安全相关的,它存在的原因不是为了骚扰人们,但我想知道是否有办法禁用它,因为我使用Angular,用Hashbang处理URL真的很痛苦

如果我只设置了
code
response\u type
,那么代码将作为一个简洁的查询参数返回,但我希望同时接收这两个参数,以便执行其他验证。有没有办法改变这种行为?谢谢

编辑: 事实证明,设置
code
response\u type
会在url的末尾返回#/=,因此无法获得干净的查询字符串。已经确定没有办法改变这种行为,但我仍然有兴趣找出Facebook为什么这么做。它与安全相关吗?这些url片段的用途是什么?

答案 对于第一个问题,我想当您在浏览器中处理所有内容而不是在服务器上处理时,您会使用
令牌

至于你的主要问题,据我所知,你不能改变Facebook重定向成功授权的方式。Facebook不会将令牌作为干净的查询参数提供给您。如果使用
token
code-token
,您需要的将是散列片段。对不起


注意:这对您来说可能不是问题。我不确定“附加验证”需要什么,但当您使用
代码令牌
时,交换生成的代码会得到一个不同的令牌,而不是刚刚嵌入到URI中的令牌。两者现在都有效,将分别过期。实际上,您可能需要代码或令牌;两者都不会帮助你,因为它们没有关联


使用所有三种方法的示例: 如果您将
response\u type
设置为
code
,您将被重定向到如下位置:
http://example.com/redirect_uri?状态=通过的状态和代码=AQDN9E9GYjA8NbyCt
87_JV5VHNCQYLNXMBSO6Z1BSRR7LMTPOM6WJRZFAN6P4GBLDT3EQRFPG0XSLOMLXBBFSCSYFSY
JNM2Vu9ooqexxsjctuu fMpUwqkYbCHp-gaql4h1ymbmz7zpkag61v9btktsuez39yhawu7l-
6WW4THP41KA9PVCKNTQ6FPJPXKYSYXEMANPS9ZEVCPFSXPZCO7_dms65-ZZuG2wVBd16gFnBZH
q8EY0qih6-9O61WXH7BVVPVSZ2IM7OJ1NX47YGDPBD30xDLVHUOGYMBER9HNMIC2PMY7VAO
PlYCZc#_-_

从那里,您需要接收一个访问令牌。然后可以针对Facebook API使用访问令牌

如果将
response\u type
设置为
token
,则会被重定向到类似以下内容:
http://example.com/redirect_uri#访问\u令牌=CAACYnSxGEhsBAJBg0ohZBhAf7pKEU
SM5YTZBZKJISFURUN2ZBYZCQESXRVIGTIO7IILJZBBGM6FRPQXITZC6YGJPKNUBSR78TJTV
W6fySULrUo9vdW57ZCMUUIlNaeZAcU8DzUXKmFpgotOyhE3jXYz1c3eu00Aii0AZBsPrtrwjpwQ
mV8VYQNiqKZBIsqOrIwZD和在=4168和状态下到期

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

正如您所注意到的,访问令牌现在包含在url的哈希片段中

如果您将
response\u type
设置为
code-token
,您将被重定向到如下位置:
http://example.com/redirect_uri#代码=AQAtzsjPivFPsJ538KFlPuhLaK6pDMlrGDiwmi
KDcpgNfWrO1EdX5i6zK_OP2D0QDEXZLYIFXH4TSEBZCHWHNKLYV1LMyEKpurawSoqroeg7TFM
4nB4nDAHOK0H9umb0KnoypRT1pP05FJKhl2QjpCJrPPFDHl6y-1X9ZMJ1UvHTMLPNI4TG\u 6QAbuL
RAGADBKEKB22UJ0IWSRWC9OKI6ET70LCTYB18HBWUKZHXTTQ12NNEDDJ7KU2WebWMYGFERYDX
CrnPoFoah_z0UPCfv3XZLy98Dhlzw_lnx8nnCB-PCppOWRqmydvQJehPd86k&访问令牌=C
AACYnSxGEhsBALXHRQwfm4UoauRlZBJDVpZCiM6ZCuM3bE965F5JVBfBB8inTFdhfJ5obnonSqa
M3V8FBWHHXRSx4UGWAMMDAWYXMPELWQSRKRDO5UETUXHJIEZBTD7HJCVCSOXHOSO3DJEVSC
lOaZBfqmXsprYyc6LJC39sroCcHYCZCv&=5183426&状态下到期=通过的状态

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

但是,同样,您关心的是散列片段



有关访问散列的详细信息,请参阅。有一个比我更通晓的人可以告诉我这是如何处理路由的,以及如何最好地获取参数。

今天我遇到了同样的情况,并设法解决了这个问题,我可以从我的服务器获得访问令牌

使用
response\u type=code
获取代码后,我通过
GET
调用了以下url:
https://graph.facebook.com/v3.2/oauth/access_token?app_id=MY_APP_ID&code=MY_CODE&client_id=MY_APP_ID&client_secret=MY_APP_SECRET&redirect_uri=YOUR_LOGIN_REDIRECT_URI

此路由返回一个JSON响应,该响应具有
access\u token
参数,如下所示:

{
   "access_token": "ABAECAEFAEFAEA...",
   "type": "bearer",
   "expires_in": 838383838
}

好了:)我希望这也适用于您

通过附加验证,我的意思是,我将代码交换为访问令牌,并且还使用检查端点检查其他访问令牌。这可能并没有真正让它更安全,但至少给潜在的黑客增加了一层麻烦。我是圣