代码之家  ›  专栏  ›  技术社区  ›  urig

Azure事件中心:如何向Javascript发布者(在浏览器中运行)授予SAS令牌?

  •  0
  • urig  · 技术社区  · 8 年前

    我正在构建一个基于Azure事件中心的网站分析解决方案。我在每个网页中都嵌入了Javascript代码,通过 Azure Event Hubs REST API .

    REST API要求通过SAS令牌对每个调用进行身份验证。我的问题是-我是否必须编写一个服务器端端点,以便在发布者开始发布之前为他们提供临时令牌?

    是否有其他方法?

    1. REST API是否提供了这个“身份验证”端点?(找不到 here )
    2. 或者,如何 糟糕,安全方面 是否将令牌硬编码到客户端代码中?
    3. 技术上可行,但安全性比方案2差得多 ,在客户端代码中硬编码事件中心的共享访问密钥,并使用类似(非官方) Azure ServiceBus JavaScript SDK generate 飞行中的SAS令牌?
    3 回复  |  直到 8 年前
        1
  •  1
  •   Shekhar    8 年前

    Event Hub REST api不提供身份验证端点。您必须在服务器端为每个客户端(浏览器或设备)编写SAS令牌的生成代码(可能是AuthN/Z例程的一部分?)。提到 RedDog.ServiceBus nuget包为每个客户端的Event Hub生成SAS令牌。还有这个 article 在IoT上,解释了使用上述包对事件中心进行身份验证。

    在我看来,我更愿意这样做,并排除#2和#3。它们(2&3)使解决方案容易受到攻击,违反了最佳实践。

        2
  •  1
  •   Community basarat    4 年前

    考虑到Google Analytics和其他浏览器分析提供商提供的示例,我问题中的第二种选择是可以接受的。

    也就是说,SAS令牌可以在“每个站点”(或“每个分析客户”)的基础上生成,并由跟踪该站点的所有浏览器共享。密钥的生成可以通过Sandrino Di Mattia等工具完成 Event Hubs Signature Generator 基于他的 RedDog Azure库。

    这样,当发布者登录时,就可以生成一次令牌,并且不需要在线Web API端点始终可用。

        3
  •  0
  •   Vinicius Xavier    7 年前

    作为另一种方法,您可以考虑使用Application Insights进行事件摄取。根据您正在进行的事件收集的类型,您可以使用它并使用内置的归档机制导出数据,也可以不时查询特定事件的端点。App Insights是为浏览器场景中的JS设计的,可以处理大量RPS+。您可以获得一些报告、分析、查询端点和其他一些有趣的功能。它提供了一个可以使用的SDK和JS库,并使用浏览器的本地存储为您实现了批处理。

    作为补充说明,请将浏览器(以及在其上运行的任何其他JS代码)视为不安全的客户端。这意味着,即使您编写了一个机制来向您编写的服务器端应用程序请求SAS密钥,任何开发人员都可以在内存中拦截。因此,您可以做的最安全的事情是a)有一个服务器端代码,它生成一个短暂的SAS密钥,b)在调用此服务器端代码之前让您的客户端进行身份验证。或者,忽略该问题并过滤收到的无效事件。

    GA和App Insights都通过公开公共密钥来工作。据我所知,Google Analytics使用试探法来过滤无效请求。我想App Insights也会这么做。