Как получить текущий контекст (вошедший в сущность) objectId - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь получить текущий (вошедший в систему) принципал службы \ идентификатор объекта приложения.мой код:

graphrbac_client = GraphRbacManagementClient(
    credentials = ServicePrincipalCredentials(
        client_id = CLIENT,
        secret = KEY,
        tenant = TENANT_ID,
        resource = "https://graph.windows.net"
    ),
    TENANT_ID
)
for sp in graphrbac_client.service_principals.list():
  if sp.app_id == graphrbac_client.config.credentials.id:
    print('found it')

, который работает, но требует слишком много разрешений для приложения (мне только удалось заставить его работать с Directory.ReadAll, не работает с Application.ReadWrite.All , по некоторым причинам).Кажется, что все методы, которые я нахожу для поиска, требуют знать objectId заранее ... это то, что я пытаюсь получить.

, используя this :

def resolve_service_principal(identifier):
    """Get an object_id from a client_id.
    """
    graphrbac_credentials = ServicePrincipalCredentials(
        client_id=os.environ['AZURE_CLIENT_ID'],
        secret=os.environ['AZURE_CLIENT_SECRET'],
        tenant=os.environ['AZURE_TENANT_ID'],
        resource="https://graph.windows.net"
    )
    graphrbac_client = GraphRbacManagementClient(
        graphrbac_credentials,
        os.environ['AZURE_TENANT_ID']
    )

    result = list(graphrbac_client.service_principals.list(filter="servicePrincipalNames/any(c:c eq '{}')".format(identifier)))
    if result:
        return result[0].object_id
    raise RuntimeError("Unable to get object_id from client_id")

1 Ответ

0 голосов
/ 20 декабря 2018

Вам нужен пакет не менее 0.50.0 и signed_in_user.get.Пример подключения к учетной записи администратора:

user = graphrbac_client.signed_in_user.get()
assert user.mail_nickname.startswith("admin")

https://docs.microsoft.com/en-us/python/api/azure-graphrbac/azure.graphrbac.operations.signedinuseroperations?view=azure-python#get-custom-headers-none--raw-false----operation-config-

(я работаю в Microsoft в этой команде SDK)

Редактировать: кажется, это работает толькодля пользователя, то я бы попробовал:

    objects = graphrbac_client.objects.get_objects_by_object_ids({
        'object_ids': [CLIENT],
        'types': ['ServicePrincipal']
    })
...