कीक्लॉक में संसाधन, स्कोप, अनुमतियां और नीतियां


91

मैं Keycloak के ऑथराइज़ेशन सिस्टम का उपयोग करके एक काफी सरल भूमिका-आधारित अभिगम नियंत्रण प्रणाली बनाना चाहता हूं। Keycloak की जगह सिस्टम हमें "उपयोगकर्ता" बनाने की अनुमति देता है, जो एक या अधिक "समूहों" का सदस्य है। इस विरासत प्रणाली में, एक उपयोगकर्ता को समूह सदस्यता (जहां समूह को अनुमतियाँ दी जाती हैं) या उपयोगकर्ता को अनुमति के प्रत्यक्ष अनुदान के माध्यम से लगभग 250 "क्षमताओं" में से प्रत्येक का उपयोग करने के लिए "अनुमति" दी जाती है।

मैं कीलक प्राधिकरण के लिए विरासत प्रणाली को मैप करना चाहूंगा।

यह मेरे लिए सरल होना चाहिए कि मौजूदा सिस्टम में प्रत्येक "क्षमता" को कीक्लॉक रिसोर्स पर और कीक्लोजेन स्कोप्स के सेट पर मैप करें। उदाहरण के लिए, एक "viewAccount" क्षमता स्पष्ट रूप से एक "खाता" संसाधन और एक "दृश्य" गुंजाइश के लिए मैप करेगी; और एक "लेन-देन" संसाधन के लिए "viewTransaction" नक्शे ... लेकिन यह सिर्फ एक "दृश्य" गुंजाइश बनाने के लिए सबसे अच्छा अभ्यास है, और कई संसाधनों (खाता, लेनदेन, आदि) में इसका उपयोग करें? या मुझे एक "व्यूअकाउंट" स्कोप, एक "व्यूट्रांसैक्शन" स्कोप आदि बनाना चाहिए?

इसी तरह, मैं अनुमतियों को लेकर थोड़ा भ्रमित हूं। संसाधन और दायरे के प्रत्येक व्यावहारिक संयोजन के लिए, क्या अनुमति बनाना सामान्य अभ्यास है? यदि किसी दिए गए संसाधन / कार्यक्षेत्र से मेल खाते कई अनुमतियाँ हैं, तो Keyloloak क्या करता है? मैं अनुमान लगा रहा हूं कि कीक्लोक का इरादा मुझे संसाधनों और स्कोप के खिलाफ अनुमति के मैट्रिक्स को कॉन्फ़िगर करने की अनुमति देना है, इसलिए उदाहरण के लिए मुझे "खातों" तक पहुंचने की अनुमति और "दृश्य" गुंजाइश की अनुमति हो सकती है, इसलिए इसलिए मुझे अनुमति होगी खातों को देखने के लिए

मैं पूछता हूं क्योंकि इस सब का परिणाम यह लगता है कि मेरी पुरानी "व्यूअकाउंट" क्षमता "खाता" संसाधन, "व्यू" गुंजाइश, और "व्यूअकाउंट" अनुमति के साथ समाप्त होती है, जो मुझे लगता है कि मुझे वापस मिल गया था। जो ठीक है, अगर यह सही है।

अंत में, स्पष्ट रूप से मुझे नीतियों का एक सेट चाहिए जो यह निर्धारित करता है कि क्या व्यूअकाउंट लागू किया जाना चाहिए। लेकिन क्या मैं सही हूं कि इसका मतलब यह है कि मुझे प्रत्येक विरासत समूहों के लिए एक नीति की आवश्यकता है जो एक उपयोगकर्ता का हो सकता है? उदाहरण के लिए, यदि मेरी "हेल्पडेस्क" भूमिका है, तो मुझे "हेल्पडेस्क सदस्यता" नीति की आवश्यकता है, जिसे मैं फिर "व्यूअकाउंट" अनुमति में जोड़ सकता हूं। क्या ये सही है?

धन्यवाद,

निशान


27
कीक्लॉक एक बहुत ही परिपक्व और बहुत सक्षम प्रणाली की तरह दिखता है, लेकिन यह वास्तव में एक रहस्य बना रह सकता है क्योंकि इसमें बहुत सारे सवाल और इतने कम जवाब हैं। मैं सचमुच अपने आप को अपनी पोस्ट में सभी प्रश्न पूछ रहा हूं और कोई जवाब नहीं पा रहा हूं। वहाँ कोई अच्छा ट्यूटोरियल क्यों हैं? क्या कोई वास्तव में इस सामान का उपयोग नहीं करता है? या इसके बारे में लिखने की जहमत कोई नहीं उठाता?
स्टिजेन डे विट

3
कीर्लोक हमारे लिए उत्पादन (अब तक) में प्राधिकरण के अपवाद के साथ महान काम कर रहा है, जो मेरी वास्तविक समस्याओं से संबंधित होना वास्तव में मुश्किल था। लेकिन मैं मानता हूं कि कीकोलॉक OIDC कैसे करता है, इस बारे में बहुत सारे दस्तावेज हैं, लेकिन यह भी एक व्यापक धारणा है कि हम OAuth और OIDC को जानते हैं। यदि आप पहले से ही OIDC को नहीं जानते हैं तो Keycloak को एप्लिकेशन की समस्याओं से संबंधित करना कठिन है, लेकिन मेरे लिए Keycloak OIDC का परिचय था, जो कि 22 का एक बिट है। (पिकेटलिंक / पिकेटबॉक्स और भी बदतर था!)। मैंने पाया कि इसे डाउनलोड करना और बस इसके साथ खेलना, सबसे अच्छा था।
डॉक्टर Eval

7
इन टिप्पणियों पर सहमत हों, कीक्लॉक प्रलेखन और मामलों का उपयोग करता है बेकार
ओलिवियर रिफलो

23
कीलक देव, इस प्रश्न पर ध्यान दें! आपका दस्तावेज़ीकरण बहुत अच्छा है, लेकिन इसे यहाँ उठाए गए प्रश्नों को संबोधित करने के लिए अधिक ट्यूटोरियल की आवश्यकता है। तुम भी पुराने स्कूल मेलिंग सूची से दूर कुछ और मंच या बस Stackoverflow की तरह उपयोगकर्ता के अनुकूल कुछ पर विचार कर सकते हैं।
जीजीफोर्स

5
उत्तर देर से लेकिन आपकी सभी धारणाएँ मूल रूप से सही हैं। जैसा कि सबसे अच्छा अभ्यास है, मुझे लगता है कि यह कहना मुश्किल है क्योंकि क्षमता बहुत नई है। यकीन नहीं होता है, यहां तक ​​कि अगर kc devs को पता है कि इस बिंदु पर क्या सर्वोत्तम अभ्यास हैं
cen

जवाबों:


138

मुझे पता है कि मुझे 2 साल की देर हो चुकी है, लेकिन मुझे लगता है कि मैं जो जानता हूं उसे साझा करूंगा और उम्मीद है कि भविष्य के पाठकों के लिए कुछ दर्द कम होगा। पूर्ण पारदर्शिता- मैं किसी भी तरह से Keycloak / OAuth / OIDC विशेषज्ञ नहीं हूं और मुझे जो भी पता है वह ज्यादातर डॉक्स, किताबें, अच्छे ol 'YouTube को पढ़ने और टूल के साथ खेलने से है।

इस पोस्ट में दो भाग शामिल होंगे:

  1. मैं अपनी क्षमता के अनुसार आपके सभी सवालों का जवाब देने का प्रयास करूंगा
  2. मैं आप सभी को दिखाऊंगा कि कैसे आप इस थ्रेड में कुछ मुख्य अवधारणाओं को बेहतर ढंग से समझने के लिए अलग-अलग ऐप को तैनात करने की आवश्यकता के बिना कीक्लॉक में नीतियों / स्कोप / अनुमतियों के साथ खेल सकते हैं। हालांकि ध्यान दें कि यह ज्यादातर आप सभी को शुरू करने के लिए है। मैं उपयोग कर रहा हूं Keycloak 8.0.0

भाग I

आरंभ करने से पहले कुछ शब्दावली:

  • Keycloak में, आप 2 प्रकार की अनुमतियाँ बना सकते हैं: संसाधन-आधारित और स्कोप-आधारित
  • सीधे शब्दों में कहें, Resource-Basedअनुमतियों के लिए, आप इसे सीधे अपने संसाधन पर लागू करते हैं
  • के लिए Scoped-Basedअनुमति है, आप इसे अपने दायरे (s) या गुंजाइश (रों) पर लागू होते हैं और संसाधन।

क्या यह केवल एक "दृश्य" गुंजाइश बनाने के लिए सबसे अच्छा अभ्यास है, और इसका उपयोग कई संसाधनों (खाता, लेनदेन, आदि) में किया जाता है? या मुझे एक "व्यूअकाउंट" स्कोप, एक "व्यूट्रांसैक्शन" स्कोप आदि बनाना चाहिए?

स्कोप एक संरक्षित संसाधन पर अधिकारों के एक समूह का प्रतिनिधित्व करते हैं। आपके मामले में, आपके पास 2 संसाधन हैं: accountऔर transaction, इसलिए मैं दूसरे दृष्टिकोण की ओर झुकूंगा।

लंबे समय में, एक वैश्विक होने viewअपने सभी संसाधनों के साथ जुड़े गुंजाइश (जैसे account, transaction, customer, settlement...) दोनों का प्रबंधन और सुरक्षा की आवश्यकता को परिवर्तन करने के लिए अनुकूल करने के लिए बनाता है प्राधिकरण मुश्किल।

यहां कुछ उदाहरण दिए गए हैं, जिन्हें आप डिजाइन के लिए महसूस कर सकते हैं

हालांकि ध्यान दें - मैं यह दावा नहीं कर रहा हूं कि आपको संसाधनों में स्कोप साझा नहीं करना चाहिए। तथ्य की बात, Keycloakयह उसी के साथ संसाधनों के लिए अनुमति देता है type। उदाहरण के लिए, आपको किसी दिए गए खाते के तहत लेनदेन को पढ़ने के लिए दोनों viewAccountऔर viewTransactionगुंजाइश की आवश्यकता हो सकती है (आखिरकार आपको लेनदेन देखने के लिए खाते तक पहुंच की आवश्यकता हो सकती है)। आपकी आवश्यकताएं और मानक आपके डिजाइन को बहुत प्रभावित करेंगे।

संसाधन और दायरे के प्रत्येक व्यावहारिक संयोजन के लिए, क्या अनुमति बनाना सामान्य अभ्यास है?

क्षमा याचना, मैं प्रश्न को पूरी तरह से नहीं समझ पा रहा हूं इसलिए मैं थोड़ा व्यापक हो जाऊंगा। किसी को एक्सेस देने / देने से इंकार करने के लिए resource, आपको निम्न करने की आवश्यकता है:

  • अपनी नीतियों को परिभाषित करें
  • अपनी अनुमतियों को परिभाषित करें
  • अपनी नीतियों को अपनी अनुमतियों पर लागू करें
  • अपनी अनुमति को एक scopeया resource(या दोनों) से संबद्ध करें

प्रभावी होने के लिए नीति प्रवर्तन के लिए। प्राधिकरण प्रक्रिया देखें ।

आप यह सब कैसे स्थापित करते हैं यह पूरी तरह आप पर निर्भर है। आप उदाहरण के लिए कर सकते हैं:

  • व्यक्तिगत नीतियों को परिभाषित करें, और उचित अनुमति के तहत प्रत्येक नीति को टाई।

  • बेहतर अभी तक, व्यक्तिगत नीतियों को परिभाषित करें, फिर अपनी सभी संबंधित नीतियों को एक aggregatedनीति (नीतियों की नीति) के तहत समूहित करें और फिर उस समग्र नीति को scope-basedअनुमति के साथ संबद्ध करें । आपके पास यह scoped-basedअनुमति हो सकती है कि संसाधन और उसके संबद्ध क्षेत्र दोनों पर लागू हो।

  • या, आप दो अलग-अलग प्रकारों का लाभ उठाकर अपनी अनुमतियों को तोड़ सकते हैं। आप resource-basedअनुमति प्रकार के माध्यम से अपने संसाधनों के लिए पूरी तरह से अनुमतियाँ बना सकते हैं , और अलग-अलग अनुमतियों को पूरी तरह से scope-basedअनुमति प्रकार के साथ एक गुंजाइश के साथ जोड़ सकते हैं ।

आपके पास विकल्प हैं।

यदि किसी दिए गए संसाधन / कार्यक्षेत्र से मेल खाते कई अनुमतियाँ हैं, तो Keyloloak क्या करता है?

यह निर्भर करता है

  1. संसाधन सर्वर का Decision Strategy
  2. प्रत्येक अनुमति Decision Strategy
  3. प्रत्येक नीति का Logicमूल्य।

Logicमूल्य जावा के साथ इसी तरह की है !ऑपरेटर। यह या तो हो सकता है Positiveया Negative। जब Logicहै Positive, तो नीति का अंतिम मूल्यांकन अपरिवर्तित रहता है। जब इसका Negativeअंतिम परिणाम नकारा जाता है (जैसे कि यदि कोई नीति गलत का मूल्यांकन करती है और वह Logicहै Negative, तो यह होगा true)। चीजों को सरल रखने के लिए, मान लेते हैं कि Logicहमेशा सेट हैPositive

Decision Strategyक्या हम वास्तव में से निपटने के लिए चाहते हैं। Decision Strategyया तो किया जा सकता है Unanimousया Affirmative। डॉक्स से,

निर्णय की रणनीति

यह कॉन्फ़िगरेशन बदलता है कि नीति मूल्यांकन इंजन यह तय करता है कि सभी मूल्यांकन अनुमतियों के परिणाम के आधार पर संसाधन या गुंजाइश दी जानी चाहिए या नहीं। सकारात्मक का मतलब है कि कम से कम एक अनुमति के लिए एक सकारात्मक निर्णय का मूल्यांकन करना चाहिए ताकि संसाधन और उसके दायरे में पहुंच प्रदान की जा सके। सर्वसम्मति का अर्थ है कि अंतिम निर्णय के भी सकारात्मक होने के लिए सभी अनुमतियों को एक सकारात्मक निर्णय का मूल्यांकन करना चाहिए। एक उदाहरण के रूप में, यदि एक ही संसाधन या दायरे के लिए दो अनुमतियाँ संघर्ष में हैं (उनमें से एक पहुंच का उपयोग कर रहा है और दूसरा पहुंच से इनकार कर रहा है), तो संसाधन या गुंजाइश की अनुमति दी जाएगी यदि चुनी गई रणनीति सकारात्मक है। अन्यथा, किसी भी अनुमति से एक एकल इनकार भी संसाधन या दायरे तक पहुंच से इनकार करेगा।

उपरोक्त को बेहतर ढंग से समझने के लिए एक उदाहरण का उपयोग करते हैं। मान लीजिए आप 2 अनुमतियों के साथ एक संसाधन है और किसी संसाधन (याद रखें, कि उपयोग करने के लिए कोशिश कर रहा है Logicहै Positiveसभी नीतियों के लिए)। अभी:

  1. Permission Oneके लिए एक Decision Strategyसेट है Affirmative। इसकी 3 नीतियां भी हैं जहां वे प्रत्येक का मूल्यांकन करते हैं:
    • true
    • false
    • false

चूंकि किसी एक पॉलिसी को सेट किया जाता है true, Permission Oneउसे सेट किया जाता है true(Affirmative - केवल 1 होना चाहिए true)।

  1. Permission Two2 नीतियों के साथ एक Decision Strategyसेट है Unanimous:
    • true
    • false

इस मामले Permission Twoमें falseचूंकि एक नीति झूठी है (सर्वसम्मति से - उन्हें सभी की आवश्यकता है true)।

  1. अब अंतिम मूल्यांकन आता है । यदि संसाधन सर्वर Decision Strategyसेट है Affirmative, तो उस संसाधन तक पहुँच दी जाएगी क्योंकि Permission Oneहै true। यदि दूसरी ओर, संसाधन सर्वर Decision Strategyपर सेट किया गया है Unanimous, तो प्रवेश निषेध होगा।

देख:

हम इसे फिर से जारी रखेंगे। मैं समझाता हूं कि Decision Strategy भाग II में संसाधन को कैसे सेट किया जाए ।

इसलिए उदाहरण के लिए मुझे "खातों" का उपयोग करने की अनुमति हो सकती है और "दृश्य" गुंजाइश की अनुमति हो सकती है, इसलिए इसलिए मुझे खातों को देखने की अनुमति होगी?

छोटा जवाब हां है। अब, इस पर थोड़ा विस्तार करें :)

यदि आपके पास निम्न परिदृश्य है:

  1. संसाधन सर्वर का Decision Strategyसेट UnanimousयाAffirmative
  2. account/{id}संसाधन तक पहुंचने की अनुमति हैtrue
  3. viewदायरे तक पहुंचने की अनुमति हैtrue

खाता देखने के लिए आपको पहुंच प्रदान की जाएगी।

  • true+ के नीचे या के trueबराबर है । trueAffirmativeUnanimous Decision Strategy

अब अगर आपके पास यह है

  1. संसाधन सर्वर पर Decision StrategyसेटAffirmative
  2. account/{id}संसाधन तक पहुंचने की अनुमति हैtrue
  3. viewदायरे तक पहुंचने की अनुमति हैfalse

खाता देखने के लिए भी आपको पहुंच प्रदान की जाएगी।

  • true+ falseहै trueके तहत Affirmativeरणनीति।

यहां मुद्दा यह है कि किसी दिए गए संसाधन तक पहुंच भी आपके सेटअप पर निर्भर करती है इसलिए सावधान रहें क्योंकि आप दूसरा परिदृश्य नहीं चाहते हैं।

लेकिन क्या मैं सही हूं कि इसका मतलब यह है कि मुझे प्रत्येक विरासत समूहों के लिए एक नीति की आवश्यकता है जो एक उपयोगकर्ता का हो सकता है?

मुझे यकीन नहीं है कि कीक्लॉक ने 2 साल पहले कैसे व्यवहार किया था, लेकिन आप एक समूह-आधारित नीति को निर्दिष्ट कर सकते हैं और बस उस नीति के तहत अपने सभी समूहों को जोड़ सकते हैं। आपको निश्चित रूप से प्रति समूह एक नीति बनाने की आवश्यकता नहीं है।

उदाहरण के लिए, यदि मेरी "हेल्पडेस्क" भूमिका है, तो मुझे "हेल्पडेस्क सदस्यता" नीति की आवश्यकता है, जिसे मैं फिर "व्यूअकाउंट" अनुमति में जोड़ सकता हूं। क्या ये सही है?

बहुत ज्यादा। ऐसे कई तरीके हैं जिनसे आप इसे सेट कर सकते हैं। उदाहरण के लिए, आप कर सकते हैं:

  1. अपना संसाधन (जैसे /account/{id}) बनाएँ और इसे account:viewकार्यक्षेत्र के साथ जोड़ें ।
  2. भूमिका-आधारित नीति बनाएं और helpdeskउस नीति के तहत भूमिका जोड़ें
  3. Scope-Basedनामक एक अनुमति बनाएँ viewAccountऔर इसके साथ टाई करें scope, resourceऔरpolicy

हम भाग II में कुछ इसी तरह की स्थापना करेंगे।

भाग द्वितीय

कीक्लोक में एक छोटा सा उपकरण है जो आपको अपनी सभी नीतियों का परीक्षण करने की अनुमति देता है। बेहतर अभी तक, आपको वास्तव में किसी अन्य एप्लिकेशन सर्वर को स्पिन करने की आवश्यकता नहीं है और काम करने के लिए एक अलग ऐप को तैनात करना होगा।

यहाँ वह परिदृश्य है जिसे हम सेट करेंगे:

  1. हम एक नया क्षेत्र बनाएँगे जिसे कहा जाता है stackoverflow-demo
  2. हम bank-apiउस दायरे में एक क्लाइंट बनाएंगे
  3. हम /account/{id}उस क्लाइंट के लिए बुलाए गए संसाधन को परिभाषित करेंगे
  4. की गुंजाइश account/{id}होगीaccount:view
  5. हम bobनए दायरे के तहत एक उपयोगकर्ता बनाएंगे
  6. हम भी तीन भूमिकाओं में पैदा हो जाएगी: bank_teller, account_ownerऔरuser
    • हम bobकिसी भी भूमिका से नहीं जुड़ेंगे। अभी इसकी जरूरत नहीं है।
  7. हम निम्नलिखित दो Role-Basedनीतियां निर्धारित करेंगे :
    • bank_tellerऔर संसाधन account_ownerतक पहुंच है/account/{id}
    • account_owneraccount:viewदायरे तक पहुँच है
    • user संसाधन या दायरे तक पहुंच नहीं है
  8. हम इस Evaluateटूल के साथ खेलेंगे कि कैसे पहुंच प्रदान की जा सकती है या अस्वीकार की जा सकती है।

मुझे माफ कर दो, यह उदाहरण अवास्तविक है लेकिन मैं बैंकिंग क्षेत्र से परिचित नहीं हूँ :)

कीकलोक सेटअप

डाउनलोड करें और Keycloak चलाएँ

cd tmp
wget https://downloads.jboss.org/keycloak/8.0.0/keycloak-8.0.0.zip 
unzip keycloak-8.0.0.zip
cd keycloak-8.0.0/bin
./standalone.sh 

प्रारंभिक व्यवस्थापक उपयोगकर्ता बनाएँ

  1. के लिए जाओ http://localhost:8080/auth
  2. Administration Consoleलिंक पर क्लिक करें
  3. व्यवस्थापक उपयोगकर्ता बनाएं और लॉगिन करें

यात्रा प्रारंभ करना अधिक जानकारी के लिए। हमारे उद्देश्यों के लिए, उपरोक्त पर्याप्त है।

मंच की स्थापना

एक नया क्षेत्र बनाएँ

  1. अपने माउस को masterदायरे में घुमाएं और Add Realmबटन पर क्लिक करें।
  2. stackoverflow-demoनाम के रूप में दर्ज करें ।
  3. पर क्लिक करें Create
  4. शीर्ष बाएं को अब दायरे के stackoverflow-demoबजाय कहना चाहिए master

एक नया क्षेत्र बनाना देखें

एक नया उपयोगकर्ता बनाएँ

  1. Usersबाईं ओर दिए गए लिंक पर क्लिक करें
  2. Add Userबटन पर क्लिक करें
  3. दर्ज करें username(जैसे bob)
  4. सुनिश्चित करें कि User Enabledचालू है
  5. क्लिक Save

नया उपयोगकर्ता बनाना देखें

नई भूमिकाएँ बनाएँ

  1. पर क्लिक करें Rolesलिंक
  2. पर क्लिक करें Add Role
  3. निम्नलिखित भूमिकाओं जोड़ें: bank_teller, account_ownerऔरuser

फिर से, नहीं अपने उपयोगकर्ता को भूमिकाओं के साथ । हमारे उद्देश्यों के लिए, इसकी आवश्यकता नहीं है।

रोल्स देखें

एक ग्राहक बनाएँ

  1. पर क्लिक करें Clientsलिंक
  2. पर क्लिक करें Create
  3. दर्ज bank-apiकरने के लिएClient ID
  4. के लिए Root URLप्रवेशhttp://127.0.0.1:8080/bank-api
  5. पर क्लिक करें Save
  6. सुनिश्चित करें कि Client Protocolहैopenid-connect
  7. बदले Access Typeके लिएconfidential
  8. बदलें Authorization Enabledकरने के लिएOn
  9. नीचे स्क्रॉल करें और हिट करें Save। एक नयाAuthorizationशीर्ष पर टैब दिखाई देना चाहिए।
  10. Authorizationटैब पर क्लिक करें और फिरSettings
  11. सुनिश्चित करें कि Decision Strategyसेट किया गया हैUnanimous
    • यह संसाधन सर्वर है Decision Strategy

देख:

कस्टम स्कोप बनाएँ

  1. Authorizationटैब पर क्लिक करें
  2. पृष्ठ को लाने के लिए Authorization Scopes> पर क्लिक करेंCreateAdd Scope
  3. दर्ज account:viewनाम और enter दबाएं।

"खाता संसाधन देखें" बनाएं

  1. Authorizationऊपर दिए गए लिंक पर क्लिक करें
  2. पर क्लिक करें Resources
  3. पर क्लिक करें Create
  4. View Account Resourceदोनों के लिए दर्ज करें NameऔरDisplay name
  5. दर्ज account/{id}करने के लिएURI
  6. टेक्स्ट बॉक्स account:viewमें दर्ज करेंScopes
  7. क्लिक Save

संसाधन बनाना देखें

अपनी नीतियां बनाएं

  1. फिर से Authorizationटैब के नीचे , पर क्लिक करेंPolicies
  2. का चयन करें RoleसेCreate Policyड्रॉपडाउन
  3. में Nameअनुभाग, टाइप करेंOnly Bank Teller and Account Owner Policy
  4. के तहत Realm Rolesचुनिंदा दोनों bank_tellerऔर account_ownerभूमिका
  5. सुनिश्चित करें कि Logicसेट किया गया हैPositive
  6. क्लिक Save
  7. Policiesलिंक पर क्लिक करें
  8. ड्रॉपडाउन Roleसे फिर से चुनें Create Policy
  9. इस समय के लिए उपयोग Only Account Owner PolicyकरेंName
  10. Realm Rolesचयन के तहतaccount_owner
  11. सुनिश्चित करें कि Logicसेट किया गया हैPositive
  12. क्लिक Save
  13. Policiesशीर्ष पर दिए गए लिंक पर क्लिक करें , आपको अब अपनी नई बनाई गई नीतियों को देखना चाहिए।

भूमिका-आधारित नीति देखें

ध्यान दें कि कीक्लॉक में बहुत अधिक शक्तिशाली नीतियां हैं। प्रबंध नीतियां देखें

संसाधन-आधारित अनुमति बनाएँ

  1. फिर से Authorizationटैब के नीचे , पर क्लिक करेंPermissions
  2. चुनते हैं Resource-Based
  3. के लिए टाइप View Account Resource PermissionकरेंName
  4. Resourcesप्रकार के तहतView Account Resource Permission
  5. Apply Policyचयन के तहतOnly Bank Teller and Account Owner Policy
  6. सुनिश्चित करें कि Decision Strategyसेट किया गया हैUnanimous
  7. क्लिक Save

संसाधन-आधारित अनुमतियाँ बनाएँ देखें

काहे का ...

संसाधन-आधारित अनुमति का मूल्यांकन

  1. Authorizationटैब के नीचे फिर से चुनेंEvaluate
  2. के तहत Userदर्ज करेंbob
  3. Rolesचयन के तहतuser
    • यह वह जगह है जहाँ हम अपने उपयोगकर्ता को अपनी बनाई भूमिकाओं के साथ जोड़ेंगे।
  4. Resourcesचयन करें View Account Resourceऔर क्लिक करें के तहतAdd
  5. मूल्यांकन पर क्लिक करें।
  6. View Account Resource with scopes [account:view]परिणाम देखने के लिए विस्तृत करें और आपको देखना चाहिए DENY

यहाँ छवि विवरण दर्ज करें

  1. यह समझ में आता है क्योंकि हम केवल दो भूमिकाओं को उस संसाधन तक पहुँच की अनुमति देते हैं Only Bank Teller and Account Owner Policy। चलिए यह परीक्षण करते हैं यह सुनिश्चित करने के लिए कि यह सच है!
  2. Backमूल्यांकन परिणाम के ठीक ऊपर दिए गए लिंक पर क्लिक करें
  3. बॉब की भूमिका बदलें account_ownerऔर उस पर क्लिक करें Evaluate। अब आपको परिणाम को देखना चाहिए PERMIT। यदि आप वापस जाते हैं और भूमिका को बदलते हैं तो समान व्यवहार करेंbank_teller

मूल्यांकन और परीक्षण नीतियां देखें

स्कोप-आधारित अनुमति बनाएँ

  1. Permissionsअनुभाग पर वापस जाएं
  2. ड्रॉपडाउन के Scope-Basedतहत इस समय का चयन करें Create Permission
  3. के तहत Name, दर्ज करेंView Account Scope Permission
  4. के तहत Scopes, दर्ज करेंaccount:view
  5. के तहत Apply Policy, दर्ज करेंOnly Account Owner Policy
  6. सुनिश्चित करें कि Decision Strategyसेट किया गया हैUnanimous
  7. क्लिक Save

स्कोप-आधारित अनुमतियां बनाना देखें

दूसरा टेस्ट रन

हमारे नए परिवर्तनों का मूल्यांकन

  1. Authorizationअनुभाग पर वापस जाएं
  2. पर क्लिक करें Evaluate
  3. उपयोगकर्ता होना चाहिए bob
  4. भूमिकाएं होनी चाहिए bank_teller
  5. संसाधन होना चाहिए View Account Resourceऔर क्लिक करना चाहिएAdd
  6. पर क्लिक करें Evaluateऔर हमें मिलना चाहिए DENY
    • फिर से इस पर कोई आश्चर्य नहीं होना चाहिए क्योंकि इस bank_tellerतक पहुंच resourceनहीं है लेकिन नहीं है scope। यहाँ एक अनुमति सत्य का मूल्यांकन करती है, और दूसरा असत्य का। यह देखते हुए कि संसाधन सर्वर Decision Strategyपर सेट किया गया है Unanimous, अंतिम निर्णय है DENY
  7. पर क्लिक करें Settingsके तहत Authorizationटैब, और बदलने Decision Strategyके लिए Affirmativeऔर 1-6 चरणों में वापस जाने के लिए फिर से। इस बार, अंतिम परिणाम होना चाहिए PERMIT(एक अनुमति सत्य है, इसलिए अंतिम निर्णय सत्य है)।
  8. पूर्णता की खातिर, संसाधन सर्वर को Decision Strategyवापस चालू करें Unanimous। पुन: 6 के माध्यम से चरण 1 पर वापस जाएं लेकिन इस बार, भूमिका निर्धारित करें account_owner। इस बार, अंतिम परिणाम फिर से है PERMITजो समझ में आता है, यह देखते हुए कि account_ownerदोनों की पहुंच है resourceऔर scope

नीट :) आशा है कि यह मदद करता है।


1
@SANDEEPMachiRAJU आपका स्वागत है :) अच्छा सवाल! टिप्पणी के माध्यम से गहराई से जवाब देने के लिए पर्याप्त वर्ण नहीं हैं, लेकिन आप टोकन आत्मनिरीक्षण समापन बिंदु का उपयोग कर सकते हैं । यहां उनके सभी समापन बिंदुओं की एक सूची दी गई है । मुझे लगता है कि आप उनके प्राधिकरण क्लाइंट का भी उपयोग कर सकते हैं, लेकिन मुझे इसका उपयोग करने का कोई अनुभव नहीं है
एंडी

9
महान जवाब के लिए धन्यवाद।
मार्कस

3
@Joo आपका स्वागत है! Tbh, कोई विशेष कारण नहीं। मैंने सिर्फ उदाहरण दिया कि किसी को भी शुरू करने के लिए जितना संभव हो उतना सरल है। मैं अनुभव से जानता हूं कि डॉक्स पढ़ने के लिए सबसे रोमांचक चीजें नहीं हैं। जहां तक ​​एक और ग्राहक को बैंक एपीआई तक पहुंच की आवश्यकता है, ऐसा लगता है कि आप देख User Management Access (UMA)सकते हैं कि संसाधन मालिक पार्टी का अनुरोध करने के लिए संरक्षित संसाधन तक पहुंच प्रदान कर सकता है (कम से कम मेरी व्याख्या)।
एंडी

3
आप निश्चित रूप से दुनिया को एक बेहतर जगह बनाने के लिए धन्यवाद कर रहे हैं, जो कि सभी को एक साथ रखने के लिए समय दे रहा है ... आपको इस सभी के बारे में कुछ ब्लॉग पोस्ट लिखना चाहिए! बहुत उपयोगी @Andy
जोस कार्लोस

1
@ और सिर्फ वाह! सभी प्रामाणिक सेवाओं के दस्तावेज़ों को पचाने के लिए समय निकालने और हमारे साथ साझा करने के लिए धन्यवाद। आपने बहुत से लोगों को अध्ययन के कई घंटे बचाए हैं! केवल एक चीज है जो मैं नहीं देख सकता। आपने कहा था account_owner has access to the account:view scope। आप उस भूमिका और उस दायरे के बीच संबंध कैसे स्थापित करते हैं?
कोडपेंडेंट

5

मैं शुद्ध HTTP विधियों के माध्यम से प्राधिकरण को लागू करना चाह रहा था, एडेप्टर का उपयोग किए बिना, क्योंकि Lua में एडॉप्टर नहीं था। आशा है कि यह उत्तर गैर-एडाप्टर आधारित विधि की तलाश में लोगों की मदद करता है।

यदि आप एडॉप्टर की तलाश कर रहे हैं तो क्विक स्टार्ट गाइड शुरू करने के लिए सबसे अच्छी जगह है। विशेष रूप से स्प्रिंग बूट ऑर्ट्ज़ उदाहरण

शुद्ध HTTP आधारित कार्यान्वयन के लिए:

चरण 1:

कीक्लॉक एडमिन UI में नीतियों और अनुमति को परिभाषित करें

चरण 2

HTTP रास्तों की एक आंतरिक मैपिंग करें जो प्रत्येक पथ के लिए संसाधनों और आवश्यक स्कोप से संबंधित हों। इसे कॉन्फ़िगरेशन फ़ाइल में भी सहेजा जा सकता है । जब एक विशेष मार्ग का आह्वान किया जाता है, तो एक्सेस टोकन के दावों को मान्य करने के लिए Keycloak टोकन समापन बिंदु पर कॉल करें।

{
  "policy-enforcer": {
    "user-managed-access" : {},
    "enforcement-mode" : "ENFORCING"
    "paths": [
      {
        "path" : "/someUri/*",
        "methods" : [
          {
            "method": "GET",
            "scopes" : ["urn:app.com:scopes:view"]
          },
          {
            "method": "POST",
            "scopes" : ["urn:app.com:scopes:create"]
          }
        ]
      }
    ]
  }
}

यदि आप एक एडाप्टर का उपयोग कर रहे हैं और पथ या संसाधन को निर्दिष्ट नहीं करते हैं, तो एडाप्टर आंतरिक रूप से कीस्कोक से पथ और संसाधनों की खोज करेगा

चरण 3:

अनुमतियाँ प्राप्त करने या उनका मूल्यांकन करने के लिए टोकन समापन बिंदु का उपयोग करें । आप response_modeअंतिम निर्णय प्राप्त करने के लिए या पूरी अनुमति प्राप्त करने के लिए पैरामीटर का उपयोग कर सकते हैं ।

curl -X POST \
  http://${host}:${port}/auth/realms/${realm}/protocol/openid-connect/token \
  -H "Authorization: Bearer ${access_token}" \
  --data "grant_type=urn:ietf:params:oauth:grant-type:uma-ticket" \
  --data "permission=Resource A#Scope A"

यदि प्राधिकरण अनुरोध किसी अनुमति के लिए मैप नहीं करता है, तो 403इसके बजाय एक HTTP स्थिति कोड लौटाया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.