Создайте субъект-службу Azure с помощью пакета SDK Python

Есть ли в настоящее время какой-либо способ создать субъект-службу с помощью пакета SDK Python в Azure?

Я пробовал сделать это с помощью azure-graphrbac, но в настоящее время он устарел и не может загрузить DefaultAzureCredential из azure-identity. Я попытался создать оболочку и использовать ее, но при загрузке токена сеанса произошел сбой.

CredentialsWrapper.py

from azure.identity import DefaultAzureCredential
from msrest.authentication import BasicTokenAuthentication
from azure.core.pipeline.policies import BearerTokenCredentialPolicy
from azure.core.pipeline import PipelineRequest, PipelineContext
from azure.core.pipeline.transport import HttpRequest

class CredentialWrapper(BasicTokenAuthentication):
    def __init__(self, credential=None, resource_id = "https://graph.microsoft.com/.default", **kwargs):
        super(CredentialWrapper, self).__init__(None)
        if credential is None:
            credential = DefaultAzureCredential()
        self._policy = BearerTokenCredentialPolicy(credential, resource_id, **kwargs)

    def _make_request(self):
        return PipelineRequest(
            HttpRequest(
                "CredentialWrapper",
                "https://fakeurl"
            ),
            PipelineContext(None)
        )

    def set_token(self):
        request = self._make_request()
        self._policy.on_request(request)
        print(request.http_request.headers["Authorization"])
        token = request.http_request.headers["Authorization"]
        self.token = {"access_token": token}

    def signed_session(self, session=None):
        self.set_token()
        return super(CredentialWrapper, self).signed_session(session)
Как установить 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...
0
0
132
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Чтобы создать принципала службы с использованием DefaultAzureCredential из azure-identity, используйте приведенный ниже код:

import requests
from azure.identity import DefaultAzureCredential

class TokenGenerator:
    def generate_token(self):
        try:
            credential = DefaultAzureCredential()
            token = credential.get_token("https://graph.microsoft.com/.default")
            return token.token
        except Exception as ex:
            # Handle any exceptions
            print(f"An error occurred: {ex}")
            return None

generator = TokenGenerator()
access_token = generator.generate_token()

if access_token:
   
    headers = {
        "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json"
    }

    
    payload = {
        "appId": "MicrosoftEntraApplicationAppID"
    }

    response = requests.post("https://graph.microsoft.com/v1.0/servicePrincipals", headers=headers, json=payload)

    if response.status_code == 201:
        print("Service principal created successfully.")
    else:
        print(f"Failed to create service principal. Status code: {response.status_code}")
else:
    print("Failed to obtain access token.")

Субъект-служба успешно создана:

Это работает, но разве у нас нет SDK для этого вместо прямых вызовов REST API?

pranoy k 15.04.2024 11:47

AFAIK нет, вам нужно использовать вызовы REST API

Rukmini 15.04.2024 11:56

Не существует прямого объекта/модуля, который мог бы помочь вам достичь вашего требования AFAIK.

Rukmini 15.04.2024 12:10

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

Проблема с перенаправлением на страницу аутентификации в приложении ASP.NET MVC
Хотите сгенерировать токен для доступа к приложению с информацией о связанных пользователях от конкретного арендатора
Как выполнить единый вход в Azure с помощью next.js 14 и App Router
Как исправить недопустимое имя хоста для этой ошибки аренды при доступе к файлам в SharePoint с помощью API Microsoft Graph
Какое разрешение требуется для создания нового пользователя в Microsoft с использованием Graph API в C#
Как обновить изображение профиля пользователя с помощью Graph API в C#
Как получить сведения о пользователе из каталога Azure с помощью C# и API Graph?
Az-GetRoleAssigments не возвращает данные для DisplayName, SignInName и типа объекта — Azure Powershell Runbook
Каков метод предпочтительного сохранения данных для использования токена доступа (строки подключения) в качестве метода аутентификации в кеше Redis
Каков основной тип управляемого удостоверения, назначенного пользователем?

Похожие вопросы

Действия GitHub построены успешно, но веб-сайт не отражает изменения кода (проблема с развертыванием)
Как использовать управляемое удостоверение для подключения учетной записи хранения BLOB-объектов Azure и управления ACL контейнера с помощью пакета SDK Azure для Java
Зарегистрируйте фрейм данных Pandas в машинном обучении Azure: NOT_SUPPORTED_API_USE_ATTEMPT
Попытка получить ответ API от настройки ollama на виртуальной машине Azure (ubuntu)
Базовое тестовое приложение .NET 8 не работает в службе приложений
Политика доступа Azure Key Vault, разрешающая приложение логики (стандартно): «ресурс не найден»
Сборка Android не удалась, поскольку для библиотеки .gitmodules требуются неизвестные параметры
Требуется ли для начала использования бесплатная студенческая подписка Azure предоставить данные кредитной карты?
Последовательность рабочих процессов Azure Boards
Не удалось загрузить файл или сборку. Ошибка «System.Runtime» в среде Windows Server