当前位置: 首页 > 知识库问答 >
问题:

通过Azure API管理网关从AAD获取JWT令牌

廖招
2023-03-14

我在Azure(Web App)中托管了一个API。每个客户端都无法访问此API目录(IP限制),我愿意使用APIM来保护它。

用户将调用APIM网关,网关应做出适当响应。

一个大问题是身份验证:我正在用AAD保护这个API(后端API而不是APIM网关endpoint)。因此,用户应该根据AAD对自己进行身份验证,并在不直接访问后端的情况下访问资源。

有没有可能实现这样的场景?

共有2个答案

凌和悦
2023-03-14

在我最近的项目中,我使用了以下方法,并使用jwt验证验证了policy Follow Microsoft document link中的oauth2令牌https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-protect-backend-with-aad.

以下是步骤的快速概述:

  1. 在Azure AD中注册一个应用程序(backend-app)以表示API。
  2. 在Azure AD中注册另一个应用程序(client-app)以表示需要调用API的客户端应用程序。
  3. 在Azure AD中,授予权限以允许客户端应用调用后端应用。
  4. 配置Developer Console以使用OAuth 2.0用户授权调用API。(可选)
  5. 添加validate-jwt策略以验证每个传入请求的OAuth令牌。
都昊乾
2023-03-14

如果您不介意用户针对AAD进行身份验证,那么它是完全受支持的。使用该模型,APIM可用于将用户请求传递到后端,或者您可以在请求处理管道中的某个位置使用validate-jwt策略来验证用户的令牌并授权调用的操作。

APIM的授权服务器功能可用于记录您的API需要来自特定服务器的AAD令牌。如果这样做了,开发人员门户上的测试控制台将显示一些控件,以简化获取令牌以对API进行测试调用的过程。

通常,APIM要求客户端传递订阅密钥来验证和授权调用。但如果您依赖的AAD可能不是您想要的,那么您可以使用Open product向APIM匿名拨打电话。验证jwt策略仍然可以用于要求某些令牌与请求一起出现。

有多种方法可以确保只有通过APIM才能访问后端:

  1. 共享秘密-在APIM策略中设置一个特殊标头并在后端检查它的值。
  2. 客户端证书身份验证-可以设置APIM将客户端证书附加到您将在后端检查的每个后端请求,以确保这是APIM正在进行调用。
  3. VNET-APIM可以加入您的VNET,而后端可能设置为仅在VNET中接受调用,从而可以仅通过APIM调用。
 类似资料:
  • 现在我有了我的应用程序将嵌入另一个CRM平台的用法。假设这个CRM平台使用IDP1。因此,用户能够访问CRM,并将通过IDP1进行身份验证。然后,用户可以点击一个按钮,并被引导到我的应用程序。当然,我们不希望用户再次使用相同的IdP进行身份验证,但现在首先通过KeyCloak进行身份验证。 我的问题是,有没有一种方法让Keycloak使用用户访问CRM平台时收到的IDP1令牌,让Keycloak充

  • 问题内容: 我试图用来获取Chrome标签,如下所示: (伪代码) 按F6定向网址行。 Ctrl + C复制网址 从剪贴簿获取网址 通过BS4处理URL,请求,selenium等。 我完成了步骤1并停留在步骤2。同样,我也不知道如何处理步骤3。因此,认为我发现的方法不正确且效率不高。有人可以建议我应该做什么或给我更好的方法吗? 问题答案: 只是将所有评论汇总在一个答案中… 没有技巧和剪贴板抓取功能

  • 我尝试了https://spring.io/blog/2019/08/16/securing-services-with-spring-cloud-gateway示例,但我对所有的oauth部分感到困惑。

  • 问题内容: 我正在尝试从远程Firebase服务器获取文件。 但是,如果我在浏览器中打开,则会加载json文件。即使我加载了json文件。但是通过角度返回未找到。 现在,远程文件具有以下结构: 可以使用$ http.get()而不是$ http.jsonp()来获取上述文件。JSONP无法解析具有上述结构的.json文件。我该如何解决? 问题答案: 您需要在传递给的URL中指定。 从Angular

  • 我目前正在使用NodeJS通过AWS Api网关在AWS lambda上构建机器人,我遇到了POST请求和JSON数据的问题。我的api使用“使用Lambda代理集成”,即使当我测试代理发送内容类型的应用程序/json和正文中的一些json时,例如g我不能访问对象,除非先解析它 e. g. 现在我知道,仅仅通过JSON.parse运行它似乎没什么大不了的,但是我已经看到了许多其他的例子,其中根本不

  • 我尝试了出站网关,如: 中所述 https://github.com/spring-projects/spring-integration-samples/blob/master/basic/ftp/src/test/resources/meta-inf/spring/integration/ftpoutboundgatewaysample-context.xml 和 http://forum.s