问题描述
我是 Azure API 管理的新手,很高兴收到有关我的实施的建议和建议。
我正在开发一个 B2B Api 通道,供第 3 方通过 API 管理 (APIM) 网关调用我的服务。在 APIM 开发人员门户上,我可以加入新客户并生成 API 密钥。我的难题是如何最好地找出正在调用的底层服务?
我已经考虑将在 APIM 中生成的 API 密钥添加到底层服务将调用以进行身份验证的数据库中,但是,该实现将是手动的,并且在 3rd 方客户端转到 APIM 并重新生成一个数据库时不会同步新的 API 密钥。
我想要的是一种在 APIM 和底层服务之间自动同步授权和身份验证的解决方案。
解决方法
由于 API 密钥可以替换,因此您最好依靠 ID 来识别客户端。
您可以在标头中将客户端 ID 传递给后端:https://stackoverflow.com/a/42277313/2579733
现在如何将 APIM 的客户端 ID 与后端的客户端 ID 关联起来?
如果只有几个客户端,您可能可以手动更新后端数据库中的关联。如果您可以使用客户的电子邮件来连接 APIM 客户端和您的后端客户端,那就更简单了(大功告成)。
如果您需要注册许多客户端并且手动方法不可行...一种方法是使用 Delegated Authentication:
委派允许您使用现有网站来处理开发者登录/注册和产品订阅,而不是使用开发者门户中的内置功能。它使您的网站能够拥有用户数据并以自定义方式执行这些步骤的验证。
我从未使用过它,但您似乎可以将创建新客户端的责任转移到后端服务(由您开发)。
通过这种方式,您可以访问客户电子邮件、生成 ID 并根据需要将 ID 关系存储在后端。