Как исправить существующее приложение с помощью Python Azure SDK и Graph? - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь программно добавить reply_url к регистрации приложения Azure, но получаю azure.graphrbac.models.graph_error_py3.GraphErrorException: Specified HTTP method is not allowed for the request target.

Это не удается, когда я пытаюсь обновить существующее приложение новым reply_urls.

SDK, который я использую: azure -graphrbac == 0.61.1

Мой код:

from azure.common.credentials import ServicePrincipalCredentials
from azure.graphrbac import GraphRbacManagementClient
from azure.graphrbac.models import ApplicationUpdateParameters

class GraphClient:
    def __init__(self, client_id, client_secret, tenant_id, object_id):
        self._credentials = ServicePrincipalCredentials(
            client_id=client_id,
            secret=client_secret,
            tenant=tenant_id,
            resource="https://graph.windows.net"
        )
        self._graph_client = GraphRbacManagementClient(
            credentials=self._credentials,
            tenant_id=tenant_id
        )
        self._object_id = object_id
        self._application = self._graph_client.applications.get(self._object_id)

    def get_reply_urls(self) -> List[str]:
        return self._application.reply_urls

    def add_reply_url(self, reply_url) -> None:
        reply_urls: list = self.get_reply_urls()
        self._graph_client.applications.patch(
            self._object_id,
            ApplicationUpdateParameters(
                reply_urls=[
                    *reply_urls,
                    reply_url]
            )
        )

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Не удалось воспроизвести вашу проблему, используйте ту же версию azure-graphrbac, я тестирую ваш код на своей стороне, он работает нормально.

testclient = GraphClient(client_id = "xxxxx",client_secret = "xxxxx", tenant_id = "xxxxx", object_id = "xxxxx")
testclient.add_reply_url(reply_url = "http://localhost:8085")

enter image description here

Зарегистрируйтесь на портале:

enter image description here


Также я тестирую SDK напрямую, оба работают.

from azure.common.credentials import ServicePrincipalCredentials
from azure.graphrbac import GraphRbacManagementClient
from azure.graphrbac.models import ApplicationUpdateParameters

_credentials = ServicePrincipalCredentials(
            client_id="xxxxx",
            secret="xxxxx",
            tenant="xxxxx",
            resource="https://graph.windows.net"
        )
_graph_client = GraphRbacManagementClient(
            credentials=_credentials,
            tenant_id="xxxxx"
        )
app = _graph_client.applications.patch(
    application_object_id = "xxxxx",
    parameters = ApplicationUpdateParameters(reply_urls = ["http://localhost:8080","http://localhost:8081"])                            
       )
1 голос
/ 06 мая 2020

Вызов обновления выглядит хорошо, однако он зависит от устаревшего API (AAD Graph) и инструментов. Настоятельно рекомендуется перейти на MS Graph, который поддерживает почти все операции Azure AD Graph и будет полностью поддерживать их все в будущем . Приложения, - одно из них.

Для этого вы можете использовать Requests-OAuthlib или Microsoft Graph Python Клиентскую библиотеку .

...