从Google App Engine调用API

时间:2013-11-25 14:25:41

标签: google-app-engine jsp oauth

我正在尝试从JSP中的GAE应用程序中调用Directory APIs。该应用程序已在AppSpot上运行。我想检索用户所属的所有组织单位。不幸的是,我在提出请求时收到404代码,我不明白为什么。

    ArrayList<String> scopes = new ArrayList<String>();
    scopes.add("https://www.googleapis.com/auth/admin.directory.user");
    AppIdentityService appIdentity = AppIdentityServiceFactory.getAppIdentityService();
    AppIdentityService.GetAccessTokenResult accessToken = appIdentity.getAccessToken(scopes);

    URL url = new URL("https://www.googleapis.com/admin/directory/v1/users/myuser@mygoogleappsdomain.com");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestMethod("POST");
    connection.addRequestProperty("Content-Type", "application/json");
    connection.addRequestProperty("Authorization", "OAuth " + accessToken.getAccessToken());

    if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
        out.print("OK");
    }
    else {
        out.print(connection.getResponseCode());
    }

您可以想象此代码段打印404.基本上我正在关注GAE文档中提供的example。我究竟做错了什么?谢谢。

编辑:如果我只是拨打以下网址之一,我会收到403状态代码。我的OAuth身份验证有什么问题吗?

https://www.googleapis.com/admin/directory/v1/users?domain=mydomain https://www.googleapis.com/admin/directory/v1/users

1 个答案:

答案 0 :(得分:1)

您的代码仅提供应用标识。您还需要获得用户的授权才能访问其目录信息。

如果您按照提供的链接进行操作,请指出:All requests to the Directory API must be authorized by an authenticated user

因此,您需要通过OAuth 2身份验证+授权程序向您的用户发送,您将要求他们进行目录API访问。如果您只需要对用户列表进行只读访问,那么您需要申请https://www.googleapis.com/auth/admin.directory.user.readonly范围。