Partager via


Configurer le proxy d’application Microsoft Entra à l’aide des API Microsoft Graph

Le proxy d’application Microsoft Entra fournit un accès à distance sécurisé et une authentification unique (SSO) aux applications web locales. Il permet aux utilisateurs d’accéder à leurs applications locales via une URL externe, le portail Mes applications ou d’autres portails d’applications internes.

Dans ce tutoriel, vous allez apprendre à configurer le proxy d’application Microsoft Entra à l’aide des API Microsoft Graph.

Importante

Les opérations d’API spécifiques au proxy d’application sont actuellement disponibles uniquement sur le point de beta terminaison.

Configuration requise

  • Installez un connecteur et remplissez les conditions préalables pour le proxy d’application afin que les connecteurs puissent communiquer avec les services Microsoft Entra.
  • Connectez-vous à un client d’API tel que l’Explorateur Graph avec un compte qui a au moins le rôle Administrateur d’application cloud.
  • Accordez-vous l’autorisation déléguée Microsoft Graph Directory.ReadWrite.All .
  • Avoir un utilisateur de test à affecter à l’application.

Étape 1 : Créer une application personnalisée

Pour configurer le proxy d’application, vous devez d’abord créer une application personnalisée, puis mettre à jour les paramètres du proxy d’application dans la propriété onPremisesPublishing de l’application. Dans ce tutoriel, vous utilisez un modèle d’application pour créer une instance d’une application personnalisée et d’un principal de service dans votre locataire. L’ID de modèle pour une application personnalisée est 8adf8e6e-67b2-4cf2-a259-e3dc5476c621, que vous pouvez découvrir en exécutant la requête suivante : GET https://graph.microsoft.com/v1.0/applicationTemplates?$filter=displayName eq 'Custom'.

Dans la réponse, enregistrez l’ID du principal de service et des objets d’application, ainsi que la valeur appId pour une utilisation ultérieure dans le didacticiel.

Demande

POST https://graph.microsoft.com/v1.0/applicationTemplates/8adf8e6e-67b2-4cf2-a259-e3dc5476c621/instantiate
Content-type: application/json

{
  "displayName": "Contoso IWA App"
}

Réponse

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.applicationServicePrincipal",
    "application": {
        "id": "bf21f7e9-9d25-4da2-82ab-7fdd85049f83",
        "appId": "32977d3b-ee0e-4614-9f50-f583a07842d2",
        "applicationTemplateId": "8adf8e6e-67b2-4cf2-a259-e3dc5476c621",
        "createdDateTime": "2024-02-22T16:48:09Z",
        "deletedDateTime": null,
        "displayName": "Contoso IWA App",
        "description": null,
        "groupMembershipClaims": null,
        "identifierUris": [],
        "isFallbackPublicClient": false,
        "signInAudience": "AzureADMyOrg",
        "tags": [],
        "tokenEncryptionKeyId": null,
        "defaultRedirectUri": null,
        "samlMetadataUrl": null,
        "optionalClaims": null,
        "addIns": [],
        "api": {
            "acceptMappedClaims": null,
            "knownClientApplications": [],
            "requestedAccessTokenVersion": null,
            "oauth2PermissionScopes": [
                {
                    "adminConsentDescription": "Allow the application to access Contoso IWA App on behalf of the signed-in user.",
                    "adminConsentDisplayName": "Access Contoso IWA App",
                    "id": "5cda2e1e-d9fd-4f69-b981-48fbc8a16be1",
                    "isEnabled": true,
                    "type": "User",
                    "userConsentDescription": "Allow the application to access Contoso IWA App on your behalf.",
                    "userConsentDisplayName": "Access Contoso IWA App",
                    "value": "user_impersonation"
                }
            ],
            "preAuthorizedApplications": []
        },
        "appRoles": [
            {
                "allowedMemberTypes": [
                    "User"
                ],
                "displayName": "User",
                "id": "18d14569-c3bd-439b-9a66-3a2aee01d14f",
                "isEnabled": true,
                "description": "User",
                "value": null,
                "origin": "Application"
            },
            {
                "allowedMemberTypes": [
                    "User"
                ],
                "displayName": "msiam_access",
                "id": "b9632174-c057-4f7e-951b-be3adc52bfe6",
                "isEnabled": true,
                "description": "msiam_access",
                "value": null,
                "origin": "Application"
            }
        ],
        "info": {
            "logoUrl": null,
            "marketingUrl": null,
            "privacyStatementUrl": null,
            "supportUrl": null,
            "termsOfServiceUrl": null
        },
        "keyCredentials": [],
        "parentalControlSettings": {
            "countriesBlockedForMinors": [],
            "legalAgeGroupRule": "Allow"
        },
        "passwordCredentials": [],
        "publicClient": {
            "redirectUris": []
        },
        "requiredResourceAccess": [],
        "verifiedPublisher": {
            "displayName": null,
            "verifiedPublisherId": null,
            "addedDateTime": null
        },
        "web": {
            "homePageUrl": "https://account.activedirectory.windowsazure.com:444/applications/default.aspx?metadata=customappsso|ISV9.1|primary|z",
            "redirectUris": [],
            "logoutUrl": null
        }
    },
    "servicePrincipal": {
        "id": "a8cac399-cde5-4516-a674-819503c61313",
        "deletedDateTime": null,
        "accountEnabled": true,
        "appId": "32977d3b-ee0e-4614-9f50-f583a07842d2",
        "applicationTemplateId": "8adf8e6e-67b2-4cf2-a259-e3dc5476c621",
        "appDisplayName": "Contoso IWA App",
        "alternativeNames": [],
        "appOwnerOrganizationId": "38d49456-54d4-455d-a8d6-c383c71e0a6d",
        "displayName": "Contoso IWA App",
        "appRoleAssignmentRequired": true,
        "loginUrl": null,
        "logoutUrl": null,
        "homepage": "https://account.activedirectory.windowsazure.com:444/applications/default.aspx?metadata=customappsso|ISV9.1|primary|z",
        "notificationEmailAddresses": [],
        "preferredSingleSignOnMode": null,
        "preferredTokenSigningKeyThumbprint": null,
        "replyUrls": [],
        "servicePrincipalNames": [
            "32977d3b-ee0e-4614-9f50-f583a07842d2"
        ],
        "servicePrincipalType": "Application",
        "tags": [
            "WindowsAzureActiveDirectoryCustomSingleSignOnApplication",
            "WindowsAzureActiveDirectoryIntegratedApp"
        ],
        "tokenEncryptionKeyId": null,
        "samlSingleSignOnSettings": null,
        "addIns": [],
        "appRoles": [
            {
                "allowedMemberTypes": [
                    "User"
                ],
                "displayName": "User",
                "id": "18d14569-c3bd-439b-9a66-3a2aee01d14f",
                "isEnabled": true,
                "description": "User",
                "value": null,
                "origin": "Application"
            },
            {
                "allowedMemberTypes": [
                    "User"
                ],
                "displayName": "msiam_access",
                "id": "b9632174-c057-4f7e-951b-be3adc52bfe6",
                "isEnabled": true,
                "description": "msiam_access",
                "value": null,
                "origin": "Application"
            }
        ],
        "info": {
            "logoUrl": null,
            "marketingUrl": null,
            "privacyStatementUrl": null,
            "supportUrl": null,
            "termsOfServiceUrl": null
        },
        "keyCredentials": [],
        "oauth2PermissionScopes": [
            {
                "adminConsentDescription": "Allow the application to access Contoso IWA App on behalf of the signed-in user.",
                "adminConsentDisplayName": "Access Contoso IWA App",
                "id": "5cda2e1e-d9fd-4f69-b981-48fbc8a16be1",
                "isEnabled": true,
                "type": "User",
                "userConsentDescription": "Allow the application to access Contoso IWA App on your behalf.",
                "userConsentDisplayName": "Access Contoso IWA App",
                "value": "user_impersonation"
            }
        ],
        "passwordCredentials": [],
        "verifiedPublisher": {
            "displayName": null,
            "verifiedPublisherId": null,
            "addedDateTime": null
        }
    }
}

Étape 2 : Configurer le proxy d’application

Pour l’application que vous avez créée à l’étape 1, configurez les URI de l’application. Supposons que l’URL interne de l’application est https://contosoiwaapp.com et que le domaine par défaut pour l’URL externe est https://contosoiwaapp-contoso.msappproxy.net. Ajoutez la valeur d’URL externe aux propriétés identifierUris, web>redirectUris et webPageUrl>.

Configurez également la propriété onPremisesPublishing pour définir les URL internes et externes, ainsi que d’autres propriétés en fonction des besoins. Cette propriété est disponible uniquement dans beta et ne peut pas être configurée tant que vous n’avez pas configuré les URI.

Étape 2.1 : Configurer les URI

La requête suivante utilise la valeur appId pour la propriété identifierUris . Vous pouvez également utiliser n’importe quel autre identificateur qui correspond au format d’URI d’ID d’application attendu par l’ID Microsoft Entra. La requête retourne une 204 No content réponse.

PATCH https://graph.microsoft.com/v1.0/applications/bf21f7e9-9d25-4da2-82ab-7fdd85049f83
Content-type: application/json

{
    "identifierUris": [
        "api://32977d3b-ee0e-4614-9f50-f583a07842d2"
    ],
    "web": {
        "redirectUris": [
            "https://contosoiwaapp-contoso.msappproxy.net"
        ],
        "homePageUrl": "https://contosoiwaapp-contoso.msappproxy.net"
    }
}

Étape 2.2 : Configurer la propriété onPremisesPublishing

La requête retourne une 204 No content réponse.

PATCH https://graph.microsoft.com/beta/applications/bf21f7e9-9d25-4da2-82ab-7fdd85049f83
Content-type: application/json

{
    "onPremisesPublishing": {
        "externalAuthenticationType": "aadPreAuthentication",
        "internalUrl": "https://contosoiwaapp.com",
        "externalUrl": "https://contosoiwaapp-contoso.msappproxy.net",
        "isHttpOnlyCookieEnabled": true,
        "isOnPremPublishingEnabled": true,
        "isPersistentCookieEnabled": true,
        "isSecureCookieEnabled": true,
        "isStateSessionEnabled": true,
        "isTranslateHostHeaderEnabled": true,
        "isTranslateLinksInBodyEnabled": true
    }
}

Étape 3 : Affecter un groupe de connecteurs à l’application

Étape 3.1 : Obtenir des connecteurs

Identifiez le connecteur que vous souhaitez affecter au groupe de connecteurs. Enregistrez son ID.

Demande

GET https://graph.microsoft.com/beta/onPremisesPublishingProfiles/applicationProxy/connectors

Réponse

HTTP/1.1 200 OK
Content-type: application/json

{
  "@odata.context": "https://graph.microsoft.com/beta/$metadata#onPremisesPublishingProfiles('applicationProxy')/connectors",
    "@microsoft.graph.tips": "Use $select to choose only the properties your app needs, as this can lead to performance improvements. For example: GET onPremisesPublishingProfiles('<key>')/connectors?$select=externalIp,machineName",
    "value": [
    {
      "id": "d2b1e8e8-8511-49d6-a4ba-323cb083fbb0",
      "machineName": "connectorA.redmond.contoso.com"",
      "externalIp": "131.137.147.164",
      "status": "active"
    },
    {
      "id": "f2cab422-a1c8-4d70-a47e-2cb297a2e051",
      "machineName": "connectorB.contoso.com"",
      "externalIp": "68.0.191.210",
      "status": "active"
    }
  ]
}

Étape 3.2 : Créer un connectorGroup

Créez un connectorGroup nommé IWA Demo Connector Group pour l’application. Enregistrez son ID.

Demande

POST https://graph.microsoft.com/beta/onPremisesPublishingProfiles/applicationProxy/connectorGroups
Content-type: application/json

{
  "name": "IWA Demo Connector Group"
}

Réponse

HTTP/1.1 201 Created
Content-type: application/json

{
  "@odata.context": "https://graph.microsoft.com/beta/$metadata#connectorGroups/$entity",
  "id": "3e6f4c35-a04b-4d03-b98a-66fff89b72e6",
  "name": "IWA Demo Connector Group",
  "connectorGroupType": "applicationProxy",
  "region": "eur",
  "isDefault": false
}

Étape 3.3 : Affecter un connecteur au connectorGroup

La requête retourne une 204 No content réponse.

POST https://graph.microsoft.com/beta/onPremisesPublishingProfiles/applicationProxy/connectors/f2cab422-a1c8-4d70-a47e-2cb297a2e051/memberOf/$ref
Content-type: application/json

{
  "@odata.id":"https://graph.microsoft.com/beta/onPremisesPublishingProfiles/applicationProxy/connectorGroups/3e6f4c35-a04b-4d03-b98a-66fff89b72e6"
}

Étape 3.4 : Affecter l’application au connectorGroup

La requête retourne une 204 No content réponse.

PUT https://graph.microsoft.com/beta/applications/bf21f7e9-9d25-4da2-82ab-7fdd85049f83/connectorGroup/$ref
Content-type: application/json

{
  "@odata.id":"https://graph.microsoft.com/beta/onPremisesPublishingProfiles/applicationproxy/connectorGroups/3e6f4c35-a04b-4d03-b98a-66fff89b72e6"
}

Étape 4 : Configurer l’authentification unique (SSO)

Dans cette étape, vous configurez les propriétés onPremisesPublishing > singleSignOnSettings et onPremisesPublishing > singleSignOnMode pour l’application.

Option 1 : Configurer l’authentification unique basée sur IWA

La requête suivante montre comment configurer l’authentification Windows intégrée (IWA) pour l’application. La requête retourne une 204 No content réponse.

PATCH https://graph.microsoft.com/beta/applications/bf21f7e9-9d25-4da2-82ab-7fdd85049f83
Content-type: appplication/json

{
  "onPremisesPublishing": {
    "singleSignOnSettings": {
      "kerberosSignOnSettings": {
        "kerberosServicePrincipalName": "HTTP/iwademo.contoso.com",
           "kerberosSignOnMappingAttributeType": "userPrincipalName"
      },
      "singleSignOnMode": "onPremisesKerberos"
    }
  } 
}

Option 2 : Configurer l’authentification unique basée sur l’en-tête

La requête suivante montre comment configurer l’authentification unique basée sur l’en-tête pour l’application. Dans ce mode, la valeur de la propriété singleSignOnMode peut être aadHeaderBased, pingHeaderBasedou oAuthToken. La requête retourne une 204 No content réponse.

PATCH https://graph.microsoft.com/beta/applications/bf21f7e9-9d25-4da2-82ab-7fdd85049f83
Content-type: appplication/json

{
  "onPremisesPublishing": {
    "singleSignOnSettings": {
      "kerberosSignOnSettings": {},
      "singleSignOnMode": "aadHeaderBased"
    }
  } 
}

Étape 5 : Affecter un utilisateur à l’application

Vous souhaitez affecter un utilisateur à l’application. À partir du principal de service que vous avez créé à l’étape 1, enregistrez l’ID du rôle Utilisateur par défaut défini dans la propriété appRoles . Cette valeur est 18d14569-c3bd-439b-9a66-3a2aee01d14f.

Dans le corps de la demande, fournissez les valeurs suivantes :

  • principalId : ID du compte d’utilisateur que vous avez créé.
  • appRoleId : ID du rôle d’application par défaut User que vous avez récupéré auprès du principal de service.
  • resourceId : ID du principal de service.

Demande

POST https://graph.microsoft.com/beta/servicePrincipals/a8cac399-cde5-4516-a674-819503c61313/appRoleAssignments
Content-type: application/json

{
  "principalId": "2fe96d23-5dc6-4f35-8222-0426a8c115c8",
  "principalType": "User",
  "appRoleId":"18d14569-c3bd-439b-9a66-3a2aee01d14f",
  "resourceId":"a8cac399-cde5-4516-a674-819503c61313"
}

Réponse

HTTP/1.1 200 OK
Content-type: application/json

{
  "@odata.context": "https://graph.microsoft.com/beta/$metadata#appRoleAssignments/$entity",
  "id": "I23pL8ZdNU-CIgQmqMEVyLJ0E6fx0ixEo92az8MnhtU",
  "creationTimestamp": "2020-06-09T00:06:07.5129268Z",
  "appRoleId": "18d14569-c3bd-439b-9a66-3a2aee01d14f",
  "principalDisplayName": "MyTestUser1",
  "principalId": "2fe96d23-5dc6-4f35-8222-0426a8c115c8",
  "principalType": "User",
  "resourceDisplayName": "Contoso IWA App",
  "resourceId": "a8cac399-cde5-4516-a674-819503c61313"
}

Étape 6 : Tester l’accès à l’application

Testez l’application en visitant l’externalUrl configuré pour l’application sur votre navigateur, puis connectez-vous avec votre utilisateur de test. Vous devez être en mesure de vous connecter à l’application et d’accéder à l’application.

Étape 7 : nettoyer les ressources

Dans cette étape, supprimez les ressources que vous avez créées et dont vous n’avez plus besoin.

Supprimez le compte d’utilisateur

La requête retourne une 204 No content réponse.

DELETE https://graph.microsoft.com/v1.0/users/4628e7df-dff3-407c-a08f-75f08c0806dc

Supprimer l’application

Lorsque vous supprimez l’application, le principal de service dans votre locataire est également supprimé. Cette requête retourne une 204 No content réponse.

DELETE https://graph.microsoft.com/v1.0/applications/bf21f7e9-9d25-4da2-82ab-7fdd85049f83

Supprimer le groupe de connecteurs

La requête retourne une 204 No content réponse.

DELETE https://graph.microsoft.com/beta/onPremisesPublishingProfiles/applicationProxy/connectorGroups/3e6f4c35-a04b-4d03-b98a-66fff89b72e6