अवधारणाएँ
कुछ बातें समझ लें, तो Usher की लगभग हर चीज़ समझ में आ जाती है: चीज़ें कहाँ रहती हैं, टोकन कौन जारी करता है, लोग कहाँ साइन इन करते हैं, और हर टोकन कितनी देर चलता है।
वर्कस्पेस, प्रोजेक्ट और एनवायरनमेंट
- वर्कस्पेस Usher Console में आपकी टीम या कंपनी है। इसके सदस्य और इसका ऑडिट लॉग इसी के होते हैं।
- प्रोजेक्ट एक प्रोडक्ट है: आपका वेब ऐप, या कोई पार्टनर पोर्टल। एक वर्कस्पेस में कई प्रोजेक्ट हो सकते हैं।
- एनवायरनमेंट किसी प्रोजेक्ट की एक चलती हुई कॉपी है, आम तौर पर development और production। लोग, ऐप्लिकेशन, कुंजियाँ और सेटिंग्ज़ एनवायरनमेंट में ही रहती हैं।
वर्कस्पेस · Acme Ltd
प्रोजेक्ट · वेब
- development · wise-otter-42
- production · acme
प्रोजेक्ट · पार्टनर पोर्टल
- development · calm-heron-17
- production · acme-partners
एनवायरनमेंट ऐसी कोई चीज़ साझा नहीं करते जो मायने रखती हो। हर एक का अपना Postgres स्कीमा, अपनी साइनिंग कुंजियाँ, और अपनी डेटा कुंजी के तहत सील किए गए अपने सीक्रेट होते हैं। जो व्यक्ति development में साइन अप करता है, वह production में मौजूद नहीं होता, और एक एनवायरनमेंट का टोकन कभी दूसरे की कुंजियों से वेरिफ़ाई नहीं हो सकता।
वर्कस्पेस एडमिन किसी प्रोजेक्ट को उसके “अवलोकन” पेज के आख़िर से, प्रोजेक्ट का नाम टाइप करने के बाद, डिलीट कर सकता है। उसमें मौजूद हर एनवायरनमेंट एक साथ हट जाता है: उसके लोग, ऐप्लिकेशन, कुंजियाँ और सेटिंग्ज़, और उसके दिए हर सेशन और टोकन। प्रोजेक्ट के पते जवाब देना बंद कर देते हैं और फिर कभी किसी को नहीं दिए जाते, ताकि जो ऐप अब भी इनमें से किसी पते पर भरोसा करता है, उसे किसी और का प्रोजेक्ट धोखा न दे सके।
इश्यूअर
हर एनवायरनमेंट अपना अलग OpenID Connect इश्यूअर है, टेनेंट डोमेन पर अपने ख़ुद के होस्ट पर:
https://<handle>.usherid.com- Production एनवायरनमेंट का हैंडल आप चुनते हैं: 3 से 32 छोटे अंग्रेज़ी अक्षर, अंक और हाइफ़न (लगातार दो नहीं), जैसे आपकी कंपनी का नाम। एक बार इस्तेमाल हुआ हैंडल फिर कभी किसी को नहीं दिया जाता।
- Development एनवायरनमेंट को एक रैंडम हैंडल मिलता है, जैसे
wise-otter-42, जिसे कोई किसी ब्रैंड के साथ नहीं उलझाएगा।
इश्यूअर एनवायरनमेंट बनते समय ही तय हो जाता है, क्योंकि वह जो भी टोकन साइन करता है, उसके iss में उसका नाम होता है, और उस पर भरोसा करने वाला हर ऐप यह वैल्यू जाँचता है।
टेनेंट डोमेन, Usher के अपने डोमेन (usheridentity.com) से अलग एक रजिस्टर करने योग्य डोमेन है, इसलिए किसी ग्राहक के साइन-इन पेज कभी Usher Console के साथ same-site नहीं होते, और कुकी होस्ट-ओनली होती हैं: ब्राउज़र किसी एनवायरनमेंट की कुकी सिर्फ़ उसी एनवायरनमेंट को भेजता है।
Lobby
Lobby वह साइन-इन पेज है जिसे हर एनवायरनमेंट अपने इश्यूअर पर होस्ट करता है। आपका ऐप लोगों को वहाँ भेजता है; वह उन्हें साइन इन कराती है और वापस भेज देती है।
- यह “… पर जा रहे हैं” चिप में हमेशा उस ऐप का नाम दिखाती है, जिस पर व्यक्ति जा रहा है।
- यह सिर्फ़ वही तरीक़े दिखाती है जिनकी एनवायरनमेंट अनुमति देता है: पासकी, ईमेल से भेजे गए कोड, मैजिक लिंक, सोशल खाते (Google, GitHub, Microsoft, Apple) और पासवर्ड।
- यह दूसरा फ़ैक्टर अनिवार्य कर सकती है: ऑथेंटिकेटर ऐप (बैकअप कोड के साथ) या पासकी।
- यह सबके लिए खुली हो सकती है, या पतों और डोमेन की मेहमान सूची तक सीमित।
चाहे किसी भी प्रोडक्ट ने भेजा हो, यह एक जैसी दिखती है। ऐसा जान-बूझकर है: लोग सीख जाते हैं कि असली Lobby कैसी दिखती है, और पहचान लेते हैं कि कब कोई पेज Lobby नहीं है।
Usher खाते
ज़्यादातर एनवायरनमेंट के अपने यूज़र होते हैं। Usher खाते अलग हैं: एक ही खाता, जो किसी व्यक्ति को हर उस ऐप में साइन इन कराता है जिसमें “Usher के साथ जारी रखें” मौजूद है। लोग अपना खाता account.usheridentity.com पर मैनेज करते हैं।
टोकन और उनकी अवधि
| टोकन | डिफ़ॉल्ट | कितना सेट किया जा सकता है | यह किसलिए है |
|---|---|---|---|
| ऑथराइज़ेशन कोड | 5 मिनट | तय | एक बार टोकन से बदला जाता है। एक बार इस्तेमाल होता है। |
| ID टोकन | 10 मिनट | 1 से 60 मिनट | आपके ऐप को बताता है कि किसने साइन इन किया। API कॉल करने के लिए नहीं। |
| ऐक्सेस टोकन | 10 मिनट | 1 से 60 मिनट | आपके API को भेजा जाता है, जो इसे जाँचता है। |
| रीफ़्रेश टोकन | 30 दिन | 1 से 90 दिन | नए ऐक्सेस टोकन लाता है। हर इस्तेमाल पर रोटेट होता है। offline_access चाहिए। |
| मशीन ऐक्सेस टोकन | 15 मिनट | 1 से 60 मिनट | client_credentials के लिए: ऐसे सर्वर जिनके पीछे कोई व्यक्ति नहीं। |
| ईमेल से भेजा गया कोड, मैजिक लिंक | 10 मिनट | तय | एक बार साइन इन के लिए। कोड में तीन कोशिशें मिलती हैं। |
Lobby के सेशन की भी अवधि होती है: 7 दिन तक इस्तेमाल न होने पर सेशन ख़त्म हो जाता है (1 से 30), और कुल 30 दिन बाद भी (1 से 90)। कोई संवेदनशील चीज़ बदलने के लिए, जैसे ईमेल पता, पिछले 10 मिनट के भीतर का साइन-इन चाहिए।
साइनिंग कुंजियाँ
टोकन डिफ़ॉल्ट रूप से RS256 से साइन होते हैं; कोई एनवायरनमेंट इसके बजाय ES256 या EdDSA इस्तेमाल कर सकता है। पब्लिक कुंजियाँ एनवायरनमेंट के jwks_uri पर प्रकाशित होती हैं, इसलिए आपकी लाइब्रेरी उन्हें ख़ुद ले आती हैं, और कुंजियाँ रोटेट होने पर नई कुंजियाँ भी उठा लेती हैं।
स्कोप
| स्कोप | आपके ऐप को क्या मिलता है |
|---|---|
openid | ज़रूरी। व्यक्ति के sub के साथ एक ID टोकन। |
profile | उनका नाम और तस्वीर। |
email | उनका ईमेल पता, और यह कि वह सत्यापित है या नहीं। |
offline_access | एक रीफ़्रेश टोकन, ताकि वे साइन इन बने रहें। |