我在 App Engine 上部署了一个 Endpoints API。我使用 Google API Explorer 向不需要登录的 API 方法发出请求没有问题。我使用的 URL 是:
https://developers.google.com/apis-explorer/?base=https://[MY_APP_ID].appspot.com/_ah/api
我被卡住的地方是调用需要用户登录的 API 方法,例如这个:
@ApiMethod(name = "config.get",
clientIds = {"[MY_CLIENT_ID].apps.googleusercontent.com", "com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID"},
audiences = {"[MY_APP_ID].appspot.com"},
scopes = {"https://www.googleapis.com/auth/userinfo.email"})
public Config getConfig(User user) throws OAuthRequestException {
log.fine("user: " + user);
if (user == null) {
throw new OAuthRequestException("You must be logged in in order to get config.");
}
if (!userService.isUserAdmin()) {
throw new OAuthRequestException("You must be an App Engine admin in order to get config.");
}
...
在 API Explorer 右上角有一个开关,单击该开关后,我可以指定范围和授权。我只检查了 userinfo.email 范围。没有什么不同的。我从电话中得到的回应是:
503 Service Unavailable
- Show headers -
{
"error": {
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "java.lang.IllegalStateException: The current user is not logged in."
}
],
"code": 503,
"message": "java.lang.IllegalStateException: The current user is not logged in."
}
}
回到 Endpoints 处于 Trusted Tester 阶段时,我记得在 OAuth2 Playground 中有一个手动步骤来获取 ID 令牌而不是访问令牌或类似的东西。如果仍然需要这样做,那么现在 Endpoints 文档中似乎已经消失了任何提及,我现在也看到了在 API Explorer 中交换令牌的方法。