为什么使用websafe字符串来访问Google端点框架中的数据?

时间:2018-01-05 17:20:46

标签: java google-app-engine google-cloud-datastore google-cloud-endpoints objectify

我在谷歌端点框架(Java)上做了udacity课程ud859。为了访问云数据存储区中的数据,我使用了Objectify。实体类按以下方式定义

@Entity
public class Profile{
@Id
Long id;
}

这个" id" attribute用于唯一标识每个配置文件,并使用ObjectifyFactory实例以随机方式分配。

因此,要访问个人资料数据,可以形成一个端点" / profile / {id}"

此id也可用于使用Key.create(Profile.class,id);创建密钥。此方法返回类型为Key<Profile>的实例。其方法key.getString()之一返回表示该配置文件对象的websafestring。

所教授的惯例是使用websafestring访问和共享Web上的Object数据。

我想了解websafestring对web的安全性如何以及使用常用URL类型的缺点是什么&#34; / profile / {id}&#34;

2 个答案:

答案 0 :(得分:1)

websafe字符串对Key的整个祖先进行编码,这是查找实体所必需的。一个简单的用例可以将ID定义为Key(MyKind, 1234L)。现在,如果您的实体定义了父MyParentKind,那么它的完整密钥可能更像Key(MyKind, 1234L, MyParentKind, 5678L)。在祖先案例中查找既需要实体的ID,也需要所有祖先的种类+ id对。 websafe密钥将所有这些信息编码为单个字符串。

参考:https://cloud.google.com/appengine/docs/standard/java/datastore/creating-entity-keys#Java_Ancestor_paths

答案 1 :(得分:0)

我想在这里考虑安全性,但实际上并没有多大区别,因为在这种情况下,websafe密钥字符串是base64编码但没有混淆,因此很容易获得数字ID。如果要隐藏用户的数据库ID,则还需要加密密钥。