如何禁用谷歌云端点用户身份验证?

时间:2015-03-21 15:46:00

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

我正在使用我的自定义身份验证流程(使用脸谱验证),并希望完全禁用Google Cloud Endpoints提供的身份验证。

当我使用HTTP Authorization标头(Bearer)设置它时,它会自动调用一些框架方法,它会在日志中显示以下条目 -

D 2015-03-21 20:41:22.622 Checking for id_token. D 2015-03-21 20:41:22.622 id_token verification failed: Token is not an id_token (Wrong number of segments) D 2015-03-21 20:41:22.623 Checking for oauth token. D 2015-03-21 20:41:22.627 Oauth framework user didn't match oauth token user.

我认为它每次调用google apis并检查oauth令牌。

我尝试设置auth_level=endpoints.AUTH_LEVEL.REQUIRED,但警告仍在那里。

最后,我通过源代码对此进行了调试,并将env变量ENDPOINTS_USE_OAUTH_SCOPE设置为某个随机值,以防止它使用google api进行检查。

有没有更好的方法来解决这个问题?

[编辑]这适用于AppEngine Python。

1 个答案:

答案 0 :(得分:1)

根据@tomrozb的要求,这是我们今天使用的一个非常简单的实现。真的不是很多。

首先,我们的AngularJS前端将标头令牌附加到每个请求,此标记在登录(非经过身份验证的端点)上获取并存储在本地(非常类似于cookie)。确保使用HTTPS!

在我的端点上,我只需使用req.getHeader("Authorization");检查该令牌,并检查该令牌是否符合我当前的"会话"并抛出UnauthorizedException("Not logged in")例外。请记住,如果请求,将自动注入原始HTTPServletRequest,以便您可以执行以下操作:

@ApiMethod(name="createWhatever", path="createWhatever")
public Whatever createWhatever(CreateWhateverRequest data, HttpServletRequest req) throws UnauthorizedException{

Long userId = getUserId(req.getHeader("Authorization"));
    if(userId == null){
            throw new UnauthorizedException("Not logged in");
        }
//do your thing
}

这基本上就是内置功能所做的,它注入了一个"用户"您的请求上的对象,并要求您检查其是否为null并采取相应的行动,我只针对自定义实体而不是OAuth的任何GAE凭据存储。