java - Facebook OAuth 异常 : redirect_uri missing

标签 java facebook playframework-2.0 oauth-2.0

我是JAVA新手,正在使用play框架创建一个网站。 我正在尝试将 Facebook oauth 集成到我的网站中。我的代码是:

// This function is called to populate _facebook, _facebookAuthParams and
// _facebookTokenParams. The first two are HashMaps and _facebookTokenParams is 
// ObjectNode
private static void _initFacebook() {

    String _url = "shutterdeck.com:8080";

    _facebook.put("authUrl", "https://graph.facebook.com/oauth/authorize");
    _facebook.put("tokenUrl", "https://graph.facebook.com/oauth/access_token");
    _facebookAuthParams.put("scope", "email");
    _facebookAuthParams.put("responseType", "code");
    _facebookAuthParams.put("redirect_uri", _url + "/oauth/facebookRedirect");
    _facebookAuthParams.put("client_id", "..");
    _facebookTokenParams.put("grant_type", "authorization_code");
    _facebookTokenParams.put("redirect_uri", _url + "/oauth/facebookRedirect");
    _facebookTokenParams.put("scope", "email");
    _facebookTokenParams.put("client_id", "...");
    _facebookTokenParams.put("client_secret", "...");
}

下面的函数尝试从 facebook 获取 access_token:

public static Result facebookRedirect() {
    Map<String, String[]> query = request().queryString();
    if (query.containsKey("code")) {
        String[] value = query.get("code");
        String code = value[0];
        if (value.length > 1 || code.isEmpty())
            return redirect("/");

        String tokenUrl = _getTokenUrl(_facebook);
        _facebookTokenParams.put("code", code);
        Promise<WS.Response> promise = WS.url(tokenUrl).post(_facebookTokenParams);
        Function<WS.Response, Result> f = new Function<WS.Response, Result>() {
            public Result apply(WS.Response response) {
                    System.out.println(response.asJson()); // This prints an error json from face book
                    String token = response.asJson().get("token").asText();
                    _getFacebookUserInfo(token);
                    return ok("/");
            }
        };
        return async(promise.map(f));
    }
    return ok("404");
}

我从 Facebook 收到的错误是:

{"error":{"message":"Missing redirect_uri parameter.","type":"OAuthException","code":191}}

我验证了redirect_url存在于传递给post_facebookTokenParams中。我在这里可能缺少什么?此外,我如何查看发送到 Facebook 的 POST 请求

最佳答案

出于某种原因,Facebook Graph API 端点希望我们将 URL 中的 client_id、client_secret 和 grant_type 参数作为 url 编码参数传递。这意味着 grant_type 上没有空格——凭证之间只有一个逗号!

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

相关文章:

java - 带有包含复选框的自定义适配器的 ListView

javascript - 如何让 Facebook Like Box "Dark Scheme"正常工作? (背景是透明的。)

javascript - Facebook 页面的 'like' 按钮,但带有回调

java - 如何将 Scala FilePart[TemporaryFile]) 作为 Java 文件发送?

scala - Intellij Idea 和 Play Framework 中的库导入问题

java - Play : ClassLoader cannot find my class

java - Trayicon mouseEntered 不工作

java - 如何重新创建仅修改文件名的链接 OutputStream

windows - 用于在 Facebook 墙上发布的 SVN Post-commit Hook

java - 如何扫描所有包含空格的多个字符串?