Как передать тело входящего запроса в бэкэнд-сервис в Azure API Gateway - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь сгенерировать токен Active Directory через шлюз API Azure. Для этого я создал операцию API на своем Azure API-шлюзе, которая принимает следующий параметр тела:

  {
     "client_id" :"****************",
     "scope":"https://graph.windows.net/.default",
     "client_secret":"****************",
     "grant_type":"client_credentials"  
  }

Всякий раз, когда я пытаюсь проверить это, тело настроено для процесса inboud, но не может пересылать то же самое относится к бэкэнд-сервису, который https://login.microsoftonline.com/ {{ID}} / oauth2 / v2.0 / token / , поэтому я изменил свою политику inboud, как показано ниже, но все же не повезло.

        <set-method>POST</set-method>
    <set-variable name="requestBodyData" value="@(context.Request.Body.As<string>(preserveContent: true))" />
    <set-header name="Content-Type" exists-action="override">
        <value>"application/x-www-form-urlencoded"</value>
    </set-header>
    <rewrite-uri template="/" />
    <set-body>@{
          return "client_id=*******&scope=https://graph.windows.net/.default&client_secret=*******&grant_type=client_credentials";
      }</set-body>
    <!--  Don't expose APIM subscription key to the backend. -->
    <set-header name="Ocp-Apim-Subscription-Key" exists-action="delete" /> 

Любые выводы будут оценены.

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Получил, удалил заголовок и метод из входящей политики и обновил входящую политику как: -

    <set-variable name="client_id" value="********" />
    <set-variable name="scope" value="********"" />
    <set-variable name="client_secret" value="********" />
    <set-variable name="grant_type" value="********" />
    <rewrite-uri template="/" />
    <set-body>@{
        return "client_id="+(context.Variables["client_id"])+"&scope="+(context.Variables["scope"])+"&client_secret="+(context.Variables["client_secret"])+"&grant_type="+(context.Variables["grant_type"]);
        }</set-body>
    <!--  Don't expose APIM subscription key to the backend. -->
    <set-header name="Ocp-Apim-Subscription-Key" exists-action="delete" />
0 голосов
/ 30 января 2020

Установите <set-backend-service base-url="https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token" /> в атрибуте inbound.

Вот аналогичная проблема , к которой вы можете обратиться.

...