有没有办法检查用户是否是AppEngine Cloud Endpoints中的管理员

时间:2013-05-25 19:08:00

标签: google-app-engine google-cloud-endpoints

我正在使用AppEngine Cloud Endpoints与Javascript客户端和Google+登录,我正在使用endpoints.get_current_user()。有没有办法检查用户是否是AppEngine管理员?与用户API中的users.is_current_user_admin()类似。

由于

1 个答案:

答案 0 :(得分:6)

有关执行身份验证时ID令牌和承载令牌之间差异的详细说明,请参阅Google Endpoints API + Chrome Extension returns None for endpoints.get_current_user().user_id()

如果您没有使用Android应用程序,您可以自由使用Bearer令牌,而不必担心ID令牌的某些限制。

接下来get_current_user()oauth库提供oauth.is_current_user_admin()方法。正好为get_current_user()this method calls _maybe_call_get_oauth_user,然后检查一个简单的环境变量。

如其他答案所述:

  

oauth.get_current_user()来电只是昂贵的 IF   RPC。 _maybe_call_get_oauth_user方法存储来自的值   最后一次通话,所以第二次打电话给oauth.get_current_user()   除了几纳秒之外,不会产生任何网络/速度开销   从Python dict中查找值。

因此,如果您只使用Bearer令牌,则可以执行以下操作

from google.appengine.api import oauth
from google.appengine.ext import endpoints

...

endpoints_user = endpoints.get_current_user()
if endpoints_user is None:
    raise endpoints.UnauthorizedException(...)

is_admin = oauth.is_current_user_admin(known_scope)
if not is_admin:
    # Throw a 403 FORBIDDEN
    raise endpoints.ForbiddenException(...)