This guide covers creating and configuring the Microsoft Entra ID app registration required for IntuneGet.
IntuneGet uses a multi-tenant app registration that allows users from any Microsoft 365 organization to:
- Sign in with their work account
- Grant admin consent for app deployment permissions
- Deploy applications to their Intune tenant
- Go to Azure Portal
- Navigate to Microsoft Entra ID > App registrations
- Click New registration
| Setting | Value |
|---|---|
| Name | IntuneGet (or your preferred name) |
| Supported account types | Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) |
| Redirect URI (type) | Single-page application (SPA) |
| Redirect URI (value) | http://localhost:3000 (development) |
- Click Register
After registration, add your production redirect URI:
- Go to Authentication in the left menu
- Under Single-page application, click Add URI
- Add your production URL:
https://your-domain.com - Click Save
IntuneGet requires two types of permissions:
- Go to API permissions in the left menu
- Click Add a permission
- Select Microsoft Graph
- Select Delegated permissions
- Search and add:
User.Read - Click Add permissions
- Click Add a permission again
- Select Microsoft Graph
- Select Application permissions
- Search and add:
DeviceManagementApps.ReadWrite.All - Search and add:
DeviceManagementManagedDevices.Read.All - Click Add permissions
Your permissions should look like this:
| Permission | Type | Status |
|---|---|---|
| User.Read | Delegated | Granted for your org |
| DeviceManagementApps.ReadWrite.All | Application | Requires admin consent |
| DeviceManagementManagedDevices.Read.All | Application | Requires admin consent |
- Go to Certificates & secrets in the left menu
- Click New client secret
- Add a description:
IntuneGet Production - Select expiration (recommend: 24 months)
- Click Add
- Immediately copy the secret value - it won't be shown again
After setup, collect these values for your environment configuration:
| Value | Location | Environment Variable |
|---|---|---|
| Application (client) ID | Overview page | NEXT_PUBLIC_AZURE_AD_CLIENT_ID |
| Client secret | Certificates & secrets | AZURE_AD_CLIENT_SECRET (AZURE_CLIENT_SECRET also supported) |
When users from other organizations use IntuneGet, a Global Administrator from their tenant must grant consent for the application permissions.
- User signs in to IntuneGet
- IntuneGet checks if admin consent was granted
- If not, user sees instructions to request consent
- Global Admin visits the consent URL
- Admin reviews and grants permissions
- User can now deploy apps
https://login.microsoftonline.com/{tenant-id}/adminconsent?client_id={client-id}&redirect_uri={redirect-uri}
Example:
https://login.microsoftonline.com/contoso.onmicrosoft.com/adminconsent?client_id=12345678-1234-1234-1234-123456789abc&redirect_uri=https://intuneget.com
For the packaging pipeline, you also need to configure secrets in your GitHub repository:
- Go to your GitHub repository > Settings > Secrets and variables > Actions
- Add these repository secrets:
| Secret Name | Value |
|---|---|
AZURE_CLIENT_ID |
Same as NEXT_PUBLIC_AZURE_AD_CLIENT_ID |
AZURE_CLIENT_SECRET |
Same as AZURE_AD_CLIENT_SECRET |
- Rotate secrets regularly - Set calendar reminders before expiration
- Use separate registrations - Create separate apps for dev/staging/production
- Monitor sign-ins - Review sign-in logs in Azure AD periodically
- Limit admin consent - Educate admins about what permissions they're granting
Your redirect URI doesn't match what's configured:
- Check the exact URL (including trailing slashes)
- Verify it's added as a SPA redirect, not Web
Admin consent hasn't been granted:
- Direct the admin to the consent URL
- Ensure they're using a Global Administrator account
- Verify they click "Accept" on the consent screen
The client ID is incorrect or the app was deleted:
- Verify
NEXT_PUBLIC_AZURE_AD_CLIENT_IDis correct - Check the app still exists in Azure AD
The client secret is wrong or expired:
- Check
AZURE_AD_CLIENT_SECRET(orAZURE_CLIENT_SECRET) matches the secret in Azure - Verify the secret hasn't expired
- Create a new secret if needed