Dialogflow 身份验证的 actions-on-google 中用户身份的可靠性
Relialibility of user identity in actions-on-google for Dialogflow authentification
我目前正在 https://passportjs.org 上为 Dialogflow 制定策略。
据我了解,Dialogflow 不会对用户进行身份验证。所以我正在考虑制定一个策略(对于 passportjs)以不同的方式识别每个平台的用户(对每个平台分析 originalRequest
不同)。
例如,Telegram originalRequest
有这个字段:
originalRequest.data.message.from.id
电报说这个字段是:
"Unique identifier for this user or bot"
所以我认为使用它进行身份验证并识别我的网络钩子实现的用户的每个意图是安全的。
我想知道关于 google 身份验证的操作,我找到了字段 originalRequest.data.user.userId
。
"Users can reset this identifier, so don't store important user data keyed off this identifier, because once it's reset, that information is no longer accessible by the user."
所以不信任 userId 的唯一原因是因为它可以重置?在文档的末尾,它说:
User ID lifetime - User IDs are reset automatically after 30 days of inactivity or if users unlink their accounts on the device.
并且:
"If a registered user's voice isn't recognized by the device or no registered voice exists, then a different ID is used that is unique for just that conversation."
如何区分用户?有些ID可以回收吗?
区分用户的最佳方法是使用 userId
字段,正如您所确定的那样。在 AoG 平台上,userId
的使用有点像可以使用网络 cookie - 如果您再次看到它,您可以确信这是上次使用它的同一用户。但是如果你看到一个新的,你必须假设你以前从未见过这个用户,即使这意味着他们删除了 cookie。
需要说明的是 - 大多数时候,UserId 将保持不变,您可以预期返回的用户具有相同的 ID。只有三种情况不是这样:
- 他们已重置此操作的 ID。所以他们特意选择了重新开始。
- 他们有 30 天没有使用该操作,在这种情况下,在大多数情况下将他们视为全新用户是有意义的。
- 他们未被识别为该设备的普通用户,因此他们被匿名对待。 (这相当于您在网站上看到的笨拙 "Do not remember me on this machine" 设置,它强制使用会话 cookie 而不是持久性 cookie。)
文档中的措辞很差 - 我认为这是为了提醒开发人员用户最终负责他们的隐私。 Google 两者都迫使你做同样的事情并采取这样做的政策。
ID 不会被回收。事实上,它们甚至不会在不同的 Action 之间重复使用,即使对于同一个 Google 助理帐户也是如此。
总结:如果您看到相同的 UserId,您可以相信它是您之前看到的同一用户。如果您看到一个新用户,请假设他们是新用户。
如果您想要一种更可靠的方式来识别用户,您可以考虑使用帐户链接,它可以让您控制识别令牌。但这会产生显着的额外开销。
使用其他身份验证方法时要小心 - Google 限制了允许您将它们用作操作的一部分的方式,并在某些情况下明确禁止它们。有关详细信息,请参阅 General Policies。
我目前正在 https://passportjs.org 上为 Dialogflow 制定策略。
据我了解,Dialogflow 不会对用户进行身份验证。所以我正在考虑制定一个策略(对于 passportjs)以不同的方式识别每个平台的用户(对每个平台分析 originalRequest
不同)。
例如,Telegram originalRequest
有这个字段:
originalRequest.data.message.from.id
电报说这个字段是:
"Unique identifier for this user or bot"
所以我认为使用它进行身份验证并识别我的网络钩子实现的用户的每个意图是安全的。
我想知道关于 google 身份验证的操作,我找到了字段 originalRequest.data.user.userId
。
"Users can reset this identifier, so don't store important user data keyed off this identifier, because once it's reset, that information is no longer accessible by the user."
所以不信任 userId 的唯一原因是因为它可以重置?在文档的末尾,它说:
User ID lifetime - User IDs are reset automatically after 30 days of inactivity or if users unlink their accounts on the device.
并且:
"If a registered user's voice isn't recognized by the device or no registered voice exists, then a different ID is used that is unique for just that conversation."
如何区分用户?有些ID可以回收吗?
区分用户的最佳方法是使用 userId
字段,正如您所确定的那样。在 AoG 平台上,userId
的使用有点像可以使用网络 cookie - 如果您再次看到它,您可以确信这是上次使用它的同一用户。但是如果你看到一个新的,你必须假设你以前从未见过这个用户,即使这意味着他们删除了 cookie。
需要说明的是 - 大多数时候,UserId 将保持不变,您可以预期返回的用户具有相同的 ID。只有三种情况不是这样:
- 他们已重置此操作的 ID。所以他们特意选择了重新开始。
- 他们有 30 天没有使用该操作,在这种情况下,在大多数情况下将他们视为全新用户是有意义的。
- 他们未被识别为该设备的普通用户,因此他们被匿名对待。 (这相当于您在网站上看到的笨拙 "Do not remember me on this machine" 设置,它强制使用会话 cookie 而不是持久性 cookie。)
文档中的措辞很差 - 我认为这是为了提醒开发人员用户最终负责他们的隐私。 Google 两者都迫使你做同样的事情并采取这样做的政策。
ID 不会被回收。事实上,它们甚至不会在不同的 Action 之间重复使用,即使对于同一个 Google 助理帐户也是如此。
总结:如果您看到相同的 UserId,您可以相信它是您之前看到的同一用户。如果您看到一个新用户,请假设他们是新用户。
如果您想要一种更可靠的方式来识别用户,您可以考虑使用帐户链接,它可以让您控制识别令牌。但这会产生显着的额外开销。
使用其他身份验证方法时要小心 - Google 限制了允许您将它们用作操作的一部分的方式,并在某些情况下明确禁止它们。有关详细信息,请参阅 General Policies。