Skip to content

Commit dc0bff8

Browse files
committed
docs: streamline camp endings and fix typo
1 parent dd81af0 commit dc0bff8

2 files changed

Lines changed: 12 additions & 109 deletions

File tree

docs/camps/base-camp.md

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -542,39 +542,20 @@ Start with **Waypoint 1** and work through each waypoint in order. By the end, y
542542
:material-check: **RBAC** - Role-based access control for fine-grained permissions
543543
:material-check: **Audit logging** - Track every access for compliance
544544

545-
## Summary & Key Takeaways
545+
## Base Camp Recap
546546

547-
!!! success "What You've Learned"
548-
**Vulnerability Demonstrated:** Unauthenticated MCP servers expose all data
549-
**OWASP Risk:** MCP07 - Insufficient Authentication & Authorization
550-
**Fix Applied:** Token-based authentication on every request
551-
**Pattern Learned:** The "vulnerable → exploit → fix → validate" methodology
552-
553-
### What's Next in Camp 1?
554-
555-
Base Camp used simple bearer tokens for demonstration. **Camp 1: Identity & Access Management** will upgrade to production-grade security:
556-
557-
- **OAuth 2.1** with PKCE (S256 method)
558-
- **Azure Managed Identity** for passwordless authentication
559-
- **Azure Key Vault** for secrets management
560-
- **RBAC** for least-privilege access control
561-
562-
Then **Camp 2: Gateway & Network Security** will add centralized API/MCP Gateway protection with Azure API Management.
547+
| What You Validated | Outcome |
548+
|--------------------|---------|
549+
| Vulnerability | Unauthenticated MCP access exposed all user data |
550+
| OWASP risks | MCP01 (Token Mismanagement), MCP07 (Insufficient Auth) |
551+
| Security fix | Token-based authentication + per-user authorization |
552+
| Validation method | Automated exploit and secure tests (`test_vulnerable.py`, `test_secure.py`) |
553+
| Core pattern | vulnerable → exploit → fix → validate |
563554

564555
---
565556

566-
## Additional Resources
567-
568-
!!! tip "Learn More"
569-
**Source Code:** All code is available in the [GitHub repository](https://github.com/Azure-Samples/sherpa/tree/main/camps/base-camp)
570-
571-
**OWASP Guide References:**
572-
573-
- [MCP01: Token Mismanagement & Secret Exposure](https://microsoft.github.io/mcp-azure-security-guide/mcp/mcp01-token-mismanagement/)
574-
- [MCP07: Insufficient Authentication & Authorization](https://microsoft.github.io/mcp-azure-security-guide/mcp/mcp07-authz/)
557+
[Continue: Camp 1 Identity & Access Management →](camp1-identity.md){ .md-button .md-button--primary }
575558

576559
---
577560

578-
**Ready to continue the ascent?** Head to [Camp 1: Identity & Access Management](camp1-identity.md)
579-
580-
*Base Camp complete! You've learned the fundamentals. Now let's climb higher.* 🏔️
561+
[Prerequisites](../prerequisites.md) | [Camp 1: Identity & Access Management](camp1-identity.md)

docs/camps/camp1-identity.md

Lines changed: 2 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -831,7 +831,7 @@ Camp 1 follows six waypoints, each building on the previous one. Click each wayp
831831

832832
---
833833

834-
??? example "Option A: Device Code Flow (Understaning OAuth)"
834+
??? example "Option A: Device Code Flow (Understanding OAuth)"
835835

836836
**Best for:** Learning OAuth mechanics, CLI automation, headless environments
837837

@@ -1406,85 +1406,7 @@ az ad app delete --id $APP_ID
14061406

14071407
---
14081408

1409-
## Next Steps
1410-
1411-
### Immediate Actions
1412-
1413-
- Review your own MCP servers for token exposure
1414-
- Migrate hardcoded secrets to Key Vault
1415-
- Implement OAuth 2.1 for production servers
1416-
- Apply least-privilege RBAC everywhere
1417-
1418-
### Continue the Journey
1419-
1420-
Ready for the next challenge? Proceed to:
1421-
1422-
**[Camp 2: Gateway & Network Security →](camp2-gateway/index.md)**
1423-
1424-
Learn about:
1425-
1426-
- Gateway patterns for MCP
1427-
- Rate limiting and throttling
1428-
- Network security controls
1429-
- DDoS protection
1430-
- Traffic monitoring
1431-
1432-
---
1433-
1434-
## Additional Resources
1435-
1436-
- [Azure Managed Identity Documentation](https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/)
1437-
- [Azure Key Vault Best Practices](https://learn.microsoft.com/azure/key-vault/general/best-practices)
1438-
- [OAuth 2.1 Specification](https://oauth.net/2.1/)
1439-
- [OWASP MCP Azure Security Guide](https://microsoft.github.io/mcp-azure-security-guide/)
1440-
- [FastMCP Authentication Documentation](https://github.com/jlowin/fastmcp)
1441-
1442-
---
1443-
1444-
## Troubleshooting
1445-
1446-
??? question "Issue: azd up fails with subscription access error"
1447-
**Solution:** Ensure you're logged in with correct subscription:
1448-
```bash
1449-
az login
1450-
az account set --subscription "<your-subscription-id>"
1451-
azd auth login
1452-
```
1453-
1454-
??? question "Issue: Token acquisition fails"
1455-
**Solution:** Ensure you're logged in with `az login` and have correct app registration:
1456-
```bash
1457-
az login
1458-
# Verify tenant
1459-
az account show --query tenantId -o tsv
1460-
# Re-run registration if needed
1461-
./scripts/register-entra-app.sh
1462-
```
1463-
1464-
??? question "Issue: Key Vault access denied"
1465-
**Solution:** Verify Managed Identity has "Key Vault Secrets User" role:
1466-
```bash
1467-
./scripts/enable-managed-identity.sh
1468-
# Check role assignments
1469-
azd env get-values | grep AZURE_MANAGED_IDENTITY_PRINCIPAL_ID
1470-
```
1471-
1472-
??? question "Issue: JWT validation fails with 'Invalid audience'"
1473-
**Solution:** Ensure AZURE_CLIENT_ID matches your Entra ID app:
1474-
```bash
1475-
azd env get-values | grep -E "AZURE_CLIENT_ID|AZURE_TENANT_ID"
1476-
# Verify these match your app registration in Azure Portal
1477-
```
1478-
1479-
??? question "Issue: Can't find deployed container app URL"
1480-
**Solution:** Get deployment information:
1481-
```bash
1482-
azd env get-values | grep URL
1483-
# Or check in Azure Portal:
1484-
# Resource Group → Container App → Overview → Application Url
1485-
```
1486-
1487-
---
1409+
[Continue: Camp 2 Gateway Security →](camp2-gateway/index.md){ .md-button .md-button--primary }
14881410

14891411
---
14901412

0 commit comments

Comments
 (0)