[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FDBCR3DBZBASN96Q1NNFH7":3,"skill-same:01M6FDBCR3DBZBASN96Q1NNFH7":53},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":28,"frontMatter":29,"refName":30,"commitSha":31,"skillDirectory":32,"forksCount":33,"repositoryHtmlUrl":34,"repositoryHomepageUrl":35,"ownerHtmlUrl":36,"ownerBlogUrl":6,"ownerDescription":37,"updatedAt":38,"install":39,"resources":52},"01M6FDBCR3DBZBASN96Q1NNFH7","entra-app-registration",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fmicrosoft\u002Fskills\u002Fentra-app-registration\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24,25],"entra app registration","registration","app","2026-11-10 10:12:30",false,"## Overview\n\nMicrosoft Entra ID (formerly Azure Active Directory) is Microsoft's cloud-based identity and access management service. App registrations allow applications to authenticate users and access Azure resources securely.\n\n### Key Concepts\n\n| Concept | Description |\n|---------|-------------|\n| **App Registration** | Configuration that allows an app to use Microsoft identity platform |\n| **Application (Client) ID** | Unique identifier for your application |\n| **Tenant ID** | Unique identifier for your Azure AD tenant\u002Fdirectory |\n| **Client Secret** | Password for the application (confidential clients only) |\n| **Redirect URI** | URL where authentication responses are sent |\n| **API Permissions** | Access scopes your app requests |\n| **Service Principal** | Identity created in your tenant when you register an app |\n\n### Application Types\n\n| Type | Use Case |\n|------|----------|\n| **Web Application** | Server-side apps, APIs |\n| **Single Page App (SPA)** | JavaScript\u002FReact\u002FAngular apps |\n| **Mobile\u002FNative App** | Desktop, mobile apps |\n| **Daemon\u002FService** | Background services, APIs |\n\n## Core Workflow\n\n### Step 1: Register the Application\n\nCreate an app registration in the Azure portal or using Azure CLI.\n\n**Portal Method:**\n1. Navigate to Azure Portal → Microsoft Entra ID → App registrations\n2. Click \"New registration\"\n3. Provide name, supported account types, and redirect URI\n4. Click \"Register\"\n\n**CLI Method:** See [references\u002Fcli-commands.md](references\u002Fcli-commands.md)\n**IaC Method:** See [references\u002FBICEP-EXAMPLE.bicep](references\u002FBICEP-EXAMPLE.bicep)\n\nIt's highly recommended to use the IaC to manage Entra app registration if you already use IaC in your project, need a scalable solution for managing lots of app registrations or need fine-grained audit history of the configuration changes. \n\n### Step 2: Configure Authentication\n\nSet up authentication settings based on your application type.\n\n- **Web Apps**: Add redirect URIs, enable ID tokens if needed\n- **SPAs**: Add redirect URIs, enable implicit grant flow if necessary\n- **Mobile\u002FDesktop**: Use `http:\u002F\u002Flocalhost` or custom URI scheme\n- **Services**: No redirect URI needed for client credentials flow\n\n### Step 3: Configure API Permissions\n\nGrant your application permission to access Microsoft APIs or your own APIs.\n\n**Common Microsoft Graph Permissions:**\n- `User.Read` - Read user profile\n- `User.ReadWrite.All` - Read and write all users\n- `Directory.Read.All` - Read directory data\n- `Mail.Send` - Send mail as a user\n\n**Details:** See [references\u002Fapi-permissions.md](references\u002Fapi-permissions.md)\n\n### Step 4: Create Client Credentials (if needed)\n\nFor confidential client applications (web apps, services), create a client secret, certificate or federated identity credential.\n\n**Client Secret:**\n- Navigate to \"Certificates & secrets\"\n- Create new client secret\n- Copy the value immediately (only shown once)\n- Store securely (Key Vault recommended)\n\n**Certificate:** For production environments, use certificates instead of secrets for enhanced security. Upload certificate via \"Certificates & secrets\" section.\n\n**Federated Identity Credential:** For dynamically authenticating the confidential client to Entra platform.\n\n### Step 5: Implement OAuth Flow\n\nIntegrate the OAuth flow into your application code.\n\n**See:**\n- [references\u002Foauth-flows.md](references\u002Foauth-flows.md) - OAuth 2.0 flow details\n- [references\u002Fconsole-app-example.md](references\u002Fconsole-app-example.md) - Console app implementation\n\n## Common Patterns\n\n### Pattern 1: First-Time App Registration\n\nWalk user through their first app registration step-by-step.\n\n**Required Information:**\n- Application name\n- Application type (web, SPA, mobile, service)\n- Redirect URIs (if applicable)\n- Required permissions\n\n**Script:** See [references\u002Ffirst-app-registration.md](references\u002Ffirst-app-registration.md)\n\n### Pattern 2: Console Application with User Authentication\n\nCreate a .NET\u002FPython\u002FNode.js console app that authenticates users.\n\n**Required Information:**\n- Programming language (C#, Python, JavaScript, etc.)\n- Authentication library (MSAL recommended)\n- Required permissions\n\n**Example:** See [references\u002Fconsole-app-example.md](references\u002Fconsole-app-example.md)\n\n### Pattern 3: Service-to-Service Authentication\n\nSet up daemon\u002Fservice authentication without user interaction.\n\n**Required Information:**\n- Service\u002Fapp name\n- Target API\u002Fresource\n- Whether to use secret or certificate\n\n**Implementation:** Use Client Credentials flow (see [references\u002Foauth-flows.md#client-credentials-flow](references\u002Foauth-flows.md#client-credentials-flow))\n\n## MCP Tools and CLI\n\n### Azure CLI Commands\n\n| Command | Purpose |\n|---------|---------|\n| `az ad app create` | Create new app registration |\n| `az ad app list` | List app registrations |\n| `az ad app show` | Show app details |\n| `az ad app permission add` | Add API permission |\n| `az ad app credential reset` | Generate new client secret |\n| `az ad sp create` | Create service principal |\n\n**Complete reference:** See [references\u002Fcli-commands.md](references\u002Fcli-commands.md)\n\n### Microsoft Authentication Library (MSAL)\n\nMSAL is the recommended library for integrating Microsoft identity platform.\n\n**Supported Languages:**\n- .NET\u002FC# - `Microsoft.Identity.Client`\n- JavaScript\u002FTypeScript - `@azure\u002Fmsal-browser`, `@azure\u002Fmsal-node`\n- Python - `msal`\n\n**Examples:** See [references\u002Fconsole-app-example.md](references\u002Fconsole-app-example.md)\n\n## Security Best Practices\n\n| Practice | Recommendation |\n|----------|---------------|\n| **Never hardcode secrets** | Use environment variables, Azure Key Vault, or managed identity |\n| **Rotate secrets regularly** | Set expiration, automate rotation |\n| **Use certificates over secrets** | More secure for production |\n| **Least privilege permissions** | Request only required API permissions |\n| **Enable MFA** | Require multi-factor authentication for users |\n| **Use managed identity** | For Azure-hosted apps, avoid secrets entirely |\n| **Validate tokens** | Always validate issuer, audience, expiration |\n| **Use HTTPS only** | All redirect URIs must use HTTPS (except localhost) |\n| **Monitor sign-ins** | Use Entra ID sign-in logs for anomaly detection |\n\n## SDK Quick References\n\n- **Azure Identity**: [Python](references\u002Fsdk\u002Fazure-identity-py.md) | [.NET](references\u002Fsdk\u002Fazure-identity-dotnet.md) | [TypeScript](references\u002Fsdk\u002Fazure-identity-ts.md) | [Java](references\u002Fsdk\u002Fazure-identity-java.md) | [Rust](references\u002Fsdk\u002Fazure-identity-rust.md)\n- **Key Vault (secrets)**: [Python](references\u002Fsdk\u002Fazure-keyvault-py.md) | [TypeScript](references\u002Fsdk\u002Fazure-keyvault-secrets-ts.md)\n- **Auth Events**: [.NET](references\u002Fsdk\u002Fmicrosoft-azure-webjobs-extensions-authentication-events-dotnet.md)\n\n## References\n\n- [OAuth Flows](references\u002Foauth-flows.md) - Detailed OAuth 2.0 flow explanations\n- [CLI Commands](references\u002Fcli-commands.md) - Azure CLI reference for app registrations\n- [Console App Example](references\u002Fconsole-app-example.md) - Complete working examples\n- [First App Registration](references\u002Ffirst-app-registration.md) - Step-by-step guide for beginners\n- [API Permissions](references\u002Fapi-permissions.md) - Understanding and configuring permissions\n- [Troubleshooting](references\u002Ftroubleshooting.md) - Common issues and solutions\n\n## External Resources\n\n- [Microsoft Identity Platform Documentation](https:\u002F\u002Flearn.microsoft.com\u002Fentra\u002Fidentity-platform\u002F)\n- [OAuth 2.0 and OpenID Connect protocols](https:\u002F\u002Flearn.microsoft.com\u002Fentra\u002Fidentity-platform\u002Fv2-protocols)\n- [MSAL Documentation](https:\u002F\u002Flearn.microsoft.com\u002Fentra\u002Fmsal\u002F)\n- [Microsoft Graph API](https:\u002F\u002Flearn.microsoft.com\u002Fgraph\u002F)\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fmicrosoft\u002Fskills\u002Fentra-app-registration",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill entra-app-registration",{"tool":45,"command":46},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill entra-app-registration",{"tool":48,"command":49},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill entra-app-registration","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fmicrosoft\u002Fskills\u002Fentra-app-registration\u002FSKILL.md",true,[],[54,64,74,83,89,96],{"skillNo":55,"name":56,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":60,"publishedAt":26},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[59],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[61,62,63],"model","model hierarchy","model hierarchy skill",{"skillNo":65,"name":66,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":70,"publishedAt":26},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[69],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[71,72,73],"MCP","zoom","zoom mcp",{"skillNo":75,"name":76,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":26},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[80,81,82,72],"sdk","zoom apps sdk","apps",{"skillNo":84,"name":85,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":26},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[85],{"skillNo":90,"name":91,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":95,"publishedAt":26},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[94],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[91],{"skillNo":97,"name":98,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":26},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[98]]