entra-scopes-finder


Nameentra-scopes-finder JSON
Version 1.0.1 PyPI version JSON
download
home_pagehttps://github.com/kidtronnix/azure-clients
SummaryA CLI tool for finding Azure first party clients with pre-consented scopes
upload_time2025-08-01 05:50:43
maintainerNone
docs_urlNone
authorYour Name
requires_python>=3.6
licenseMIT License Copyright (c) 2025 Simon Maxwell-Stewart Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords azure entra security scopes oauth red-team
VCS
bugtrack_url
requirements requests
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Entra Scopes Finder

A powerful CLI tool for finding Azure first party clients with pre-consented scopes to the resources you require. Perfect for red team operations, security assessments, and Azure application analysis.

Data from: [entrascopes.com](https://entrascopes.com/firstpartyscopes.json).

Credits:
  - @f-bader for publishing entrascopes.com
  - @dirkjanm for publishing ROADtools (used heavily) and entrascopes.com contributor

```bash
# look for a public app with two seperate scopes
entra-scopes-finder https://graph.microsoft.com "Policy.Read.All" https://management.azure.com "user_impersonation" --public  
```

## Features

- **Multi-mode Search**: Search apps by scopes, lookup by app ID, or find by name
- **URL Resolution**: Use resource URLs or UUIDs interchangeably 
- **Multi-resource Support**: Search across multiple resources with resource-specific scopes
- **Flexible Sorting**: Sort results by permissions count, resource count, or matching criteria
- **Advanced Filtering**: Filter by FOCI (Family of Client IDs) or public client apps
- **Rich Output**: Detailed app information with permission counts and URL mappings

## Installation

### From PyPI (Recommended)
```bash
pip install entra-scopes-finder
```

### From Source
```bash
# Clone the repository
git clone https://github.com/kidtronnix/entra-scopes-finder.git
cd entra-scopes-finder

# Install in development mode
pip install -e .

# Or install directly
pip install .
```

### Verify Installation
```bash
# Check if the tool is installed
entra-scopes-finder --help

# Or use the short alias
esf --help
```

## Quick Start

```bash
# Find apps with User.Read permission for Microsoft Graph
esf https://graph.microsoft.com User.Read

# Find all Microsoft Teams related apps
esf --lookup-name "Teams"

# Find public client apps with specific scopes
esf https://graph.microsoft.com User.Read --public

# Use for quick searches
esf --lookup-name "PowerBI"
```

## Usage

### Basic Syntax
```bash
esf [OPTIONS] [RESOURCE_ID/URL [SCOPE]] [RESOURCE_ID/URL [SCOPE]] ...
```

## Operation Modes

### 1. Scope Search (Default Mode)
Find apps that have specific scopes for given resources.

```bash
# Find apps with User.Read scope for Microsoft Graph
esf https://graph.microsoft.com User.Read

# Find public and foci clients
esf https://graph.microsoft.com User.Read --public --foci

# Find apps with any scope for a resource (using UUID)
esf 00000003-0000-0000-c000-000000000000 

# Multi-resource search with different scopes
esf https://graph.microsoft.com User.Read https://management.azure.com user_impersonation
```

### 2. App Lookup

Look up a specific app by its application ID.

```bash
# Lookup specific app
esf --lookup-id "12345678-1234-1234-1234-123456789012"

# Lookup app and filter to specific resource
esf --lookup-id "12345678-1234-1234-1234-123456789012" https://graph.microsoft.com
```
Search for apps by name (supports partial matching).

```bash
# Partial name search
esf --lookup-name "Teams"

# Exact name match
esf --lookup-name "Microsoft Teams" --exact-name

# Name search with resource filtering
esf --lookup-name "Power" https://graph.microsoft.com
```

## Command Line Options

### Search Filtering
- `--foci`: Only include FOCI (Family of Client IDs) apps
- `--public`: Only include public client apps
- `--other-resources`: Include all resources the app has access to (not just searched ones)

### Resource-Scope Specification
- `--resource-scope RESOURCE SCOPE`: Explicitly specify resource-scope pairs
- `--scope SCOPE`: Apply single scope to all resources (legacy option)

### Sorting Options
- `--sort-by`: Sort results by various criteria
  - `highest_permissions` (default): Most API permissions first
  - `lowest_permissions`: Fewest API permissions first
  - `highest_resources`: Most resources first
  - `lowest_resources`: Fewest resources first

### Caching Control
- `--cache HOURS`: Cache age in hours (default: 24, set to 0 to disable)

### Result Limiting
- `--results NUMBER`: Limit the number of results displayed (default: show all results)

### Name Matching
- `--exact-name`: Require exact name match when using `--lookup-name`

## Examples

### Basic Examples

```bash
# Find all public client apps with any permission to graph.microsoft.com resource 
esf https://graph.microsoft.com --public

# Find FOCI apps with Mail.Read permission
esf https://graph.microsoft.com Mail.Read --foci

# Find public client apps sorted by fewest permissions
esf https://graph.microsoft.com User.Read --public --sort-by lowest_permissions
```

### Multi-Resource Examples

```bash
# Apps that have specific scopes for BOTH resources
esf https://graph.microsoft.com User.Read https://management.azure.com user_impersonation

# Using explicit resource-scope pairs
esf --resource-scope https://graph.microsoft.com User.Read --resource-scope https://management.azure.com user_impersonation

# Mixed URL and UUID with different scopes
esf https://graph.microsoft.com User.Read 00000002-0000-0000-c000-000000000000 Directory.Read.All
```

### Lookup Examples

```bash
# Look up specific app by ID
esf --lookup-id "027bb4ab-fec3-42ba-8850-9d48dc6f0060"

# Search for apps by name
esf --lookup-name "Microsoft Teams"

# Search with resource filtering
esf --lookup-name "Office" https://graph.microsoft.com --other-resources
```

### Advanced Examples

```bash
# Disable caching for fresh data
esf https://graph.microsoft.com User.Read --cache 0

# Limit results to first 5 apps found
esf --lookup-name "Microsoft" --results 5

# Show only the top 3 public client apps with least permissions
esf https://graph.microsoft.com User.Read --public --sort-by lowest_permissions --results 3
```

## Output Format

### App Information Display
Each matching app shows:
- **App ID**: Unique application identifier
- **Name**: Display name of the application
- **FOCI**: Whether it's part of a Family of Client IDs
- **Public Client**: Whether it's a public client application
- **Result**: Status indicator
- **Summary**: Resource count and total permission count

### Scope Information
For each resource, the output shows:
- Resource UUID with matching indicator
- Associated URL(s) for the resource
- List of all scopes/permissions for that resource
- Permission count for easy comparison

### Matching Indicators
- `<- MATCHING`: Resource has the searched scope
- `<- SEARCHED`: Resource was searched but scope not found
- No indicator: Additional resource (when `--other-resources` used)

## Resource URL Support

The script supports various Microsoft resource URLs and automatically resolves them to UUIDs:

- `https://graph.microsoft.com` → Microsoft Graph API
- `https://management.azure.com` → Azure Resource Manager API
- `https://vault.azure.net` → Azure Key Vault API
- And many more...

You can use either the full URL or the resource UUID interchangeably.

## Caching

The script includes intelligent caching to improve performance:

- **Default**: 24-hour cache for downloaded data
- **Location**: System temporary directory (`/tmp` on macOS/Linux, `%TEMP%` on Windows)
- **Cache Key**: MD5 hash of the data source URL
- **Validation**: Automatic cache age checking and fallback to fresh download

### Cache Control
```bash
# Use default 24-hour cache
esf https://graph.microsoft.com User.Read

# Disable caching (always download fresh)
esf https://graph.microsoft.com User.Read --cache 0

# Use 1-week cache
esf https://graph.microsoft.com User.Read --cache 168
```

## Common Use Cases

### Security Auditing
```bash
# Find all apps with high-privilege scopes
esf https://graph.microsoft.com Directory.ReadWrite.All --sort-by highest_permissions

# Find public client apps (potential security risk)
esf https://graph.microsoft.com User.Read --public
```

### App Discovery
```bash
# Find all Microsoft Teams related apps
esf --lookup-name "Teams"

# Find apps that can access both Graph and Azure Management APIs
esf https://graph.microsoft.com https://management.azure.com
```

### Permission Analysis
```bash
# Find apps with minimal permissions
esf https://graph.microsoft.com User.Read --sort-by lowest_permissions

# Analyze specific app's permissions
esf --lookup-id "your-app-id" --other-resources
```

## Error Handling

The script includes robust error handling for:
- Network connectivity issues
- Invalid JSON responses
- Cache file corruption
- Missing or invalid app IDs
- Malformed resource identifiers

## Data Source

The script fetches data from [entrascopes.com](https://entrascopes.com/firstpartyscopes.json), which provides comprehensive information about Microsoft first-party applications and their API permissions.

## Contributing

Feel free to submit issues, feature requests, or pull requests to improve the script's functionality.

## License

This project is provided as-is for educational and administrative purposes. Please ensure compliance with your organization's policies when analyzing application permissions.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/kidtronnix/azure-clients",
    "name": "entra-scopes-finder",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": "Stewart Maxwell <smaxwellstewart@gmail.com>",
    "keywords": "azure, entra, security, scopes, oauth, red-team",
    "author": "Your Name",
    "author_email": "Stewart Maxwell <smaxwellstewart@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/a0/14/a33b47a7206cdcb03d1dd8aaa5c748f36154f4499869f9c5adaf96e91da9/entra_scopes_finder-1.0.1.tar.gz",
    "platform": null,
    "description": "# Entra Scopes Finder\n\nA powerful CLI tool for finding Azure first party clients with pre-consented scopes to the resources you require. Perfect for red team operations, security assessments, and Azure application analysis.\n\nData from: [entrascopes.com](https://entrascopes.com/firstpartyscopes.json).\n\nCredits:\n  - @f-bader for publishing entrascopes.com\n  - @dirkjanm for publishing ROADtools (used heavily) and entrascopes.com contributor\n\n```bash\n# look for a public app with two seperate scopes\nentra-scopes-finder https://graph.microsoft.com \"Policy.Read.All\" https://management.azure.com \"user_impersonation\" --public  \n```\n\n## Features\n\n- **Multi-mode Search**: Search apps by scopes, lookup by app ID, or find by name\n- **URL Resolution**: Use resource URLs or UUIDs interchangeably \n- **Multi-resource Support**: Search across multiple resources with resource-specific scopes\n- **Flexible Sorting**: Sort results by permissions count, resource count, or matching criteria\n- **Advanced Filtering**: Filter by FOCI (Family of Client IDs) or public client apps\n- **Rich Output**: Detailed app information with permission counts and URL mappings\n\n## Installation\n\n### From PyPI (Recommended)\n```bash\npip install entra-scopes-finder\n```\n\n### From Source\n```bash\n# Clone the repository\ngit clone https://github.com/kidtronnix/entra-scopes-finder.git\ncd entra-scopes-finder\n\n# Install in development mode\npip install -e .\n\n# Or install directly\npip install .\n```\n\n### Verify Installation\n```bash\n# Check if the tool is installed\nentra-scopes-finder --help\n\n# Or use the short alias\nesf --help\n```\n\n## Quick Start\n\n```bash\n# Find apps with User.Read permission for Microsoft Graph\nesf https://graph.microsoft.com User.Read\n\n# Find all Microsoft Teams related apps\nesf --lookup-name \"Teams\"\n\n# Find public client apps with specific scopes\nesf https://graph.microsoft.com User.Read --public\n\n# Use for quick searches\nesf --lookup-name \"PowerBI\"\n```\n\n## Usage\n\n### Basic Syntax\n```bash\nesf [OPTIONS] [RESOURCE_ID/URL [SCOPE]] [RESOURCE_ID/URL [SCOPE]] ...\n```\n\n## Operation Modes\n\n### 1. Scope Search (Default Mode)\nFind apps that have specific scopes for given resources.\n\n```bash\n# Find apps with User.Read scope for Microsoft Graph\nesf https://graph.microsoft.com User.Read\n\n# Find public and foci clients\nesf https://graph.microsoft.com User.Read --public --foci\n\n# Find apps with any scope for a resource (using UUID)\nesf 00000003-0000-0000-c000-000000000000 \n\n# Multi-resource search with different scopes\nesf https://graph.microsoft.com User.Read https://management.azure.com user_impersonation\n```\n\n### 2. App Lookup\n\nLook up a specific app by its application ID.\n\n```bash\n# Lookup specific app\nesf --lookup-id \"12345678-1234-1234-1234-123456789012\"\n\n# Lookup app and filter to specific resource\nesf --lookup-id \"12345678-1234-1234-1234-123456789012\" https://graph.microsoft.com\n```\nSearch for apps by name (supports partial matching).\n\n```bash\n# Partial name search\nesf --lookup-name \"Teams\"\n\n# Exact name match\nesf --lookup-name \"Microsoft Teams\" --exact-name\n\n# Name search with resource filtering\nesf --lookup-name \"Power\" https://graph.microsoft.com\n```\n\n## Command Line Options\n\n### Search Filtering\n- `--foci`: Only include FOCI (Family of Client IDs) apps\n- `--public`: Only include public client apps\n- `--other-resources`: Include all resources the app has access to (not just searched ones)\n\n### Resource-Scope Specification\n- `--resource-scope RESOURCE SCOPE`: Explicitly specify resource-scope pairs\n- `--scope SCOPE`: Apply single scope to all resources (legacy option)\n\n### Sorting Options\n- `--sort-by`: Sort results by various criteria\n  - `highest_permissions` (default): Most API permissions first\n  - `lowest_permissions`: Fewest API permissions first\n  - `highest_resources`: Most resources first\n  - `lowest_resources`: Fewest resources first\n\n### Caching Control\n- `--cache HOURS`: Cache age in hours (default: 24, set to 0 to disable)\n\n### Result Limiting\n- `--results NUMBER`: Limit the number of results displayed (default: show all results)\n\n### Name Matching\n- `--exact-name`: Require exact name match when using `--lookup-name`\n\n## Examples\n\n### Basic Examples\n\n```bash\n# Find all public client apps with any permission to graph.microsoft.com resource \nesf https://graph.microsoft.com --public\n\n# Find FOCI apps with Mail.Read permission\nesf https://graph.microsoft.com Mail.Read --foci\n\n# Find public client apps sorted by fewest permissions\nesf https://graph.microsoft.com User.Read --public --sort-by lowest_permissions\n```\n\n### Multi-Resource Examples\n\n```bash\n# Apps that have specific scopes for BOTH resources\nesf https://graph.microsoft.com User.Read https://management.azure.com user_impersonation\n\n# Using explicit resource-scope pairs\nesf --resource-scope https://graph.microsoft.com User.Read --resource-scope https://management.azure.com user_impersonation\n\n# Mixed URL and UUID with different scopes\nesf https://graph.microsoft.com User.Read 00000002-0000-0000-c000-000000000000 Directory.Read.All\n```\n\n### Lookup Examples\n\n```bash\n# Look up specific app by ID\nesf --lookup-id \"027bb4ab-fec3-42ba-8850-9d48dc6f0060\"\n\n# Search for apps by name\nesf --lookup-name \"Microsoft Teams\"\n\n# Search with resource filtering\nesf --lookup-name \"Office\" https://graph.microsoft.com --other-resources\n```\n\n### Advanced Examples\n\n```bash\n# Disable caching for fresh data\nesf https://graph.microsoft.com User.Read --cache 0\n\n# Limit results to first 5 apps found\nesf --lookup-name \"Microsoft\" --results 5\n\n# Show only the top 3 public client apps with least permissions\nesf https://graph.microsoft.com User.Read --public --sort-by lowest_permissions --results 3\n```\n\n## Output Format\n\n### App Information Display\nEach matching app shows:\n- **App ID**: Unique application identifier\n- **Name**: Display name of the application\n- **FOCI**: Whether it's part of a Family of Client IDs\n- **Public Client**: Whether it's a public client application\n- **Result**: Status indicator\n- **Summary**: Resource count and total permission count\n\n### Scope Information\nFor each resource, the output shows:\n- Resource UUID with matching indicator\n- Associated URL(s) for the resource\n- List of all scopes/permissions for that resource\n- Permission count for easy comparison\n\n### Matching Indicators\n- `<- MATCHING`: Resource has the searched scope\n- `<- SEARCHED`: Resource was searched but scope not found\n- No indicator: Additional resource (when `--other-resources` used)\n\n## Resource URL Support\n\nThe script supports various Microsoft resource URLs and automatically resolves them to UUIDs:\n\n- `https://graph.microsoft.com` \u2192 Microsoft Graph API\n- `https://management.azure.com` \u2192 Azure Resource Manager API\n- `https://vault.azure.net` \u2192 Azure Key Vault API\n- And many more...\n\nYou can use either the full URL or the resource UUID interchangeably.\n\n## Caching\n\nThe script includes intelligent caching to improve performance:\n\n- **Default**: 24-hour cache for downloaded data\n- **Location**: System temporary directory (`/tmp` on macOS/Linux, `%TEMP%` on Windows)\n- **Cache Key**: MD5 hash of the data source URL\n- **Validation**: Automatic cache age checking and fallback to fresh download\n\n### Cache Control\n```bash\n# Use default 24-hour cache\nesf https://graph.microsoft.com User.Read\n\n# Disable caching (always download fresh)\nesf https://graph.microsoft.com User.Read --cache 0\n\n# Use 1-week cache\nesf https://graph.microsoft.com User.Read --cache 168\n```\n\n## Common Use Cases\n\n### Security Auditing\n```bash\n# Find all apps with high-privilege scopes\nesf https://graph.microsoft.com Directory.ReadWrite.All --sort-by highest_permissions\n\n# Find public client apps (potential security risk)\nesf https://graph.microsoft.com User.Read --public\n```\n\n### App Discovery\n```bash\n# Find all Microsoft Teams related apps\nesf --lookup-name \"Teams\"\n\n# Find apps that can access both Graph and Azure Management APIs\nesf https://graph.microsoft.com https://management.azure.com\n```\n\n### Permission Analysis\n```bash\n# Find apps with minimal permissions\nesf https://graph.microsoft.com User.Read --sort-by lowest_permissions\n\n# Analyze specific app's permissions\nesf --lookup-id \"your-app-id\" --other-resources\n```\n\n## Error Handling\n\nThe script includes robust error handling for:\n- Network connectivity issues\n- Invalid JSON responses\n- Cache file corruption\n- Missing or invalid app IDs\n- Malformed resource identifiers\n\n## Data Source\n\nThe script fetches data from [entrascopes.com](https://entrascopes.com/firstpartyscopes.json), which provides comprehensive information about Microsoft first-party applications and their API permissions.\n\n## Contributing\n\nFeel free to submit issues, feature requests, or pull requests to improve the script's functionality.\n\n## License\n\nThis project is provided as-is for educational and administrative purposes. Please ensure compliance with your organization's policies when analyzing application permissions.\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2025 Simon Maxwell-Stewart\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.\n        ",
    "summary": "A CLI tool for finding Azure first party clients with pre-consented scopes",
    "version": "1.0.1",
    "project_urls": {
        "Documentation": "https://github.com/kidtronnix/entra-scopes-finder#readme",
        "Homepage": "https://github.com/kidtronnix/entra-scopes-finder",
        "Issues": "https://github.com/kidtronnix/entra-scopes-finder/issues",
        "Repository": "https://github.com/kidtronnix/entra-scopes-finder"
    },
    "split_keywords": [
        "azure",
        " entra",
        " security",
        " scopes",
        " oauth",
        " red-team"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1b75eeab9c3f34aafb4c5d9403179578748a57c6e6cebd6be9db9082802961dc",
                "md5": "9a864af8979510eca96d8c5128497bdf",
                "sha256": "714aaedaab800f943b1a80622026d54ff0dd139deef57d79d57f21c6ca843d6a"
            },
            "downloads": -1,
            "filename": "entra_scopes_finder-1.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "9a864af8979510eca96d8c5128497bdf",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 13187,
            "upload_time": "2025-08-01T05:50:42",
            "upload_time_iso_8601": "2025-08-01T05:50:42.114405Z",
            "url": "https://files.pythonhosted.org/packages/1b/75/eeab9c3f34aafb4c5d9403179578748a57c6e6cebd6be9db9082802961dc/entra_scopes_finder-1.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a014a33b47a7206cdcb03d1dd8aaa5c748f36154f4499869f9c5adaf96e91da9",
                "md5": "c03acbb39534cf6fca5da8e0e8f975d5",
                "sha256": "e6f9ca0e9301c9616c2b3de75e445e7d3771ff6118e67a022b3788f99aff4577"
            },
            "downloads": -1,
            "filename": "entra_scopes_finder-1.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "c03acbb39534cf6fca5da8e0e8f975d5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 16261,
            "upload_time": "2025-08-01T05:50:43",
            "upload_time_iso_8601": "2025-08-01T05:50:43.160752Z",
            "url": "https://files.pythonhosted.org/packages/a0/14/a33b47a7206cdcb03d1dd8aaa5c748f36154f4499869f9c5adaf96e91da9/entra_scopes_finder-1.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-01 05:50:43",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "kidtronnix",
    "github_project": "azure-clients",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.20.0"
                ]
            ]
        }
    ],
    "lcname": "entra-scopes-finder"
}
        
Elapsed time: 1.57645s