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

时间:2018-08-22 18:45:17

标签: azure oauth-2.0 azure-active-directory azure-api-management

我在Azure(Web App)中托管了一个API。并非每个客户端都可以通过目录访问此API(IP限制),我愿意使用API​​M对其进行保护。

用户将呼叫APIM网关,网关应作出适当的响应。

一个大问题是身份验证:我正在使用AAD保护该API(后端API,而不是APIM-Gateway端点)。 因此,用户应针对AAD进行身份验证,并在不直接访问后端的情况下访问资源。

是否可以实现这种情况?

2 个答案:

答案 0 :(得分:0)

如果您对用户进行AAD身份验证感到满意,那么将为您提供完美支持。使用该模型,APIM可能仅用于将用户请求传递给后端,或者您可以在请求处理管道中的某个地方使用validate-jwt策略来验证用户的令牌并授权调用的操作。

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

通常,APIM要求客户端传递订阅密钥以对呼叫进行身份验证和授权。但是,如果您不希望使用AAD,则可以使用Open产品使您的呼叫匿名到APIM。 validate-jwt策略仍然可以用于要求请求中包含某些令牌。

有多种方法可以确保仅通过APIM可以访问您的后端:

  1. 共享机密-在APIM策略中设置特殊的标头,并在后端检查其值。
  2. 客户端证书身份验证-可以设置APIM以将客户端证书附加到每个后端请求,您将在后端进行检查以确保这是APIM进行的呼叫。
  3. VNET-APIM可以加入您的VNET,同时可以将后端设置为仅在VNET内接受呼叫,从而可以仅通过APIM进行调用。

答案 1 :(得分:0)

我在最近的项目中使用了以下方法,并使用jwt验证来验证策略中的oauth2令牌 遵循Microsoft文档链接https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-protect-backend-with-aad

这里是步骤的快速概述:

  1. 在Azure AD中注册一个代表API的应用程序(后端应用程序)。
  2. 在Azure AD中注册另一个应用程序(client-app)以表示需要调用API的客户端应用程序。
  3. 在Azure AD中,授予权限以允许客户端应用程序调用后端应用程序。
  4. 配置开发者控制台以使用OAuth 2.0用户授权来调用API。 (可选)
  5. 添加validate-jwt策略以为每个传入请求验证OAuth令牌。