我想使用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>
我正在尝试使用APIM从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中的调用者呢?
答案 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>