Compartilhar via


Gerir uma aplicação Microsoft Entra com o Microsoft Graph

A sua aplicação tem de estar registada no Microsoft Entra ID para que a plataforma de identidades da Microsoft possa autorizar o acesso aos dados armazenados na cloud da Microsoft. Esta condição aplica-se às aplicações que desenvolve, às quais o seu inquilino é proprietário ou a que acede através de uma subscrição ativa.

Muitas definições para aplicações são registadas como objetos que podem ser acedidos, atualizados ou eliminados com o Microsoft Graph. Neste artigo, vai aprender a utilizar o Microsoft Graph para gerir detalhes de objetos de principais de aplicações e serviços, incluindo as propriedades, permissões e atribuições de funções.

Pré-requisitos

Para testar as operações da API, precisa dos seguintes recursos e privilégios:

  • Um inquilino do Microsoft Entra que trabalha.
  • Inicie sessão no Graph Explorer como um utilizador com privilégios permitidos para criar e gerir aplicações no inquilino.
  • Conceda a si mesmo a permissão delegada com menos privilégios indicada para a operação.

Registar uma aplicação com o Microsoft Entra ID

O pedido seguinte cria uma aplicação ao especificar apenas a propriedade displayName necessária. São atribuídos os valores predefinidos a outras propriedades.

Permissão delegada com menos privilégios: Application.ReadWrite.All.

POST https://graph.microsoft.com/v1.0/applications
Content-type: application/json

{
  "displayName": "My application"
}

O pedido devolve uma 201 Created resposta com o objeto da aplicação no corpo da resposta. É atribuído à aplicação um ID exclusivo para aplicações no inquilino e um appId globalmente exclusivo no ecossistema do Microsoft Entra ID.

Criar um principal de serviço para uma aplicação

Permissão delegada com menos privilégios: Application.ReadWrite.All.

POST https://graph.microsoft.com/v1.0/servicePrincipals
Content-type: application/json

{
  "appId": "fc876dd1-6bcb-4304-b9b6-18ddf1526b62"
}

O pedido devolve uma 201 Created resposta com o objeto do principal de serviço no corpo da resposta.

Endereçar uma aplicação ou um objeto de principal de serviço

Pode abordar uma aplicação ou um principal de serviço pelo respetivo ID ou pelo respetivo appId, em que o ID é referido como ID de Objeto e appId é referido como ID da Aplicação (cliente) no centro de administração do Microsoft Entra. Estas sintaxes são suportadas para todas as operações CRUD http em aplicações e principais de serviço.

Para endereçar uma aplicação ou um principal de serviço pelo respetivo ID.

https://graph.microsoft.com/v1.0/applications/{applicationObjectId}
https://graph.microsoft.com/v1.0/servicePrincipals/{servicePrincipalObjectId}

Para endereçar uma aplicação ou um principal de serviço pelo respetivo appId.

https://graph.microsoft.com/v1.0/applications(appId='appId')
https://graph.microsoft.com/v1.0/servicePrincipals(appId='appId')

Além disso, pode abordar um objeto de aplicação exclusivo do seu uniqueName. Pode utilizar esta propriedade para criar uma aplicação com o nome exclusivo, caso não exista, ou atualizá-la se existir; uma operação referida como "Upsert".

Crie uma aplicação com o uniqueName especificado se não existir, caso contrário, atualize-a.

PATCH https://graph.microsoft.com/v1.0/applications(uniqueName='{uniqueName}')
Content-Type: application/json
Prefer: create-if-missing

{
  "displayName": "Display name"
}

Configurar outras propriedades básicas para a sua aplicação

Permissão delegada com menos privilégios: Application.ReadWrite.All.

Configure as seguintes propriedades básicas para a aplicação.

  • Adicione etiquetas para categorização na organização. Além disso, utilize a HideApp etiqueta para ocultar a aplicação de As Minhas Aplicações e do Iniciador do Microsoft 365.
  • Adicione informações básicas, incluindo o logótipo, os termos de serviço e a declaração de privacidade.
  • Armazenar informações de contacto sobre a aplicação
PATCH https://graph.microsoft.com/v1.0/applications/0d0021e2-eaab-4b9f-a5ad-38c55337d63e/
Content-type: application/json

{
    "tags": [
        "HR",
        "Payroll",
        "HideApp"
    ],
    "info": {
        "logoUrl": "https://cdn.pixabay.com/photo/2016/03/21/23/25/link-1271843_1280.png",
        "marketingUrl": "https://www.contoso.com/app/marketing",
        "privacyStatementUrl": "https://www.contoso.com/app/privacy",
        "supportUrl": "https://www.contoso.com/app/support",
        "termsOfServiceUrl": "https://www.contoso.com/app/termsofservice"
    },
    "web": {
        "homePageUrl": "https://www.contoso.com/",
        "logoutUrl": "https://www.contoso.com/frontchannel_logout",
        "redirectUris": [
            "https://localhost"
        ]
    },
    "serviceManagementReference": "Owners aliases: Finance @ contosofinance@contoso.com; The Phone Company HR consulting @ hronsite@thephone-company.com;"
}

Limitar o início de sessão da aplicação apenas a identidades atribuídas

A operação seguinte limita as identidades que podem iniciar sessão numa aplicação apenas às que estão atribuídas todas as funções na aplicação.

Permissão delegada com menos privilégios: Application.ReadWrite.All.

PATCH https://graph.microsoft.com/v1.0/servicePrincipals/89473e09-0737-41a1-a0c3-1418d6908bcd

{
    "appRoleAssignmentRequired": true
}

Atribuir permissões a uma aplicação

Embora possa atribuir permissões a uma aplicação através do centro de administração do Microsoft Entra, também pode atribuir permissões através do Microsoft Graph ao atualizar a propriedade requiredResourceAccess do objeto da aplicação. Tem de transmitir as permissões existentes e as novas. Transmitir apenas novas permissões substitui e remove as permissões existentes que ainda não foram consentidas.

A atribuição de permissões não as concede automaticamente à aplicação. Ainda tem de conceder o consentimento do administrador através do centro de administração do Microsoft Entra. Para conceder permissões sem consentimento interativo, veja Conceder ou revogar permissões de API programaticamente.

Permissão delegada com menos privilégios: Application.ReadWrite.All.

PATCH https://graph.microsoft.com/v1.0/applications/581088ba-83c5-4975-b8af-11d2d7a76e98
Content-Type: application/json

{
    "requiredResourceAccess": [
        {
            "resourceAppId": "00000002-0000-0000-c000-000000000000",
            "resourceAccess": [
                {
                    "id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6",
                    "type": "Scope"
                },
                {
                    "id": "3afa6a7d-9b1a-42eb-948e-1650a849e176",
                    "type": "Role"
                }
            ]
        }
    ]
}

Criar funções de aplicação

Criar funções de aplicação num objeto de aplicação

Para manter quaisquer funções de aplicação existentes, inclua-as no pedido. Caso contrário, serão substituídos pelo novo objeto.

PATCH https://graph.microsoft.com/v1.0/applications/bbd46130-e957-4c38-a116-d4d02afd1057
Content-Type: application/json

{
    "appRoles": [
        {
            "allowedMemberTypes": [
                "User",
                "Application"
            ],
            "description": "Survey.Read",
            "displayName": "Survey.Read",
            "id": "7a9ddfc4-cc8a-48ea-8275-8ecbffffd5a0",
            "isEnabled": false,
            "origin": "Application",
            "value": "Survey.Read"
        }
    ]
}

Gerir proprietários

Identificar principais de serviço sem proprietário e principais de serviço com um proprietário

Permissão delegada com menos privilégios: Application.ReadWrite.All.

Esta solicitação exige o cabeçalho ConsistencyLevel definido como eventual porque $count está na solicitação. Para obter mais informações sobre a utilização de ConsistencyLevel e $count, veja Advanced query capabilities on directory objects (Capacidades de consulta avançadas em objetos de diretório).

Este pedido também devolve a contagem das aplicações que correspondem à condição de filtro.

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=owners/$count eq 0 or owners/$count eq 1&$count=true
ConsistencyLevel: eventual

Atribuir um proprietário a uma aplicação

Permissão delegada com menos privilégios: Application.ReadWrite.All.

No pedido seguinte, 8afc02cb-4d62-4dba-b536-9f6d73e9be26 encontra-se o ID de objeto de um utilizador ou principal de serviço.

POST https://graph.microsoft.com/v1.0/applications/7b45cf6d-9083-4eb2-92c4-a7e090f1fc40/owners/$ref
Content-Type: application/json

{
    "@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/8afc02cb-4d62-4dba-b536-9f6d73e9be26"
}

Atribuir um proprietário a um principal de serviço

Permissão delegada com menos privilégios: Application.ReadWrite.All.

O pedido seguinte referencia o principal de serviço com o respetivo appId. Em alternativa, pode referenciá-lo com o ID de objeto no padrão ../servicePrincipals/{bject ID}/owners/$ref. 8afc02cb-4d62-4dba-b536-9f6d73e9be26 é o ID de objeto de um utilizador ou principal de serviço.

POST https://graph.microsoft.com/v1.0/servicePrincipals(appId='46e6adf4-a9cf-4b60-9390-0ba6fb00bf6b')/owners/$ref
Content-Type: application/json

{
    "@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/8afc02cb-4d62-4dba-b536-9f6d73e9be26"
}

Bloquear propriedades confidenciais para principais de serviço

A funcionalidade de bloqueio da instância da aplicação permite-lhe proteger propriedades confidenciais das suas aplicações multi-inquilino contra adulteração não autorizada. As seguintes propriedades do objeto do principal de serviço podem ser bloqueadas:

  • keyCredentials em que o tipo de utilização é Sign ou Verify.
  • passwordCredentials em que o tipo de utilização é Sign ou Verify.
  • propriedade tokenEncryptionKeyId .

Pode gerir a funcionalidade de bloqueio da instância da aplicação através da propriedade servicePrincipalLockConfiguration do objeto de aplicação da aplicação multi-inquilino.

Para bloquear todas as propriedades confidenciais de um principal de serviço

Quando isEnabled e allProperties está definido como true, mesmo que outras propriedades do objeto servicePrincipalLockConfiguration sejam null, todas as propriedades confidenciais do principal de serviço estão bloqueadas.

PATCH https://graph.microsoft.com/beta/applications/a0b7f39e-3139-48aa-9397-f46fb63102f7

{
    "servicePrincipalLockConfiguration": {
        "isEnabled": true,
        "allProperties": true
    }
}

Para bloquear propriedades confidenciais específicas de um principal de serviço

O exemplo seguinte bloqueia as propriedades keyCredentials e passwordCredentials do principal de serviço e ativa a funcionalidade de bloqueio da instância da aplicação.

PATCH https://graph.microsoft.com/beta/applications/a0b7f39e-3139-48aa-9397-f46fb63102f7

{
    "servicePrincipalLockConfiguration": {
        "isEnabled": true,
        "credentialsWithUsageSign": true,
        "credentialsWithUsageVerify": true
    }
}

Configurar autoridades de certificação fidedignas para aplicações

Pode restringir a utilização de credenciais de certificado para aplicações no seu inquilino apenas para os certificados emitidos pelas autoridades de certificação fidedignas. Esta política é imposta quando adiciona um certificado a uma aplicação e não afeta os certificados existentes, a menos que sejam rodados. Quando uma aplicação tenta rodar as respetivas credenciais de certificado, passa pela avaliação da política para garantir que as credenciais adicionadas estão em conformidade com a restrição de autoridade de certificação fidedigna.

Passo 1: Criar uma cadeia de certificados de fidedignidade

Permissão delegada com menos privilégios: função AppCertTrustConfiguration.Read.All Microsoft Entra com privilégios mínimos: Application Administrator

POST https://graph.microsoft.com/beta/certificateAuthorities/certificateBasedApplicationConfigurations

{
    "displayName": "Trusted Certificate Chain of Trust for Contoso",
    "description": "The Trusted Certificate Chain of Trust containing a certificate chain used by app policy, to only allow application certificates from selected issuer.",
    "trustedCertificateAuthorities": [
        {
            "isRootAuthority": true,
            "certificate": "MIIFVjCCAz6gAwIBAgIQJdrL...UyNDIyNTcwM1owPDE …="
        },
        {
            "isRootAuthority": false,
            "certificate": QAAAAAAWjABAQsFADA8M...UyNDIyNTcwM1o …="
        }
    ]
}

A solicitação retorna uma resposta 200 OK. A resposta inclui o ID da cadeia de certificados do objeto de fidedignidade. Suponha que o ID é eec5ba11-2fc0-4113-83a2-ed986ed13743.

Passo 2: atribuir a cadeia de certificados de confiança a uma política de gestão de aplicações

O exemplo seguinte configura uma política para garantir que apenas os certificados emitidos pela autoridade de certificação intermédia definida no passo anterior podem ser adicionados a aplicações no inquilino. O objeto applicationRestrictions>keyCredentials define um restrictionType com o valor trustedCertificateAuthority, que referencia o ID que foi criado. Uma vez que esta política é aplicada à política de gestão de aplicações ao nível do inquilino predefinida, é imposta para todas as aplicações criadas no inquilino e rejeita tentativas de adicionar certificados não conformes como parte das credenciais de certificado de uma aplicação.

Esta política garante que apenas os certificados da autoridade de certificação intermédia especificada podem ser adicionados às aplicações. O objeto applicationRestrictions>keyCredentials define um restrictionType como trustedCertificateAuthority, referenciando o ID criado. Esta política aplica-se a todas as aplicações no inquilino, rejeitando quaisquer certificados não conformes.

Permissão delegada com menos privilégios: função Policy.Read.ApplicationConfiguration Microsoft Entra com privilégios mínimos: Security Administrator

PATCH https://graph.microsoft.com/v1.0/policies/defaultAppManagementPolicy

{
  "id": "d015220e-9789-4e8e-bbcc-270fe419229d",
  "description": "Lorem ipsum",
  "displayName": "Credential management policy",
  "isEnabled": true,
  "applicationRestrictions": {
    "passwordCredentials": [
      {
        "restrictionType": "passwordLifetime",
        "maxLifetime": "P14D",
        "restrictForAppsCreatedAfterDateTime": "2020-01-01T07:00:00Z"
      }
    ],
    "keyCredentials": [
      {
        "restrictionType": "certificateLifetime",
        "restrictForAppsCreatedAfterDateTime": "2020-01-01T10:37:00Z",
        "maxLifetime": "P90D"
      },
      {
        "restrictionType": "trustedCertificateAuthority",
        "certificateBasedApplicationConfigurationIds": [
          "eec5ba11-2fc0-4113-83a2-ed986ed13743"
        ],
        "restrictForAppsCreatedAfterDateTime": "2019-10-19T10:37:00Z"
      }
    ]
  }
}