gpt4 book ai didi

java - Facebook OAuth redirect_uri 问题

转载 作者:行者123 更新时间:2023-12-01 11:39:45 39 4
gpt4 key购买 nike

我正在尝试在我们的 Facebook 应用程序中使用 Java 构建身份验证流程。我正在使用 facebook4j 库。

我对应的代码如下-

public String authenticate() throws IOException {
Facebook facebook = new FacebookFactory().getInstance();
String redirectURL = facebook.getOAuthAuthorizationURL("http://localhost:9099/default/facebook/verify.html");
servletResponse.sendRedirect(redirectURL);
return null;
}

public String verify() throws Exception {
String code = servletRequest.getParameter("code");
Facebook facebook = new FacebookFactory().getInstance();
AccessToken accessToken = facebook.getOAuthAccessToken(code);
String token = accessToken.getToken();
servletResponse.getWriter().write(token);
return null;
}

在该行重定向后出现错误 -

AccessToken accessToken = facebook.getOAuthAccessToken(code);

错误如下 -

FacebookException{statusCode=400, errorType='OAuthException', errorMessage='redirect_uri isn't an absolute URI. Check RFC 3986.', errorCode=191, errorSubcode=-1, version=2.2.2}
at facebook4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:179)
at facebook4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65)
at facebook4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:97)
at facebook4j.auth.OAuthAuthorization.getOAuthAccessToken(OAuthAuthorization.java:107)

我在第一次通话中从 Facebook 获得的重定向 URL 是 -

https://www.facebook.com/dialog/oauth?client_id=4161XXXXXX6389&redirect_uri=http%3A%2F%2Flocalhost%3A9099%2Fdefault%2Ffacebook%2Fverify.html&scope=email,public_profile,user_friends

也尝试过不使用编码 -

https://www.facebook.com/dialog/oauth?client_id=4161XXXXXX6389&redirect_uri=http://localhost:9099/default/facebook/verify.html&scope=email,public_profile,user_friends

它正确重定向到“验证”,其网址类似于 -

http://localhost:9099/default/facebook/verify.html?code=AQCE4aaIpE_c94J3NVNjge_YL_OP84vPIgUauvfRRXNCj_FOK8U2kfSxfKGrjWnFL1dqMeM8q22M6UaVbGsTpTQOQmjxYILdFHKFiSFd0Ycf_ByBE9rNX_yxvFnJ3RNLf7bjCT4C1uXuuqCXHZjVNN1lBb3LWUHz7eNkq0r8K14x7ZEVIWjbll-Vqys1FZuCIVDBrI4StoYkZR1rpCsoSqq7VdCIX3zawnw_nbPZBZU7iUeZJiBbahYjWkHIn47b9AQb3hZxxpe4xxXHXfDsP_h2fhC1YYioJbwGq4QbnWpUrP7aF-0Q_wF71zn4txCQLd4#=

facebook4j.properties

oauth.appId=416XXXXXXXXX389
oauth.appSecret=9ed3XXXXXXb6acXXXXXXXXc7acXXXX5
oauth.permissions=email,public_profile,user_friends

我的 Facebook 应用程序基本设置是 -

enter image description here

重要的高级设置是 -

enter image description here

我完全知道类似的问题之前已多次发布。我已经解决了几乎每个问题,并且尝试了几乎所有建议来解决这个问题。但由于某种原因它不起作用。在花了 3 天时间解决同一问题后,我决定在这里发布我的问题。

如果有人指出我到底错在哪里,我将不胜感激。

最佳答案

在将代码交换为 token 时也必须指定 redirect_uri 参数(并且必须与之前在登录对话框调用中指定的相同)。

我假设由于您在第二个方法中使用了new FacebookFactory().getInstance(),所以情况并非如此。看看这里的基本实现,https://github.com/roundrop/facebook4j-oauth-example/tree/master/src/main/java/facebook4j/examples/signin

SignInServlet 中,Facebook 对象实例存储到 session 中,然后在 CallbackServlet 中检索并再次使用同一实例。因此,它仍然保留调用 Auth 对话框时最初使用的 redirect_uri 值,并且在将 code 交换为 token 时将重新使用相同的值。

关于java - Facebook OAuth redirect_uri 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29635659/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com