通过 Azure API 管理生成访问令牌并针对 IdentityServer4 进行验证
Posted
技术标签:
【中文标题】通过 Azure API 管理生成访问令牌并针对 IdentityServer4 进行验证【英文标题】:Generate Access Token and validate against IdentityServer4 through Azure API Management 【发布时间】:2019-01-09 11:48:58 【问题描述】:我有一个外部端点,它将访问 Azure API 网关,并将其路由到受 IdentityServer4 授权保护的后端 API。
如果我使用来自 IdentityServer 的交互式 UI 通过 Postman 客户端点击它,我将获得访问令牌。
有没有一种方法可以从 Azure API 管理获取所需的访问令牌,以针对 IdentityServer4 进行验证并将其附加到后端 API 请求中的标头?
【问题讨论】:
【参考方案1】:是的,可以通过自定义策略来实现。您可以要求您的外部 API-Client/Consumer 在 heaser 中输入凭证,然后在入站中编写一个策略,以读取这些用户凭证并执行 API 请求(类似于您的邮递员)并获取访问令牌。然后,您可以附加相同的令牌,让您的请求被转发到后端 API。
根据您的问题陈述,这应该有效。如果没有,您可能需要通过更多描述/步骤来解释您的场景。
以下是一些参考资料,希望对你有所帮助。
https://docs.microsoft.com/en-us/azure/api-management/api-management-advanced-policies#SendRequest
https://docs.microsoft.com/en-us/azure/api-management/api-management-sample-send-request
【讨论】:
【参考方案2】:Postman 可以让人类用户看到 UI 并授权 API 访问和 IdentityServer4 为 Postman 颁发令牌。 APIM 服务器处理调用时没有这种奢侈,因为您可以向 IdentityServer4 发送令牌请求,但会向谁提供 UI 以授权该操作?
唯一的方法是为 APIM 提供某种机密(标头、查询、证书),IdentityServer4 可以识别这些机密,以允许它为 APIM 颁发令牌。如果这样的 secred 可用,您可以使用 send-request 策略调用 IdentityServer4 并获取所需的令牌。
或者确保对 APIM 的每个请求都已经有一个令牌。
【讨论】:
最后一行对我来说最有意义。消费应用程序(客户端)不应该首先进行身份验证并需要访问令牌来调用 APIM 公开的端点吗?然后 APIM 应该验证令牌并调用后端 api 这确实是最常见的情况。尽管其他可能包括需要将身份验证分离到 APIM 和后端。在这种情况下,需要通过来自用户的令牌以外的方式来验证 APIM。以上是关于通过 Azure API 管理生成访问令牌并针对 IdentityServer4 进行验证的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在不使用 SAS 令牌的情况下通过 c# 代码调用 Azure API 管理吗
Azure API 管理 - 如何刷新访问令牌后端 API?