如何使用Azure API管理从Azure Data Lake Rest API获得响应?

时间:2019-04-04 03:45:32

标签: azure-data-lake azure-api-management

我想使用Data Lake rest API调用Azure Data Lake Gen 1。我尝试通过Javascript进行调用,但是由于遇到了CORS,因此我决定使用Azure API Management在JS和ADLS之间建立一个层。因此,基本上,用户将调用APIM,而内部APIM将调用ADLS Rest API并将响应发送给我。使用CURL命令作为参考,

curl -X POST https://login.microsoftonline.com/<TENANT-ID>/oauth2/token  \
  -F grant_type=client_credentials \
  -F resource=https://management.core.windows.net/ \
  -F client_id=<CLIENT-ID> \
  -F client_secret=<AUTH-KEY>

我正在尝试使用API​​M从ADLS提取OAuth令牌。这是我到目前为止所拥有的,

APIM政策:

<policies>
    <inbound>
        <base />
        <set-method>POST</set-method>
        <set-header name="Content-Type" exists-action="override">
            <value>"application/x-www-form-urlencoded"</value>
        </set-header>
    </inbound>
    <backend>
        <set-body>{
            'grant_type':'client_credentials',
            'resource':'https://management.core.windows.net/',
            'client_id':'#################################',
            'client_secret':'#######################'    
            }</set-body>
    </backend>
    <outbound>
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

我可以成功调用ADLS,但是如何使用来自APIM的响应(即OAuth令牌)并将其路由到APIM中的调用者呢?

1 个答案:

答案 0 :(得分:0)

根据您配置API的方式,您可能还需要在入站中添加rewrite-uri和/或set-backend-service以直接调用https://login.microsoftonline.com

否则尝试:

<policies>
    <inbound>
        <base />
        <set-method>POST</set-method>
        <set-header name="Content-Type" exists-action="override">
            <value>"application/x-www-form-urlencoded"</value>
        </set-header>
        <set-body>{
            'grant_type':'client_credentials',
            'resource':'https://management.core.windows.net/',
            'client_id':'#################################',
            'client_secret':'#######################'    
            }</set-body>
    </inbound>
    <backend>
        <forward-request/>
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>