我想用http触发器创建一个C#Azure函数。我想用API Key来保护它,为每个客户提供一个单独的密钥,该功能应该提供客户特定的数据,因此需要确定谁在调用它。
我是否可以使用Azure功能API密钥来识别客户,例如获取已传递的密钥的名称?或者是否无法在azure函数中知道哪个密钥用于验证请求?
如果有类似GetApiKeyName()
的方法,我可以根据我的数据库中的客户列表检查密钥名称,并根据调用该函数的人返回不同的数据。例如想象一下,我有一个销售跟踪系统,我的功能是/api/GetMonthlySales
。如果客户1使用他们的API密钥调用该功能,他们应该获得他们的月销售额,如果客户2调用它,他们将获得不同的金额。
如果这不可能,则意味着我需要向每个客户提供额外的认证数据,以便他们传递给每个函数调用,例如:客户ID和密钥。但这违背了使用Azure Functions API密钥的目的,对吗?
类似的情况是,如果我想在调用我的功能时向客户收费。如何识别哪个客户正在调用我的功能?
答案 0 :(得分:6)
罗里,
遗憾的是,今天不支持此功能。验证将根据使用的密钥进行,您可以撤销/更新单个客户端密钥,但该信息当前不会显示给函数。
有一些解决方法,比如使用管理API映射密钥并匹配请求密钥以识别客户端,但它们很麻烦且效率低下。
我在跟踪此here时遇到了问题,我刚刚再次对其进行了分类,看看我们是否可以尽快解决此问题。
答案 1 :(得分:0)
我认为首选的方式是使用Api Management。在Api管理中,您可以配置自定义身份验证。
要确保除Api Management之外没有人会请求您的功能,请为您的功能应用程序打开“应用程序服务身份验证/授权”,并仅允许Api Management对其进行访问。