Как я могу подтвердить доступ к хранилищу BLOB-объектов в Python с помощью токена OAuth2?

В настоящее время я работаю над веб-приложением на основе второго пилота. В рамках приложения пользователям необходимо войти в систему с помощью Azure Active Directory (AD). Приложение включает функцию Azure, считывающую данные в хранилище BLOB-объектов.

В настоящее время эта функция Azure выполняет аутентификацию в хранилище BLOB-объектов с использованием управляемого удостоверения в Python (с использованием пакета azure.identity и метода defaultAzureCredential()).

Однако я хочу изменить метод аутентификации для чтения из хранилища BLOB-объектов, чтобы использовать пользовательский токен (возможно, токен OAuth2?) вместо управляемого удостоверения. Пытаюсь найти подходящий пакет Python для использования такого токена для хранилища BLOB-объектов, поскольку в документации azure.identity не вижу никакой информации о чем-то подобном.

Есть ли способ аутентификации доступа к хранилищу BLOB-объектов в Python с помощью функции OAuth2?

До сих пор пробовали использовать управляемую идентификацию или добавить идентификатор entra поверх функции Azure, но это слишком громоздко, поскольку требует дополнительных шагов входа в систему для пользователей.

Обновлено: Добавление кода функции здесь по запросу (извините, если форматирование неправильное):

    credential = DefaultAzureCredential()

    blob_service_client = BlobServiceClient(
        f"https://{account_name}.blob.core.windows.net", credential=credential
    )

    blob_client = blob_service_client.get_blob_client(
        container=container_name, blob=blob_name
    )

    download_stream = BytesIO()
    download_stream.write(blob_client.download_blob().readall())
    download_stream.seek(0)  # Reset the stream position

    return func.HttpResponse(
        download_stream.read(),
        mimetype = "application/pdf",
        headers = {"Content-Disposition": f"inline; filename = {blob_name}"},
    )

Здесь я хочу изменить тип учетных данных: я хочу использовать токен OAuth2/что-то подобное и не уверен, что мне нужно изменить с точки зрения чтения из большого двоичного объекта. Спасибо!

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

Community 11.07.2024 08:54

@spinning_out_of_time, можешь поделиться своим кодом функции? используете ли вы триггер хранилища BLOB-объектов/привязку ввода/вывода?

Vivek Vaibhav Shandilya 11.07.2024 09:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Используйте метод InteractiveBrowserCredential вместо DefaultAzureCredential для аутентификации каждого пользователя.

Ниже приведенный код работал у меня.

Я читаю текстовый файл.

function_app.py:

from io import BytesIO
import azure.functions as func
from azure.identity import InteractiveBrowserCredential, DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

app = func.FunctionApp()



@app.route(route = "http_trigger", auth_level=func.AuthLevel.ANONYMOUS, methods= ['get'])
def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
    
    account_name = "xxxxxxxxxxx"
    container_name = "xxxxxxxxx"
    blob_name = "upload.txt"
    

    credential= InteractiveBrowserCredential()

    blob_service_client = BlobServiceClient(
        f"https://{account_name}.blob.core.windows.net", credential=credential
    )

    blob_client = blob_service_client.get_blob_client(
        container=container_name, blob=blob_name
    )

    download_stream = BytesIO()
    download_stream.write(blob_client.download_blob().readall())
    download_stream.seek(0)  # Reset the stream position

    return func.HttpResponse(
        download_stream.read(),
        mimetype = "text/plain",
        headers = {"Content-Disposition": f"inline; filename = {blob_name}"},
    )

OUTPUT:

Аутентификация учетной записи пользователя.

Аутентификация завершена

Спасибо, это очень полезно — я думаю, что класс InteractiveBroswerCredential — это то, что я искал. Я мог бы спросить, знаете ли вы, можно ли пропустить этап входа в систему, передав учетные данные пользователя непосредственно в коде? Я знаю, что это не идеально с точки зрения безопасности, но это просто попытка. Еще раз спасибо за помощь в этом!

spinning_out_of_time 11.07.2024 14:19

@spinning_out_of_time Можно использовать учетные данные пользователя, используя метод UsernamePasswordCredential, который вам необходимо предоставить client id of a service pricipal, username и password. Если MFA включен для аутентификации пользователей, будет выдана ошибка. MFA нельзя выполнить на основе кода, предоставив учетные данные. InteractiveBroswerCredential по моему мнению лучший вариант.

Vivek Vaibhav Shandilya 12.07.2024 09:39

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

Невозможно настроить непрерывное развертывание в новом приложении-контейнере Azure из-за ошибки «отклонить назначение»
Как удалить файлы, хранящиеся в хранилище Службы приложений Azure, с помощью функций Azure?
Проблема с PIP Python в функциях Azure
Получение TaskCanceledException при использовании проверки подлинности без пароля с помощью функций Azure и Entity Framework с SQL Server
Почему моя функция Azure не может прочитать переменную среды, определенную в классе запуска?
Функция Azure, работающая в виртуальной сети, не может подключиться к кэшу Redis Azure, занесенному в белый список
Функции Azure в Python: ошибка «Требуется дуплексный режим»
Ошибка авторизации при отправке большого двоичного объекта с управляемой идентификацией
Приложение-функция Azure — нет настройки непрерывного развертывания для плана хостинга «Гибкое потребление»?
Как настроить проверку утверждения конвейера Azure для развертывания в приложениях-функциях Azure?