将Cloud Endpoints API Explorer锁定到特定的Gmail帐户

时间:2015-08-17 16:10:14

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

如何锁定Cloud Endpoints中的API Explorer,使其仅适用于特定的Gmail帐户(例如您的console.developers.google.com电子邮件)?

有人告诉我,我可以在我的Cloud Endpoints项目的web.xml文件中使用安全约束,如下所示:

<security-constraint>
        <web-resource-collection>
           <web-resource-name>admin</web-resource-name>
            <url-pattern>/admin/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

但在Using Auth with Endpoints docs中它说:

&#34;您必须按照此页面上提供的说明指定端点身份验证。请注意,您无法按照Security and Authentication下提供的说明设置用户登录要求来配置web.xml文件,因为这会导致部署失败。&#34;

所以你不能这样做......

任何人都知道如何在API Explorer中将Oauth2身份验证限制为特定的Gmail帐户?因为是默认的,您可以使用任何 gmail帐户登录,这将使您对Oauth2进行身份验证,然后您可以执行任何使用Oauth2与com.google.appengine.api.users.User用户的API方法参数在他们的方法中。

3 个答案:

答案 0 :(得分:1)

您应该能够检索用户的身份验证令牌并验证其客户端ID是否是API Explorer客户端ID。客户端ID位于Authorization。身份验证令牌将通过access_token标头或bearer_tokenHttpServletRequest查询参数传递。可以通过向API方法添加GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder( Client.getInstance().getHttpTransport(), Client.getInstance().getJsonFactory()).build(); GoogleIdToken token = verifier.verify(stringToken); String clientId = token.getPayload().getAuthorizedParty(); 参数来访问标头或查询参数。

要验证ID令牌,您需要使用Google的API客户端库:

{{1}}

答案 1 :(得分:1)

有关限制谁可以通过API Explorer执行API的方法,请参阅Cloud Endpoints: Control who can execute API through API Explorer

答案 2 :(得分:0)

如果你真的想停止阻止它,除了一封电子邮件,使用&#34;用户API&#34;将允许您在代码中获取经过身份验证的用户的电子邮件。

之后,检查电子邮件是否是您授权的唯一电子邮件,这将完全阻止其他人。