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

标签 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它说:

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

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

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

最佳答案

您应该能够检索用户的身份验证 token 并验证其客户端 ID 是否是 API Explorer 客户端 ID。客户端 ID 位于 com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID 中。身份验证 token 将通过 Authorization header 或 access_tokenbearer_token 查询参数传递。通过向 API 方法添加 HttpServletRequest 参数,可以访问 header 或查询参数。

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

GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(
    Client.getInstance().getHttpTransport(),
    Client.getInstance().getJsonFactory()).build();
GoogleIdToken token = verifier.verify(stringToken);
String clientId = token.getPayload().getAuthorizedParty();

关于java - 将 Cloud Endpoints API Explorer 锁定到特定 Gmail 帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32054997/

相关文章:

python - GAE 上的 Django - 如何在部署时自动显示 'migrate'?

python - 无法导入 gsutil

java - 如何在JSF中使用 session 实现多用户登录

java - Android 版本 4.3 中的异常 android java.util.Objects

java - java中的放大和缩小?

java - 在 Swing Java 中向 JList 添加元素

java - 我需要有关获取发布和调试证书指纹的帮助

java - Android游戏java boolean 解决方案

java - GAE+JDO+JAVA+CRUD

authentication - 使用 Windows Live 提供程序实现低代码、简单的 Azure 网站安全?