Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 云端点的用户授权_Java_Google App Engine_Google Cloud Endpoints - Fatal编程技术网

Java 云端点的用户授权

Java 云端点的用户授权,java,google-app-engine,google-cloud-endpoints,Java,Google App Engine,Google Cloud Endpoints,我正在云端点后端工作,希望将某些操作限制为管理员用户 我当前的代码是这样工作的: @ApiMethod(httpMethod = "PATCH", name = "item.update", path = "items") public Item update(Item newObject, User user) throws UnauthorizedException, OAuthRequestException { OAuthService oAuthService

我正在云端点后端工作,希望将某些操作限制为管理员用户

我当前的代码是这样工作的:

@ApiMethod(httpMethod = "PATCH", name = "item.update", path = "items")
public Item update(Item newObject, User user)
        throws UnauthorizedException, OAuthRequestException {
    OAuthService oAuthService = OAuthServiceFactory.getOAuthService();
    if (!oAuthService.isUserAdmin()) {
        throw new UnauthorizedException("Only admin users can modify content.");
    }
    ...
}
我知道AppEngine有一个用户角色的概念,但我很好奇端点 做我尝试过使用OAuthService.isUserAdmin()调用,但没有成功 看起来情况很好,医生们有一句古老的警告语

注意:您不应将端点auth与的auth混淆 非端点配置设置文章中描述的应用程序引擎web应用程序 在管理中 控制台,您还可以在控制台中指定用户登录要求 web.xml 文件该方法不适用于端点。”


我是否必须自己创建某种授权,使用传递到更新方法中的用户对象?有什么想法吗?

我也有类似的问题。事实上,OAuth用户服务与AppEngine用户服务无关。我最终做的是在我的数据存储中有一个专用的用户类型实体,在那里我存储了一个特定的标志(常规/管理员)。此标志在我使用AppEngine用户服务时更新(即,使我在控制台中指定的管理员获得正确的管理员标志)

在我的endpoints API中,我获取当前用户authDomain和id,在我的数据存储中查找以检查它是否具有admin标志。我的用户实体的密钥由“authDomain:userId”组成,由于我目前只支持google用户,它看起来像(gmail.com:123456789)


这意味着管理员必须使用AppEngine用户服务登录一次(在我的情况下是一个专用网页)为了正确地更新标志

我需要做同样的事情,并验证一些端点,以便仅向项目控制台中列出的管理员成员授予访问权限,并使用上面介绍的相同实现,但oAuthService.isUserAdmin()接受一个或多个字符串参数,这些参数是您指定的范围,Oauth用来获取用户信息,在我的例子中,我只是设置了这个参数,它的工作原理与下面的代码类似

OAuthService authService = OAuthServiceFactory.getOAuthService();
User user;
try {
  com.google.appengine.api.users.User currentUser =
      authService.getCurrentUser(Constants.EMAIL_SCOPE);
  if (currentUser != null && authService.isUserAdmin(Constants.EMAIL_SCOPE)) {
    user = new User(currentUser.getEmail());
    return user;
  }
...
EMAIL_作用域常量由

public static final String EMAIL_SCOPE = "https://www.googleapis.com/auth/userinfo.email";
在我的例子中,我实现了一个验证器,仅当它是管理员用户时才将用户信息传递给端点,如果需要,您可以阅读有关验证器的更多信息。

那太好了。我利用你的建议完成了我所需要的。我创建了一个JSON servlet,它在
web.xml
中对管理员角色进行访问控制,允许我设置或删除应用程序用户帐户中的管理员标志。这样我只需使用我的应用程序引擎管理员帐户登录,然后设置一个用户帐户(我的)作为管理员,我喜欢我不必硬编码任何东西或手动触摸数据来启动这个。