MicrosoftGraphApplications
Use the Entra ID Applications integration (formerly Azure Active Directory Applications) to manage authorized applications.
IT Services · Microsoft Graph Applications
Details
| ID | MicrosoftGraphApplications |
|---|---|
| Provider | Microsoft |
| Category | IT Services |
| From Version | 5.0.0 |
| Docker Image | demisto/crypto:1.0.0.8187750 |
| Supported Modules | Agentix Cloud Runtime Security Cloud Posture Security XSIAM EDR Cortex Cloud |
README
Use the Entra ID Applications integration (formerly Azure Active Directory Applications) to manage authorized applications.
This integration was integrated and tested with version v1.0 of Microsoft Graph Services API.
Configure Entra ID Applications in Cortex
| Parameter | Description | Required |
|---|---|---|
| Application ID | False | |
| Azure AD endpoint | Azure AD endpoint associated with a national cloud. | False |
| Trust any certificate (not secure) | False | |
| Use system proxy settings | False | |
| Authentication Type | Type of authentication - could be Client Credentials Authorization Flow (recommended) or Device Flow | False |
| Tenant ID (for Client Credentials mode) | False | |
| Client Secret (for Client Credentials mode) | False | |
| Azure Managed Identities Client ID | The Managed Identities client ID for authentication - relevant only if the integration is running on Azure VM. | False |
Commands
You can execute these commands from the CLI, as part of an automation, or in a playbook.
After you successfully execute a command, a DBot message appears in the War Room with the command details.
msgraph-apps-auth-start
Run this command to start the authorization process and follow the instructions in the command results.
msgraph-apps-auth-complete
Run this command to complete the authorization process. Should be used after running the msgraph-apps-auth-start command.
msgraph-apps-auth-reset
Run this command if for some reason you need to rerun the authentication process.
msgraph-apps-auth-test
Tests connectivity to Microsoft.
msgraph-apps-service-principal-list
Retrieves a list of applications.
Base Command
msgraph-apps-service-principal-list
Input
| Argument Name | Description | Required |
|---|---|---|
| limit | Maximum results to fetch. A value of 0 fetches all results. Default is 10. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| MSGraphApplication.keyCredentials.keyId | String | The unique identifier (GUID) for the key. |
| MSGraphApplication.keyCredentials.customKeyIdentifier | String | Custom key identifier. |
| MSGraphApplication.keyCredentials.displayName | String | Friendly name for the key. Optional. |
| MSGraphApplication.keyCredentials.type | String | The type of key credential; for example, “Symmetric”. |
| MSGraphApplication.keyCredentials.key | String | The certificate’s raw data in byte array converted to Base64 string. |
| MSGraphApplication.keyCredentials.usage | String | A string that describes the purpose for which the key can be used; for example, “Verify”. |
| MSGraphApplication.keyCredentials.startDateTime | Date | The date and time at which the credential expires.The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 would look like this: ‘2014-01-01T00:00:00Z’ |
| MSGraphApplication.keyCredentials.endDateTime | Date | The date and time at which the credential becomes valid.The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 would look like this: ‘2014-01-01T00:00:00Z’ |
| MSGraphApplication.accountEnabled | Boolean | true if the application account is enabled; otherwise, false. |
| MSGraphApplication.appDescription | String | A brief description of the application. |
| MSGraphApplication.appDisplayName | String | The display name exposed by the associated application. |
| MSGraphApplication.appId | String | The unique identifier for the associated application (its appId property). |
| MSGraphApplication.appOwnerOrganizationId | String | Contains the tenant ID where the application is registered. This is applicable only to service principals backed by applications. |
| MSGraphApplication.appRoleAssignmentRequired | Boolean | Whether users or other service principals need to be granted an application role assignment for this service principal before users can sign in or apps can get tokens. Default is false. |
| MSGraphApplication.applicationTemplateId | String | Unique identifier of the application template that the service principal was created from. |
| MSGraphApplication.createdDateTime | Date | Time the application was created. |
| MSGraphApplication.deletedDateTime | Date | Time the application was deleted. |
| MSGraphApplication.description | String | A brief description of the application. |
| MSGraphApplication.displayName | String | The display name for the application. |
| MSGraphApplication.homepage | String | Home page or landing page of the application. |
| MSGraphApplication.id | String | The unique identifier for the application. |
| MSGraphApplication.info.logoUrl | String | Content delivery network (CDN) URL to the application’s logo. |
| MSGraphApplication.info.marketingUrl | String | Link to the application’s marketing page. |
| MSGraphApplication.info.privacyStatementUrl | String | Link to the application’s privacy statement. |
| MSGraphApplication.info.supportUrl | String | Link to the application’s support page. |
| MSGraphApplication.info.termsOfServiceUrl | String | Link to the application’s terms of service statement. |
| MSGraphApplication.loginUrl | String | The URL where the service provider redirects the user to Microsoft Entra ID to authenticate. Microsoft Entra ID uses the URL to launch the application from Microsoft 365 or the Microsoft Entra My Apps. |
| MSGraphApplication.logoutUrl | String | Specifies the URL that will be used by Microsoft’s authorization service to log out an user. |
| MSGraphApplication.notes | String | The application’s notes. |
| MSGraphApplication.oauth2PermissionScopes.adminConsentDescription | String | A description of the delegated permissions, intended to be read by an administrator granting the permission on behalf of all users. This text appears in tenant-wide admin consent experiences. |
| MSGraphApplication.oauth2PermissionScopes.adminConsentDisplayName | String | The permission’s title, intended to be read by an administrator granting the permission on behalf of all users. |
| MSGraphApplication.oauth2PermissionScopes.id | String | Unique delegated permission identifier inside the collection of delegated permissions defined for a resource application. |
| MSGraphApplication.oauth2PermissionScopes.isEnabled | Boolean | Whether OAuth 2.0 permission scopes are enabled. |
| MSGraphApplication.oauth2PermissionScopes.type | String | Whether this delegated permission should be considered safe for non-admin users to consent to on behalf of themselves, or whether an administrator should be required for consent to the permissions. |
| MSGraphApplication.oauth2PermissionScopes.userConsentDescription | String | A description of the delegated permissions, intended to be read by a user granting the permission on their own behalf. This text appears in consent experiences where the user is consenting only on behalf of themselves. |
| MSGraphApplication.oauth2PermissionScopes.userConsentDisplayName | String | A title for the permission. |
| MSGraphApplication.oauth2PermissionScopes.value | String | The value to include in the scope claim in access tokens. |
| MSGraphApplication.preferredSingleSignOnMode | String | The single sign-on mode configured for this application. Microsoft Entra ID uses the preferred single sign-on mode to launch the application from Microsoft 365 or the Microsoft Entra My Apps. The supported values are password, SAML, external, and OIDC. |
| MSGraphApplication.preferredTokenSigningKeyThumbprint | String | Thumbprint of preferred certificate to sign the token. |
| MSGraphApplication.replyUrls | String | The URLs that user tokens are sent to for signing in with the associated application, or the redirect URIs that OAuth 2.0 authorization codes and access tokens are sent to for the associated application. |
| MSGraphApplication.samlSingleSignOnSettings | String | The collection for settings related to SAML single sign-on. |
| MSGraphApplication.servicePrincipalNames | String | The list of identifier URIs. |
| MSGraphApplication.servicePrincipalType | String | Identifies if the service principal represents an application or a managed identity. |
| MSGraphApplication.signInAudience | String | The audience that can sign in. |
| MSGraphApplication.tokenEncryptionKeyId | String | The key ID of a public key from the key credentials. |
| MSGraphApplication.verifiedPublisher.addedDateTime | Date | The timestamp when the verified publisher was first added or most recently updated. |
| MSGraphApplication.verifiedPublisher.displayName | String | The verified publisher name from the application publisher’s Partner Center account. |
| MSGraphApplication.verifiedPublisher.verifiedPublisherId | String | The ID of the verified publisher from the application publisher’s Partner Center account. |
Command Example
!msgraph-apps-service-principal-list limit=1
Context Example
{
"MSGraphApplication": {
"accountEnabled": true,
"addIns": [],
"alternativeNames": [],
"appDescription": null,
"appDisplayName": "Common Data Service",
"appId": "00000007-0000-0000-c000-000000000000",
"appOwnerOrganizationId": ":app-owner-organization-id:",
"appRoleAssignmentRequired": false,
"appRoles": [],
"applicationTemplateId": null,
"createdDateTime": "2019-12-11T11:35:03Z",
"deletedDateTime": null,
"description": null,
"displayName": "Common Data Service",
"homepage": null,
"id": ":id:",
"info": {
"logoUrl": null,
"marketingUrl": null,
"privacyStatementUrl": null,
"supportUrl": null,
"termsOfServiceUrl": null
},
"keyCredentials": [],
"loginUrl": null,
"logoutUrl": null,
"notes": null,
"notificationEmailAddresses": [],
"oauth2PermissionScopes": [
{
"adminConsentDescription": "Allows the application to access Common Data Service acting as users in the organization.",
"adminConsentDisplayName": "Access Common Data Service as organization users",
"id": ":id:",
"isEnabled": true,
"type": "User",
"userConsentDescription": "Allows the application to access Common Data Service as you.",
"userConsentDisplayName": "Access Common Data Service as you",
"value": "user_impersonation"
}
],
"passwordCredentials": [],
"preferredSingleSignOnMode": null,
"preferredTokenSigningKeyThumbprint": null,
"replyUrls": [
"https://admin.example.com/",
"https://port.example..com/",
"https://cloudredirector.example.com/"
],
"resourceSpecificApplicationPermissions": [],
"samlSingleSignOnSettings": null,
"servicePrincipalNames": [
"https://admin.example.com/",
"https://port.example.com/",
"https://cloudredirector.example.com/"
],
"servicePrincipalType": "Application",
"signInAudience": "AzureADMultipleOrgs",
"tags": [],
"tokenEncryptionKeyId": null,
"verifiedPublisher": {
"addedDateTime": null,
"displayName": null,
"verifiedPublisherId": null
}
}
}
Human Readable Output
Available services (applications)
id appId appDisplayName accountEnabled :id: 00000007-0000-0000-c000-000000000000 Common Data Service true
msgraph-apps-service-principal-remove
Removes an application from the directory.
Base Command
msgraph-apps-service-principal-remove
Input
| Argument Name | Description | Required |
|---|---|---|
| id | The application id to remove. Can be retrieved via the msgraph-apps-service-principal-list command. | Optional |
| app_id | The application client id to remove. Can be retrieved via the msgraph-apps-service-principal-list command. | Optional |
Context Output
There is no context output for this command.
Command Example
!msgraph-apps-service-principal-remove id=ID_TEST
Human Readable Output
Service ID_TEST was deleted.
msgraph-apps-service-principal-get
Retrieve the properties and relationships of a servicePrincipal object.
Base Command
msgraph-apps-service-principal-get
Input
| Argument Name | Description | Required |
|---|---|---|
| id | The application id to get. Can be retrieved via the msgraph-apps-service-principal-list command. | Optional |
| app_id | The application client id to get. Can be retrieved via the msgraph-apps-service-principal-list command. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| MSGraphApplication.keyCredentials.keyId | String | The unique identifier (GUID) for the key. |
| MSGraphApplication.keyCredentials.customKeyIdentifier | String | Custom key identifier. |
| MSGraphApplication.keyCredentials.displayName | String | Friendly name for the key. Optional. |
| MSGraphApplication.keyCredentials.type | String | The type of key credential; for example, “Symmetric”. |
| MSGraphApplication.keyCredentials.key | String | The certificate’s raw data in byte array converted to Base64 string. |
| MSGraphApplication.keyCredentials.usage | String | A string that describes the purpose for which the key can be used; for example, “Verify”. |
| MSGraphApplication.keyCredentials.startDateTime | Date | The date and time at which the credential expires.The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 would look like this: ‘2014-01-01T00:00:00Z’. |
| MSGraphApplication.keyCredentials.endDateTime | Date | The date and time at which the credential becomes valid.The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 would look like this: ‘2014-01-01T00:00:00Z’. |
| MSGraphApplication.accountEnabled | Boolean | true if the application account is enabled; otherwise, false. |
| MSGraphApplication.appDescription | String | A brief description of the application. |
| MSGraphApplication.appDisplayName | String | The display name exposed by the associated application. |
| MSGraphApplication.appId | String | The unique identifier for the associated application (its appId property). |
| MSGraphApplication.appOwnerOrganizationId | String | Contains the tenant ID where the application is registered. This is applicable only to service principals backed by applications. |
| MSGraphApplication.appRoleAssignmentRequired | Boolean | Whether users or other service principals need to be granted an application role assignment for this service principal before users can sign in or apps can get tokens. Default is false. |
| MSGraphApplication.applicationTemplateId | String | Unique identifier of the application template that the service principal was created from. |
| MSGraphApplication.createdDateTime | Date | Time the application was created. |
| MSGraphApplication.deletedDateTime | Date | Time the application was deleted. |
| MSGraphApplication.description | String | A brief description of the application. |
| MSGraphApplication.displayName | String | The display name for the application. |
| MSGraphApplication.homepage | String | Home page or landing page of the application. |
| MSGraphApplication.id | String | The unique identifier for the application. |
| MSGraphApplication.info.logoUrl | String | Content delivery network (CDN) URL to the application’s logo. |
| MSGraphApplication.info.marketingUrl | String | Link to the application’s marketing page. |
| MSGraphApplication.info.privacyStatementUrl | String | Link to the application’s privacy statement. |
| MSGraphApplication.info.supportUrl | String | Link to the application’s support page. |
| MSGraphApplication.info.termsOfServiceUrl | String | Link to the application’s terms of service statement. |
| MSGraphApplication.loginUrl | String | The URL where the service provider redirects the user to Microsoft Entra ID to authenticate. Microsoft Entra ID uses the URL to launch the application from Microsoft 365 or the Microsoft Entra My Apps. |
| MSGraphApplication.logoutUrl | String | Specifies the URL that will be used by Microsoft’s authorization service to log out an user. |
| MSGraphApplication.notes | String | The application’s notes. |
| MSGraphApplication.oauth2PermissionScopes.adminConsentDescription | String | A description of the delegated permissions, intended to be read by an administrator granting the permission on behalf of all users. This text appears in tenant-wide admin consent experiences. |
| MSGraphApplication.oauth2PermissionScopes.adminConsentDisplayName | String | The permission’s title, intended to be read by an administrator granting the permission on behalf of all users. |
| MSGraphApplication.oauth2PermissionScopes.id | String | Unique delegated permission identifier inside the collection of delegated permissions defined for a resource application. |
| MSGraphApplication.oauth2PermissionScopes.isEnabled | Boolean | Whether OAuth 2.0 permission scopes are enabled. |
| MSGraphApplication.oauth2PermissionScopes.type | String | Whether this delegated permission should be considered safe for non-admin users to consent to on behalf of themselves, or whether an administrator should be required for consent to the permissions. |
| MSGraphApplication.oauth2PermissionScopes.userConsentDescription | String | A description of the delegated permissions, intended to be read by a user granting the permission on their own behalf. This text appears in consent experiences where the user is consenting only on behalf of themselves. |
| MSGraphApplication.oauth2PermissionScopes.userConsentDisplayName | String | A title for the permission. |
| MSGraphApplication.oauth2PermissionScopes.value | String | The value to include in the scope claim in access tokens. |
| MSGraphApplication.preferredSingleSignOnMode | String | The single sign-on mode configured for this application. Microsoft Entra ID uses the preferred single sign-on mode to launch the application from Microsoft 365 or the Microsoft Entra My Apps. The supported values are password, SAML, external, and OIDC. |
| MSGraphApplication.preferredTokenSigningKeyThumbprint | String | Thumbprint of preferred certificate to sign the token. |
| MSGraphApplication.replyUrls | String | The URLs that user tokens are sent to for signing in with the associated application, or the redirect URIs that OAuth 2.0 authorization codes and access tokens are sent to for the associated application. |
| MSGraphApplication.samlSingleSignOnSettings | String | The collection for settings related to SAML single sign-on. |
| MSGraphApplication.servicePrincipalNames | String | The list of identifier URIs. |
| MSGraphApplication.servicePrincipalType | String | Identifies if the service principal represents an application or a managed identity. |
| MSGraphApplication.signInAudience | String | The audience that can sign in. |
| MSGraphApplication.tokenEncryptionKeyId | String | The key ID of a public key from the key credentials. |
| MSGraphApplication.verifiedPublisher.addedDateTime | Date | The timestamp when the verified publisher was first added or most recently updated. |
| MSGraphApplication.verifiedPublisher.displayName | String | The verified publisher name from the application publisher’s Partner Center account. |
| MSGraphApplication.verifiedPublisher.verifiedPublisherId | String | The ID of the verified publisher from the application publisher’s Partner Center account. |
Command Example
!msgraph-apps-service-principal-get id=TEST
Context Example
{'@odata.context': 'https://graph.microsoft.com/v1.0/$metadata#servicePrincipals/$entity',
'id': 'XXXX', 'deletedDateTime': None, 'accountEnabled': True, 'alternativeNames': [],
'appDisplayName': 'Test', 'appDescription': None,
'appId': 'XXXX', 'applicationTemplateId': None, 'appOwnerOrganizationId': 'XXXX',
'appRoleAssignmentRequired': False, 'createdDateTime': '', 'description': None,
'disabledByMicrosoftStatus': None, 'displayName': 'Test', 'homepage': None, 'loginUrl': None,
'logoutUrl': None, 'notes': None, 'notificationEmailAddresses': [],
'preferredSingleSignOnMode': None, 'preferredTokenSigningKeyThumbprint': None, 'replyUrls': [],
'servicePrincipalNames': ['XXXX'], 'servicePrincipalType': 'Application',
'signInAudience': 'AzureADMyOrg',
'tags': ['HideApp', 'WindowsAzureActiveDirectoryIntegratedApp'], 'tokenEncryptionKeyId': None,
'samlSingleSignOnSettings': None, 'addIns': [], 'appRoles': [],
'info': {'logoUrl': None, 'marketingUrl': None, 'privacyStatementUrl': None, 'supportUrl': None,
'termsOfServiceUrl': None}, 'keyCredentials': [], 'oauth2PermissionScopes': [],
'passwordCredentials': [], 'resourceSpecificApplicationPermissions': [],
'verifiedPublisher': {'displayName': None, 'verifiedPublisherId': None, 'addedDateTime': None}}
msgraph-apps-service-principal-update
Update the properties of servicePrincipal object.
Base Command
msgraph-apps-service-principal-update
Input
| Argument Name | Description | Required |
|---|---|---|
| id | The application id to update. Can be retrieved via the msgraph-apps-service-principal-list command. | Optional |
| app_id | The application client id to update. Can be retrieved via the msgraph-apps-service-principal-list command. | Optional |
| account_enabled | true if the service principal account is enabled; otherwise, false. Possible values are: true, false. | Optional |
| app_role_assignment_required | Specifies whether an appRoleAssignment to a user or group is required before Microsoft Entra ID will issue a user or access token to the application. Possible values are: true, false. | Optional |
| display_name | The display name for the service principal. | Optional |
| preferred_single_sign_on_mode | Specifies the single sign-on mode configured for this application. Microsoft Entra ID uses the preferred single sign-on mode to launch the application from Microsoft 365 or the Microsoft Entra My Apps. The supported values are password, saml, and oidc. Possible values are: password, saml, oidc. | Optional |
| reply_urls | A comma-separated list of the URLs that user tokens are sent to for sign in with the associated application, or the redirect URIs that OAuth 2.0 authorization codes and access tokens are sent to for the associated application. | Optional |
Context Output
There is no context output for this command.
Command Example
!msgraph-apps-service-principal-update id=TEST account_enabled=true
Human Readable Output
Service TEST was updated successfully.
msgraph-apps-service-principal-password-add
Add a strong password or secret to a service principal.
Base Command
msgraph-apps-service-principal-password-add
Input
| Argument Name | Description | Required |
|---|---|---|
| id | The application id to add password. Can be retrieved via the msgraph-apps-service-principal-list command. | Optional |
| app_id | The application client id to add password. Can be retrieved via the msgraph-apps-service-principal-list command. | Optional |
| display_name | Friendly name for the password. Optional. | Optional |
| end_date_time | The date and time at which the password expires represented using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Optional. The default value is “startDateTime + 2 years”. | Optional |
| start_date_time | The date and time at which the password becomes valid. The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 is 2014-01-01T00:00:00Z. Optional. The default value is “now”. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| MSGraphApplication.keyCredentials.customKeyIdentifier | String | Custom key identifier. |
| MSGraphApplication.keyCredentials.endDateTime | Date | The date and time at which the credential becomes valid.The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 would look like this: ‘2014-01-01T00:00:00Z’. |
| MSGraphApplication.keyCredentials.keyId | String | The unique identifier (GUID) for the key. |
| MSGraphApplication.keyCredentials.startDateTime | Date | The date and time at which the credential expires.The Timestamp type represents date and time information using ISO 8601 format and is always in UTC time. For example, midnight UTC on Jan 1, 2014 would look like this: ‘2014-01-01T00:00:00Z’. |
| MSGraphApplication.keyCredentials.displayName | String | Friendly name for the key. Optional. |
| MSGraphApplication.keyCredentials.secretText | String | The strong passwords generated by Entra ID that are 16-64 characters in length. There is no way to retrieve this password in the future. |
| MSGraphApplication.keyCredentials.hint | String | The secretText prefix. |
Command Example
!msgraph-apps-service-principal-password-add id=TEST display_name='TEST'
Context Example
{'@odata.context': '',
'customKeyIdentifier': None,
'displayName': 'TEST',
'endDateTime': '',
'hint': '',
'keyId': '',
'secretText': '',
'startDateTime': ''}
Human Readable Output
A password was added to application TEST successfully.
msgraph-apps-service-principal-password-remove
Remove a password from a service principal.
Base Command
msgraph-apps-service-principal-password-remove
Input
| Argument Name | Description | Required |
|---|---|---|
| id | The application id to remove password. Can be retrieved via the msgraph-apps-service-principal-list command. | Optional |
| app_id | The application client id to remove password. Can be retrieved via the msgraph-apps-service-principal-list command. | Optional |
| key_id | The unique identifier for the password. | Required |
Context Output
There is no context output for this command.
Command Example
!msgraph-apps-service-principal-password-remove id=TEST key_id=KEY_TEST
Human Readable Output
The password of the unique identifier KEY_TEST was removed successfully.
msgraph-apps-service-principal-unlock-configuration
Unlock configuration of a service principal.
Base Command
msgraph-apps-service-principal-unlock-configuration
Input
| Argument Name | Description | Required |
|---|---|---|
| id | The application object id (not the app id). | Required |
Context Output
There is no context output for this command.
Command Example
!msgraph-apps-service-principal-unlock-configuration id=TEST
Human Readable Output
The configuration of TEST was unlocked successfully.
msgraph-apps-service-principal-lock-configuration
Lock configuration of a service principal.
Base Command
msgraph-apps-service-principal-lock-configuration
Input
| Argument Name | Description | Required |
|---|---|---|
| id | The application object id (not the app id). | Required |
Context Output
There is no context output for this command.
Command Example
!msgraph-apps-service-principal-lock-configuration id=TEST
Human Readable Output
The configuration of TEST was locked successfully.
Configuration parameters
app_id— Application IDazure_ad_endpoint— Azure AD endpointinsecure— Trust any certificate (not secure)proxy— Use system proxy settingsauthentication_type— Authentication Typetenant_id— Tenant ID (for Client Credentials mode)credentials— Client Secret (for Client Credentials mode)managed_identities_client_id—
Commands (12)
-
msgraph-apps-auth-completeRun this command to complete the authorization process. Should be used after running the msgraph-apps-auth-start command.
-
msgraph-apps-auth-resetRun this command if for some reason you need to rerun the authentication process.
-
msgraph-apps-auth-startRun this command to start the authorization process and follow the instructions in the command results.
-
msgraph-apps-auth-testTests connectivity to Microsoft.
-
msgraph-apps-service-principal-getRetrieve the properties and relationships of a servicePrincipal object.
-
msgraph-apps-service-principal-listRetrieves a list of applications.
-
msgraph-apps-service-principal-lock-configurationLock configuration of a service principal.
-
msgraph-apps-service-principal-password-addAdd a strong password or secret to a service principal. To allow this command, use msgraph-apps-service-principal-unlock-configuration. The password will be expired in 1 hour by default.
-
msgraph-apps-service-principal-password-removeRemove a password from a service principal. To allow this command, use msgraph-apps-service-principal-unlock-configuration.
-
msgraph-apps-service-principal-removeRemoves an application from the directory.
-
msgraph-apps-service-principal-unlock-configurationUnlock configuration of a service principal.
-
msgraph-apps-service-principal-updateUpdate the properties of servicePrincipal object.
import demistomock as demisto import MicrosoftGraphApplications import pytest from CommonServerPython import * from freezegun import freeze_time from MicrosoftGraphApplications import MANAGED_IDENTITIES_TOKEN_URL, Resources, main @pytest.fixture def mocked_client(): from MicrosoftGraphApplications import Client return Client(app_id="TEST", verify=False, proxy=False, connection_type="TEST", tenant_id="TEST", enc_key="TEST") def test_reset_auth_command(mocker, requests_mock): """ Given: - When: - Calling reset_auth. Then: - Ensure the output are as expected. """ mocker.patch.object(demisto, "params", return_value={}) mocker.patch.object(demisto, "command", return_value="msgraph-apps-auth-reset") mocker.patch.object(MicrosoftGraphApplications, "return_results") main() assert ( "Authorization was reset successfully. Please regenerate the credentials, and " "then click **Test** to validate the credentials and connection." in MicrosoftGraphApplications.return_results.call_args[0][0].readable_output ) def test_auth_complete_with_managed_identities(mocker, requests_mock): """ Given: - Managed Identities client id for authentication. When: - Calling auth_complete. Then: - Ensure the output are as expected. """ mock_token = {"access_token": "test_token", "expires_in": "86400"} requests_mock.get(MANAGED_IDENTITIES_TOKEN_URL, json=mock_token) params = {"managed_identities_client_id": {"password": "test_client_id"}, "authentication_type": "Azure Managed Identities"} mocker.patch.object(demisto, "params", return_value=params) mocker.patch.object(demisto, "command", return_value="msgraph-apps-auth-complete") mocker.patch.object(MicrosoftGraphApplications, "return_results", return_value=params) main() assert "Authorization completed successfully" in MicrosoftGraphApplications.return_results.call_args[0][0] def test_auth_test_with_managed_identities(mocker, requests_mock): """ Given: - Managed Identities client id for authentication. When: - Calling auth_test. Then: - Ensure the output are as expected. """ mock_token = {"access_token": "test_token", "expires_in": "86400"} requests_mock.get(MANAGED_IDENTITIES_TOKEN_URL, json=mock_token) params = {"managed_identities_client_id": {"password": "test_client_id"}, "authentication_type": "Azure Managed Identities"} mocker.patch.object(demisto, "params", return_value=params) mocker.patch.object(demisto, "command", return_value="msgraph-apps-auth-test") mocker.patch.object(MicrosoftGraphApplications, "return_results") main() assert "✅ Success!" in MicrosoftGraphApplications.return_results.call_args[0][0] @pytest.mark.parametrize(argnames="client_id", argvalues=["test_client_id", None]) def test_test_module_command_with_managed_identities(mocker, requests_mock, client_id): """ Given: - Managed Identities client id for authentication. When: - Calling test_module. Then: - Ensure the output are as expected. """ mock_token = {"access_token": "test_token", "expires_in": "86400"} get_mock = requests_mock.get(MANAGED_IDENTITIES_TOKEN_URL, json=mock_token) params = {"managed_identities_client_id": {"password": client_id}, "authentication_type": "Azure Managed Identities"} mocker.patch.object(demisto, "params", return_value=params) mocker.patch.object(demisto, "command", return_value="test-module") mocker.patch.object(MicrosoftGraphApplications, "return_results", return_value=params) mocker.patch("MicrosoftApiModule.get_integration_context", return_value={}) main() assert "ok" in MicrosoftGraphApplications.return_results.call_args[0][0] qs = get_mock.last_request.qs assert qs["resource"] == [Resources.graph] assert (client_id and qs["client_id"] == [client_id]) or "client_id" not in qs @pytest.mark.parametrize("limit, list_url_count, next_url_count, top_param_in_url", [(10, 1, 0, True), (0, 1, 1, False)]) def test_service_principal_list_command(mocker, requests_mock, limit, list_url_count, next_url_count, top_param_in_url): """ Given: - When: - principal_list_command. Then: - Ensure the expected requests was made. """ import re mock_token = {"access_token": "test_token", "expires_in": "86400"} mock_res = {"value": [], "@odata.nextLink": "https://test_next_link.test"} get_mock = requests_mock.get(re.compile(f"^{Resources.graph}"), json=mock_res) next_link_get_mock = requests_mock.get("https://test_next_link.test", json={"value": []}) requests_mock.post("https://login.microsoftonline.com/organizations/oauth2/v2.0/token", json=mock_token) mocker.patch.object(demisto, "args", return_value={"limit": limit}) mocker.patch.object(demisto, "command", return_value="msgraph-apps-service-principal-list") main() assert get_mock.call_count == list_url_count assert next_link_get_mock.call_count == next_url_count assert ("?$top=" in str(get_mock.last_request)) == top_param_in_url @pytest.mark.parametrize( "args, expected_args", [ ({"id": "TEST", "app_id": None}, "/TEST"), ({"id": None, "app_id": "TEST"}, "(appId='TEST')"), ({"id": "TEST", "app_id": "TEST"}, "/TEST"), ], ) def test_remove_service_principals_command(mocker, requests_mock, mocked_client, args, expected_args): """ Given: - Required arguments (id or app_id or both) When: - Executing msgraph-apps-service-principal-remove command Then: - Ensure delete_service_principals client's method was called with the right argument """ from MicrosoftGraphApplications import remove_service_principals_command requests_mock.delete("https://graph.microsoft.com/v1.0/servicePrincipals/TEST", json={}) mock_delete_service_principals = mocker.patch.object(mocked_client, "delete_service_principals") remove_service_principals_command(mocked_client, args=args) assert mock_delete_service_principals.call_args[0][0] == expected_args def test_remove_service_principals_command_validation(mocked_client): """ Given: - No arguments were given When: - Executing msgraph-apps-service-principal-remove command Then: - Ensure the validation works as expected and raise an exception to missing arguments """ from MicrosoftGraphApplications import remove_service_principals_command with pytest.raises( DemistoException, match=re.escape("Either the (object's) `id` or the `application_id` arguments must be provided.") ): remove_service_principals_command(mocked_client, args={}) GET_SERVICE_PRINCIPAL_RESPONSE = { "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals/$entity", "id": "XXXX", "deletedDateTime": None, "accountEnabled": True, "alternativeNames": [], "appDisplayName": "Test", "appDescription": None, "appId": "XXXX", "applicationTemplateId": None, "appOwnerOrganizationId": "XXXX", "appRoleAssignmentRequired": False, "createdDateTime": "", "description": None, "disabledByMicrosoftStatus": None, "displayName": "Test", "homepage": None, "loginUrl": None, "logoutUrl": None, "notes": None, "notificationEmailAddresses": [], "preferredSingleSignOnMode": None, "preferredTokenSigningKeyThumbprint": None, "replyUrls": [], "servicePrincipalNames": ["XXXX"], "servicePrincipalType": "Application", "signInAudience": "AzureADMyOrg", "tags": ["HideApp", "WindowsAzureActiveDirectoryIntegratedApp"], "tokenEncryptionKeyId": None, "samlSingleSignOnSettings": None, "addIns": [], "appRoles": [], "info": {"logoUrl": None, "marketingUrl": None, "privacyStatementUrl": None, "supportUrl": None, "termsOfServiceUrl": None}, "keyCredentials": [], "oauth2PermissionScopes": [], "passwordCredentials": [], "resourceSpecificApplicationPermissions": [], "verifiedPublisher": {"displayName": None, "verifiedPublisherId": None, "addedDateTime": None}, } def test_get_service_principal_command(requests_mock, mocked_client): """ Given: - Required arguments (id or app_id or both) When: - Executing msgraph-apps-service-principal-get command Then: - Ensure the CommandResults contains the expected result """ from MicrosoftGraphApplications import get_service_principal_command mock_token = {"access_token": "test_token", "expires_in": "86400"} requests_mock.post("https://login.microsoftonline.com/organizations/oauth2/v2.0/token", json=mock_token) requests_mock.get("https://graph.microsoft.com/v1.0/servicePrincipals/TEST", json=GET_SERVICE_PRINCIPAL_RESPONSE) results = get_service_principal_command(mocked_client, args={"id": "TEST"}) assert results.outputs_prefix == "MSGraphApplication" assert results.outputs_key_field == "id" assert ( results.readable_output == "### Service Principal (application):\n|id|appId|appDisplayName|accountEnabled|\n" "|---|---|---|---|\n| XXXX | XXXX | Test | true |\n" ) assert results.outputs == GET_SERVICE_PRINCIPAL_RESPONSE @pytest.mark.parametrize( "args, expected_id, expected_args", [ ({"id": "TEST", "app_id": None, "account_enabled": "true"}, "/TEST", {"data": {"accountEnabled": True}}), ( {"id": None, "app_id": "TEST", "app_role_assignment_required": "true"}, "(appId='TEST')", {"data": {"appRoleAssignmentRequired": True}}, ), ({"id": "TEST", "app_id": "TEST"}, "/TEST", {"data": {}}), ( {"id": "TEST", "reply_urls": "https://example.com,https://example.org"}, "/TEST", {"data": {"replyUrls": ["https://example.com", "https://example.org"]}}, ), ( {"id": "TEST", "reply_urls": "https://example.com"}, "/TEST", {"data": {"replyUrls": ["https://example.com"]}}, ), ], ) def test_update_service_principals_command(mocker, requests_mock, mocked_client, args, expected_id, expected_args): """ Given: - Required arguments (id or app_id or both) When: - Executing msgraph-apps-service-principal-update command Then: - Ensure update_service_principals client's method was called with the right arguments """ from MicrosoftGraphApplications import update_service_principal_command requests_mock.patch("https://graph.microsoft.com/v1.0/servicePrincipals/TEST", json={}) mock_update_service_principals = mocker.patch.object(mocked_client, "update_single_service_principal") update_service_principal_command(mocked_client, args=args) assert mock_update_service_principals.call_args[0][0] == expected_id assert mock_update_service_principals.call_args[1] == expected_args ADD_PASSWORD_RESPONSE = { "@odata.context": "", "customKeyIdentifier": None, "displayName": "Password friendly name", "endDateTime": "", "hint": "xxx", "keyId": "", "secretText": "xxxXXXXXXXXXXX", "startDateTime": "", } @pytest.mark.parametrize( "args, expected_id, expected_args", [ ( {"id": "TEST", "app_id": None, "display_name": "Password friendly name"}, "/TEST", {"data": {"displayName": "Password friendly name", "endDateTime": "2022-02-28 12:00:00"}}, ), ( {"id": None, "app_id": "TEST", "display_name": "NAME", "end_date_time": "end", "start_date_time": "start"}, "(appId='TEST')", {"data": {"displayName": "NAME", "endDateTime": "end", "startDateTime": "start"}}, ), ], ) @freeze_time("2022-02-28 11:00:00") def test_add_password_service_principal_command(mocker, requests_mock, mocked_client, args, expected_id, expected_args): """ Given: - Required arguments (id or app_id or both and display_name) When: - Executing msgraph-apps-service-principal-password-add command Then: - Ensure add_password_service_principal client's method was called with the right arguments """ from MicrosoftGraphApplications import add_password_service_principal_command requests_mock.patch("https://graph.microsoft.com/v1.0/servicePrincipals/TEST/addPassword", json=ADD_PASSWORD_RESPONSE) mock_update_service_principals = mocker.patch.object(mocked_client, "add_password_service_principal") add_password_service_principal_command(mocked_client, args=args) assert mock_update_service_principals.call_args[0][0] == expected_id assert mock_update_service_principals.call_args[1] == expected_args @pytest.mark.parametrize( "args, expected_id, expected_args", [ ({"id": "TEST", "app_id": None, "key_id": "XXXXXX"}, "/TEST", {"data": {"keyId": "XXXXXX"}}), ({"id": None, "app_id": "TEST", "key_id": "XXXXXX"}, "(appId='TEST')", {"data": {"keyId": "XXXXXX"}}), ], ) def test_remove_password_service_principal_command(mocker, requests_mock, mocked_client, args, expected_id, expected_args): """ Given: - Required arguments (id or app_id or both and key_id) When: - Executing msgraph-apps-service-principal-password-remove command Then: - Ensure remove_password_service_principal client's method was called with the right arguments """ from MicrosoftGraphApplications import remove_password_service_principal_command requests_mock.patch("https://graph.microsoft.com/v1.0/servicePrincipals/TEST/removePassword", json={}) mock_update_service_principals = mocker.patch.object(mocked_client, "remove_password_service_principal") remove_password_service_principal_command(mocked_client, args=args) assert mock_update_service_principals.call_args[0][0] == expected_id assert mock_update_service_principals.call_args[1] == expected_args @pytest.mark.parametrize("args,", [({"id": "TEST", "app_id": None})]) def test_remove_password_service_principal_command_without_required_arg(requests_mock, args, mocked_client): """ Given: - Missing required argument (key_id) When: - Executing msgraph-apps-service-principal-password-remove command Then: - Ensure an exception is thrown due to missing required argument """ from MicrosoftGraphApplications import remove_password_service_principal_command requests_mock.patch("https://graph.microsoft.com/v1.0/servicePrincipals/TEST/removePassword", json={}) with pytest.raises(KeyError): remove_password_service_principal_command(mocked_client, args=args) def test_unlock_configuration_service_principal_command(mocker, requests_mock, mocked_client): """ Given: - Service principal (object) id When: - Executing msgraph-apps-service-principal-unlock-configuration command Then: - Ensure unlock_configuration_service_principal client's method was called with the right service_id - Ensure unlock_configuration_service_principal client's method was called with the lock == False (since here we're unlocking the configuration) """ from MicrosoftGraphApplications import change_configuration_service_principal_lock_status requests_mock.patch("https://graph.microsoft.com/beta/applications/TEST", json={}) mock_unlock_configuration_service_principal = mocker.patch.object(mocked_client, "unlock_configuration_service_principal") change_configuration_service_principal_lock_status(mocked_client, args={"id": "TEST"}, lock=False) assert mock_unlock_configuration_service_principal.call_args_list[0].kwargs["service_id"] == "TEST" assert not mock_unlock_configuration_service_principal.call_args_list[0].kwargs["lock"] def test_lock_configuration_service_principal_command(mocker, requests_mock, mocked_client): """ Given: - Service principal (object) id When: - Executing msgraph-apps-service-principal-lock-configuration command Then: - Ensure unlock_configuration_service_principal client's method was called with the right service_id - Ensure unlock_configuration_service_principal client's method was called with the lock == True (since here locking back the configuration) """ from MicrosoftGraphApplications import change_configuration_service_principal_lock_status requests_mock.patch("https://graph.microsoft.com/beta/applications/TEST", json={}) mock_unlock_configuration_service_principal = mocker.patch.object(mocked_client, "unlock_configuration_service_principal") change_configuration_service_principal_lock_status(mocked_client, args={"id": "TEST"}, lock=True) assert mock_unlock_configuration_service_principal.call_args_list[0].kwargs["service_id"] == "TEST" assert mock_unlock_configuration_service_principal.call_args_list[0].kwargs["lock"] def test_unlock_configuration_service_principal_command_exception(mocker, requests_mock, mocked_client): """ Given: - Missing service principal (object) id When: - Executing msgraph-apps-service-principal-unlock-configuration command Then: - Ensure KeyError Exception is thrown """ from MicrosoftGraphApplications import change_configuration_service_principal_lock_status requests_mock.patch("https://graph.microsoft.com/beta/applications/TEST", json={}) mocker.patch.object(mocked_client, "unlock_configuration_service_principal") with pytest.raises(KeyError): change_configuration_service_principal_lock_status(mocked_client, args={}, lock=False) def test_start_auth(mocker, mocked_client): """ Given: - A client object When: - start_auth function is called Then: - Ensure CommandResults is returned and contains the readable_output as expected """ from MicrosoftGraphApplications import start_auth mocked_client.ms_client.start_auth = mocker.patch("MicrosoftGraphApplications.MicrosoftClient.start_auth") mocked_client.ms_client.start_auth.return_value = "TEST" readable_output = "TEST" assert start_auth(client=mocked_client).readable_output == readable_output