DAuth या बाहरी OAuth के साथ MCP सर्वरों को सुरक्षित रखें
MCP सर्वर OAuth 2.1 टोकन की आवश्यकता कर सकते हैं। प्रबंधित प्रमाणीकरण और क्रेडेंशियल पृथक्करण के लिए DAuth (Dedalus Auth) चुनें, या अपना स्वयं का ऑथराइज़ेशन सर्वर उपयोग करें।
## DAuth (Dedalus Auth)
DAuth Dedalus की managed authorization प्रणाली है। यह OAuth 2.1 टोकन जारी करती है, एक प्रमुख सुरक्षा गुण के साथ: credentials कभी भी sealed execution boundary से बाहर नहीं निकलते।
### DAuth क्यों?
पारंपरिक क्रेडेंशियल हैंडलिंग में आपके एप्लिकेशन कोड के सामने सीक्रेट्स उजागर हो जाते हैं। DAuth क्रेडेंशियल्स को एक सुरक्षित एन्क्लेव में अलग रखता है—आपके MCP सर्वर को रॉ API कुंजियों के बजाय एक अपारदर्शी कनेक्शन हैंडल प्राप्त होता है।
क्रेडेंशियल्स कभी उजागर नहीं होते — Client-side पर एन्क्रिप्टेड, केवल एक सीलबंद execution boundary के भीतर ही डिक्रिप्टेड
अपारदर्शी हैंडल्स — आपका कोड कनेक्शनों को हैंडल के ज़रिए संदर्भित करता है, कभी रॉ सीक्रेट्स नहीं देखता
Sender-constrained टोकन्स — टोकन क्रिप्टोग्राफ़िक रूप से Client से बंधे होते हैं; चुराए गए टोकन अमान्य/बेकार होते हैं
Networkless execution — क्रेडेंशियल डिक्रिप्शन और API कॉल पूरी तरह से एक आइसोलेटेड एन्क्लेव के भीतर ही होते हैं; रॉ सीक्रेट्स कभी भी नेटवर्क पर ट्रांसफ़र नहीं होते
DAuth कैसे काम करता है
जानें कि क्रेडेंशियल आइसोलेशन और सील्ड एक्ज़ीक्यूशन आपके सीक्रेट्स की सुरक्षा कैसे करते हैं।
डिफ़ॉल्ट रूप से, authorization_servers का मान https://as.dedaluslabs.ai (DAuth कंट्रोल प्लेन) पर सेट होता है।GitHub और Supabase इंटीग्रेशन के साथ एक पूरी तरह कार्यशील उदाहरण के लिए:
उदाहरण MCP सर्वर
GitHub और Supabase इंटीग्रेशन वाला प्रोडक्शन के लिए तैयार सर्वर।
बिना प्रमाणीकरण वाले अनुरोधों पर 401 लौटाया जाता है, जिसमें WWW-Authenticate चैलेंज सुरक्षित संसाधन के मेटाडेटा की ओर संकेत करता है।
### सर्वर स्तर के स्कोप
सभी रिक्वेस्ट के लिए ये स्कोप अनिवार्य हैं। स्कोप नाम वे मनचाही स्ट्रिंग्स होते हैं जिन्हें आप खुद परिभाषित करते हैं—आम पैटर्न सामान्य एक्सेस के लिए read/write या सूक्ष्म नियंत्रण के लिए resource:action (जैसे files:delete) होते हैं।
authorization=AuthorizationConfig( enabled=True, required_scopes=["read", "write"], # सभी tools के लिए अनिवार्य
### प्रत्येक टूल के लिए scopes
संवेदनशील टूल्स को अतिरिक्त scope आवश्यकताओं के साथ सुरक्षित करें:
from dedalus_mcp import tool@tool(description="List files")def list_files(path: str) -> list[str]: return os.listdir(path) # कोई अतिरिक्त स्कोप की आवश्यकता नहीं@tool(description="Delete file", required_scopes=["files:delete"])def delete_file(path: str) -> dict: os.remove(path) return {"deleted": path}
read अनुमति वाला टोकन list_files को कॉल कर सकता है। files:delete अनुमति के बिना delete_file को कॉल करने पर त्रुटि मिलती है:
अपने टूल्स में प्रमाणित उपयोगकर्ता की जानकारी जाँचें:
from dedalus_mcp import tool, get_context@tool(description="Get current user")def whoami() -> dict: ctx = get_context() auth = ctx.auth # AuthorizationContext या None if auth is None: return {"user": "anonymous"} return { "subject": auth.subject, "scopes": auth.scopes, "claims": auth.claims, }
### DPoP समर्थन
DAuth डिफ़ॉल्ट रूप से DPoP (Demonstrating Proof-of-Possession) का उपयोग करता है। टोकन क्रिप्टोग्राफ़िक रूप से Client की key से बंधे होते हैं—यदि कोई टोकन चोरी हो भी जाए, तो संबंधित private key के बिना वह बेकार है।
server = MCPServer( "dpop-server", authorization=AuthorizationConfig( enabled=True, dpop_required=True, ),)
### Environment variable
ध्यान रखें कि इन वेरिएबल्स को अपने एनवायरमेंट में जोड़ें। DAuth, Dedalus SDK (सॉफ्टवेयर डेवलपमेंट किट) के साथ नैटिव रूप से काम करता है, इसलिए एक API कुंजी आवश्यक है। अपनी API कुंजी डैशबोर्ड से प्राप्त करें।
# Dedalus प्लेटफ़ॉर्म (_client.py परीक्षण के लिए)DEDALUS_API_KEY=dsk-live-...DEDALUS_API_URL=https://api.dedaluslabs.aiDEDALUS_AS_URL=https://as.dedaluslabs.ai
## बाहरी ऑथराइज़ेशन सर्वर
मौजूदा पहचान (identity) इंफ्रास्ट्रक्चर के साथ इंटीग्रेशन करते समय आप DAuth की बजाय अपना खुद का OAuth 2.1 प्रोवाइडर उपयोग कर सकते हैं।
बाहरी ऑथराइज़ेशन सर्वर sealed execution मॉडल उपलब्ध नहीं कराते। आपके MCP सर्वर को क्रेडेंशियल्स को
सीधे संभालना होगा।
### कस्टम प्रोवाइडर
from dedalus_mcp.server import AuthorizationConfig, JWTValidatorConfig, JWTValidatorserver = MCPServer( "my-server", authorization=AuthorizationConfig( enabled=True, authorization_servers=["https://auth.mycompany.com"], required_scopes=["api:access"], ),)# अपने प्रोवाइडर के लिए JWT सत्यापन को कॉन्फ़िगर करेंjwt_config = JWTValidatorConfig( jwks_uri="https://auth.mycompany.com/.well-known/jwks.json", issuer="https://auth.mycompany.com", audience="https://my-mcp-server.example.com",)server.set_authorization_provider(JWTValidator(jwt_config))