«Ошибка проверки JWT: JWT отсутствует…» в службе управления API Azure

Для справки я пытаюсь воспроизвести решение, о котором говорилось здесь: https://www.tech-findings.com/2020/02/securing-logic-app-with-azure-active-directory.html для использования API Управление для защиты приложения Azure Logic.

Я получаю ошибку JWT. Когда я посещаю URL-адрес приложения в браузере, он дает:

{ "statusCode": 404, "message": "Resource not found" }

В тесте службы управления API я получаю:

HTTP/1.1 401 Unauthorized

После трассировки через него видно:

validate-jwt (-0.111 ms)
{
    "message": "JWT Validation Failed: JWT not present.."
}

Я немного погуглил и попробовал решения по адресу: Ошибка сбоя проверки JWT в azure apim и https://learn.microsoft.com/en-us/answers/questions/108008/azure-apim-jwt-token-validation-policy.html

Вот входящая политика из дизайна управления API:

<policies>
    <inbound>
        <base />
        <set-method id = "apim-generated-policy">POST</set-method>
        <rewrite-uri id = "apim-generated-policy" template = "/request/paths/invoke//?api-version=2016-06-01&amp;sp=/triggers/request/run&amp;sv=1.0&amp;sig = {{[[LOGIC APP NAME]]_request-invoke_XXXXXXXXXXXXXXXXXXXXXXXX}}" />
        <validate-jwt header-name = "Authorization" failed-validation-httpcode = "401" failed-validation-error-message = "Request is not authorized or token failed" require-expiration-time = "false" require-scheme = "Bearer" require-signed-tokens = "true">
            <openid-config url = "https://login.windows.net/[[TENANT NAME]].onmicrosoft.com/.well-known/openid-configuration" />
            <audiences>
                <audience>[[THE ID OF A REGISTERED APP]]</audience>
            </audiences>
        </validate-jwt>
        <set-header name = "Authorization" exists-action = "delete" />
        <set-header name = "apim-generated-policy" exists-action = "delete" />
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

Это манифест зарегистрированного приложения:

{
    "id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "acceptMappedClaims": null,
    "accessTokenAcceptedVersion": 2,
    "addIns": [],
    "allowPublicClient": null,
    "appId": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "appRoles": [],
    "oauth2AllowUrlPathMatching": false,
    "createdDateTime": "2020-12-22T19:48:36Z",
    "disabledByMicrosoftStatus": null,
    "groupMembershipClaims": null,
    "identifierUris": [
        "api://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    ],
    "informationalUrls": {
        "termsOfService": null,
        "support": null,
        "privacy": null,
        "marketing": null
    },
    "keyCredentials": [],
    "knownClientApplications": [],
    "logoUrl": null,
    "logoutUrl": null,
    "name": "LabsTestApp",
    "oauth2AllowIdTokenImplicitFlow": false,
    "oauth2AllowImplicitFlow": false,
    "oauth2Permissions": [],
    "oauth2RequirePostResponse": false,
    "optionalClaims": null,
    "orgRestrictions": [],
    "parentalControlSettings": {
        "countriesBlockedForMinors": [],
        "legalAgeGroupRule": "Allow"
    },
    "passwordCredentials": [],
    "preAuthorizedApplications": [],
    "publisherDomain": "[[TENANT NAME]].onmicrosoft.com",
    "replyUrlsWithType": [],
    "requiredResourceAccess": [],
    "samlMetadataUrl": null,
    "signInUrl": null,
    "signInAudience": "AzureADandPersonalMicrosoftAccount",
    "tags": [],
    "tokenEncryptionKeyId": null
}

Надеюсь, вы можете помочь - направьте меня в правильном направлении.

Здравствуйте, могу ли я узнать, решилась ли ваша проблема? Если все еще есть какие-либо проблемы, пожалуйста, дайте мне знать.

Hury Shen 28.12.2020 02:43
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
3
1
4 920
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого вопроса в ваших шагах есть более одной проблемы.

1. Вы упомянули об ошибке { "statusCode": 404, "message": "Resource not found" } при запросе URL в браузере. Причина в том, что когда вы запрашиваете его в браузере, он запрашивает метод Get, но URL-адрес должен запрашиваться методом Post. Так это показывает 404 not found.

2. При тестировании в службе управления API отображается 401 Unauthorized. Причиной этой ошибки является то, что вы не предоставили токен доступа или предоставленный вами токен доступа недействителен. Шаги в документе , который вы упомянули, являются неполными, пожалуйста, обратитесь к шагам ниже:

1). Сначала убедитесь, что вы выполнили все шаги, указанные в предоставленном вами документе.

2). Затем перейдите в приложение, которое вы зарегистрировали в azure ad, и щелкните вкладку «Манифест», добавьте appRole в json «Манифеста». Вы можете указать имя (любое) для этой роли, я назвал роль как Writer, как показано на скриншоте выше. И вы также можете указать «id» (в формате GUID) в качестве значения поля id в appRole. Для получения более подробной информации о добавлении appRole вы можете обратиться к этому документу.

3). Вам необходимо зарегистрировать другое приложение в Azure Ad в качестве клиентского приложения. Выполните ту же операцию регистрации, что и ваш документ, чтобы зарегистрировать другое приложение, я зарегистрировал приложение и назвал его huryGetToken4. Перейдите в это приложение и перейдите на вкладку «Разрешения API», нажмите «Добавить разрешение» и найдите исходное приложение, которое вы зарегистрировали, затем добавьте разрешение Writer.

После добавления разрешения Writer вам также нужно нажать «Предоставить согласие администратора для xxx».

Затем перейдите на вкладку «Сертификаты и секреты», нажмите «Новый секрет клиента», чтобы сгенерировать секрет клиента. Скопируйте этот секрет, потому что он будет показан только один раз.

4). Затем вам нужно получить токен доступа, пожалуйста, обратитесь к снимку экрана ниже, чтобы запросить токен доступа. На скриншоте выше вам нужно заменить <tenant id> идентификатором вашего арендатора в URL-адресе хоста. И вам также необходимо ввести первые три параметра. Последний параметр grant_type является статическим.

5). Запросите токен доступа, вы получите ответ, как показано на скриншоте ниже. Скопируйте значение access_token и вставьте его на эту страницу, чтобы расшифровать токен, вы можете увидеть в нем претензию roles с разрешением Writer. Это требование — то, что вам нужно проверить в политике <validate-jwt> в вашем APIM.

6). Зайдите в свой апим и нажмите на иконку pencil политики validate-jwt.

7). Отредактируйте «Пересмотренные претензии», как показано на скриншоте ниже:

8). После этого вы можете протестировать API в сервисе APIM. Добавьте заголовок с ключом: Authorization, значение: Bearer <your access token> (обратите внимание, что между Bearer и токеном доступа есть пробел).

Вау, это подробно. Спасибо! Так вы говорите, что мне нужно 2 регистрации приложений в дополнение к службе управления API и приложению Logic? Или приложение hte logic считается одной из двух регистраций?

Greg Viers 29.12.2020 22:07

@GregViers Да, вам нужно зарегистрировать приложение в Azure AD. Один из них предназначен для серверной части, которую вы уже зарегистрировали, как упоминается в документе (в руководстве по документу вы регистрируете приложение с именем AudienceAppForADSecuredLogicApp). А другое зарегистрировано как клиентское приложение в вашей Azure AD, о чем я упоминал в своем ответе (3). You need to register another app in azure ad as the client app.....).

Hury Shen 30.12.2020 02:35

Итак, я сделал все это и успешно - я получаю другое сообщение об ошибке. Но это не имеет ничего общего с проверкой hte JWT. Спасибо за решение этой проблемы!

Greg Viers 30.12.2020 23:30

Другие вопросы по теме