Security 如何在OneSignal中安全地设置ExternalUserId()?

Security 如何在OneSignal中安全地设置ExternalUserId()?,security,push-notification,onesignal,web-push,Security,Push Notification,Onesignal,Web Push,我正在我的网站上设置OneSignal 就我所见,有两种方法可以将推送订阅与我的用户ID关联: 我可以调用OneSignal.getUserId(),它返回一个UUID,并对我的web服务器进行身份验证调用,将此UUID与我在服务器上登录的用户关联 我可以调用setExternalUserId()发送登录的用户ID,并将其与OneSignal服务器上的订阅相关联 第一个选项是完全安全的,因为只有劫持我的客户端代码才能发送无效的订阅ID(或他们创建的另一个有效订阅ID),这不是什么大问题 不过

我正在我的网站上设置OneSignal

就我所见,有两种方法可以将推送订阅与我的用户ID关联:

  • 我可以调用
    OneSignal.getUserId()
    ,它返回一个UUID,并对我的web服务器进行身份验证调用,将此UUID与我在服务器上登录的用户关联
  • 我可以调用
    setExternalUserId()
    发送登录的用户ID,并将其与OneSignal服务器上的订阅相关联
第一个选项是完全安全的,因为只有劫持我的客户端代码才能发送无效的订阅ID(或他们创建的另一个有效订阅ID),这不是什么大问题

不过,第二种选择感觉完全不安全:任何人都可以劫持客户端代码来发送任何有效的用户ID并将其与其订阅关联,从而代表另一个用户接收通知

是否有一种方法可以安全地使用
setExternalUserId()
,同时防止用户将其订阅与其他用户关联?

我能想到的唯一安全场景是,如果我的用户也有UUID,而不是顺序ID,并且这些UUID是保密的(即从未在网站上公开)

我能想到的任何其他场景听起来都很不安全


我遗漏了什么吗?

我认为您的推理是正确的,确保
setExternalUserId()
安全的唯一选择是使用长随机标记。然而,我认为更好的选择是使用加密签名来设置用户ID:我是Pushpad的创始人,事实上,对于我们的服务,我们总是需要签名来设置用户ID。默认情况下,我们的方法是安全的,您可以使用实际的用户ID(而不是长的随机令牌)您可以通过撤销/替换一个主密钥(而不是数百万个用户ID)轻松地使所有签名无效。这是真的,pushpad做得很好。不过,如果你只有40个用户,你就必须每月支付10美元。。。。因此,我认为在这种情况下,如果用户少于5000,Onesignal值得冒险。