限制访问Google App引擎端点方法

时间:2014-04-11 19:12:36

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

我对Google App Engine端点的安全性有疑问。我在数据存储区中有一个数据,我上传的数据应该只能从Android应用程序中读取。

我检索所有这样的数据:

Personendpoint.Builder endpointBuilder = new Personendpoint.Builder(
                AndroidHttp.newCompatibleTransport(), new JacksonFactory(), null);
        endpointBuilder = CloudEndpointUtils.updateBuilder(endpointBuilder);
        CollectionResponsePerson result;

        Personendpoint endpoint = endpointBuilder.build();


        try {
            result = endpoint.listPerson().execute();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            result = null;
        }

在我的PersonEndpoint中,我有这个:

@Api(name = "personendpoint", namespace = @ApiNamespace(ownerDomain = "test.com", ownerName = "test.com", packagePath = "personmanagement"))
public class PersonEndpoint {

    /**
     * This method lists all the entities inserted in datastore.
     * It uses HTTP GET method and paging support.
     *
     * @return A CollectionResponse class containing the list of all entities
     * persisted and a cursor to the next page.
     */
    @SuppressWarnings({ "unchecked", "unused" })
    @ApiMethod(name = "listPerson")
    public CollectionResponse<Person> listPerson(@Nullable @Named("cursor") String cursorString,
            @Nullable @Named("limit") Integer limit) 
    {
     ...
    }

与此类似,还有方法insertPersonremovePerson在这种情况下是危险的。攻击者可以轻松触发这些方法并从我的数据存储中删除数据。如何保护?

我想只允许用户从数据存储中获取数据。谢谢。

2 个答案:

答案 0 :(得分:1)

我建议您保护端点with authentication using OAuth。除此之外,您有责任检查经过身份验证的用户的角色和权限,并过滤他将管理的数据作为任何其他Web应用程序。

答案 1 :(得分:0)

您可以在web.xml中轻松实施安全约束。

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

这将强制用户通过其Google帐户进行身份验证,以访问该网址:<role-name>*</role-name>。如果您只希望应用管理员能够访问该URL(您可以在云控制台中添加管理员),则可以使用<role-name>admin</role-name>

请参阅文档:https://developers.google.com/appengine/docs/java/config/webxml?hl=fr#Security_and_Authentication