我正在使用AppEngine Cloud Endpoints与Javascript客户端和Google+登录,我正在使用endpoints.get_current_user()
。有没有办法检查用户是否是AppEngine管理员?与用户API中的users.is_current_user_admin()
类似。
由于
答案 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()
除了几纳秒之外,不会产生任何网络/速度开销 从Pythondict
中查找值。
因此,如果您只使用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(...)