为什么网络安全字符串用于访问 google 端点框架中的数据?

Why websafe string are used to access Data in google endpoints framework?

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

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

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

因此,要访问配置文件数据,可以形成一个端点“/profile/{id}”

此外,此 ID 可用于使用 Key.create(Profile.class,id); 制作密钥此方法 returns 类型 Key<Profile> 的实例。它的方法之一 key.getString() returns 表示该配置文件对象的网络安全字符串。

传授的惯例是使用 websafestring 通过 web 访问和共享 Object 的数据。

我想了解 websafestring 如何在网络上安全以及使用通常使用的 URL 类型“/profile/{id}”的缺点是什么

我想这里考虑的是安全性,但实际上并没有太大区别,因为本例中的网络安全密钥字符串是 base64 编码但未混淆,因此很容易获得数字 ID。如果您想对用户隐藏数据库 ID,您还需要加密密钥。

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

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