Ошибка проверки приложения Microsoft AD: «microsoft-identity-association.json имеет длину содержимого, которая не установлена ​​или иным образом недопустима» - PullRequest
0 голосов
/ 18 октября 2019

Я изо всех сил пытаюсь проверить наше приложение с Azure Active Directory, чтобы использовать их единый вход.

Для проверки нашего домена они просят сделать JSON-файл доступным по этому адресу: {publisher_domain}/.well-known/microsoft-identity-association.json

В нашем приложении Flask я передаю файл по этому маршруту:

@app.route('/.well-known/microsoft-identity-association.json')
def microsoft_identity_association():
    file = '.well-known/microsoft-identity-association.json'

    return send_file(file, mimetype='application/json')

Я также пытался загрузить JSON в словарь и вернуть словарь, позволяющий Flask отобразить ответ:

@app.route('/.well-known/microsoft-identity-association.json')
def microsoft_identity_association():
    file = '.well-known/microsoft-identity-association.json'
    with open(file, encoding="utf-8") as file:
        result = ujson.load(file)
        response = flask.Response(result, mimetype='application/json')
        response.headers.add('content-length' , str(result.__len__()))

    return send_file(file, mimetype='application/json')

Но каждый раз я получаю один и тот же результат:

В ответ на запрос GET заголовок content-length присутствует в моей локальной среде, но исчезает при развертывании моего приложения в Google App Engine Flex. Я проверил их документацию (https://cloud.google.com/appengine/docs/flexible/python/reference/request-headers) и связался с ними, но без особого успеха.
Они говорят: «Похоже, это работает так, как задумано. HTTP / 2 не требует« content-length »и поэтому"

Похоже, что эта процедура проверки приложений Microsoft является новой (май 2019 г.), поэтому трудно найти похожие проблемы.

Кто-то здесь сталкивался с такой же ситуацией и, надеюсь, нашелрешение?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2019

После дополнительных исследований и некоторого времени, проведенного между различными техническими службами, я наконец нашел решение для проверки нашего приложения. Я объясню это здесь на случай, если это может быть кому-то полезно.

Причина проблемы

Процесс проверки, предложенный Microsoft Azure AD, отправлял запрос GET конечной точке на нашем сервере. и ожидание ответа «aplication / json» с соответствующим заголовком «content-lenght».

Но наш сервер использует протокол HTTP 1.1 и

Для версии 1.1 протокола HTTP механизм передачи по частям считается всегда приемлемым, даже если он не указан вПоле заголовка запроса TE и при использовании с другими механизмами передачи всегда должно применяться в последнюю очередь к передаваемым данным и никогда не более одного раза. (Источник: Википедия )

И

Отправитель НЕ ДОЛЖЕН отправлять поле заголовка Content-Length в любом сообщении, которое содержит Transfer-Encodingполе заголовка.
(Источник: RFC )

Похоже, что процесс проверки не соответствует протоколу HTTP 1.1.

Решение

Решение, наконец, довольно простое: использовать альтернативную процедуру проверки домена

В Azure AD мне удалось проверить свой домен, используя запись TXT в нашем DN, как описанов документации Microsoft

Я надеюсь, что это поможет другим людям, застрявшим в проверке домена приложения.

0 голосов
/ 24 октября 2019

Для Гибкой среды это соответствующая документация [1] [2], также согласно этой документации [3] отправитель НЕ ДОЛЖЕН отправлять поле заголовка Content-Length в любом сообщении, которое содержит заголовок Transfer-Encodingполе.

[1] https://cloud.google.com/appengine/docs/flexible/python/reference/request-headers

[2] https://cloud.google.com/appengine/docs/flexible/python/how-requests-are-handled

[3] https://tools.ietf.org/html/rfc7230#section-3.3.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...