मैं जावा एप्लायंस बना रहा हूं, जहां मुझे लॉग इन करने के लिए उपयोगकर्ताओं की आवश्यकता होगी। वर्तमान में मैं पुष्टि कर रहा हूं कि क्या मैं कीक्लोक को पर्याप्त रूप से सुरक्षित कर सकता हूं। मैं यह सुनिश्चित करना चाहता हूं कि मेरा एप्लिकेशन वास्तव में मेरे कीक्लोक सर्वर के खिलाफ उपयोगकर्ताओं को प्रमाणित कर रहा है - उदाहरण के लिए मुझे पता है कि डीएनएस पॉइज़िंग या अन्य हमलों की तरह कुछ है, जहां मेरा एप्लिकेशन डुप्लिकेट/हमलावर कीक्लोक इंस्टेंस के साथ हमलावर सर्वर तक पहुंच सकता है। मुझे क्या आश्चर्य हुआ, मेरे पास वर्तमान में निम्नलिखित कुंजियों के साथ विन्यास है:

keycloak.auth-server-url=...
keycloak.realm=...
keycloak.resource=...
keycloak.public-client=true
keycloak.security-constraints[0].authRoles[0]=..
keycloak.security-constraints[0].securityCollections[0].patterns[0]=...
keycloak.principal-attribute=preferred_username

और कोई सार्वजनिक कुंजी की आवश्यकता नहीं है। यहां और भी बदतर: https://stackoverflow.com/a/40516696/520521 मुझे अपवोट की गई टिप्पणी दिखाई दे रही है, मेरा आवेदन हो सकता है (दुर्भावनापूर्ण) सर्वर से कुंजी डाउनलोड करें।

क्या कोई अतिरिक्त कदम हैं जिनका मुझे पालन करने की आवश्यकता है, इसके खिलाफ उपयोगकर्ताओं को प्रमाणित करने से पहले कीक्लॉक सर्वर को प्रमाणित करने के लिए?

1
parvuselephantus 11 अक्टूबर 2020, 12:43

2 जवाब

सबसे बढ़िया उत्तर

मैं एक शब्द नहीं देख सकता कि यह लक्ष्य है, लेकिन यह देखकर कि सार्वजनिक और निजी कुंजी कहां रखी गई है, मैं समझता हूं कि उत्तर यह है कि दायरे सेटिंग्स में -> चाबियाँ -> सक्रिय चाबियों की सूची है। आप दाहिनी ओर बटन के साथ सार्वजनिक कुंजी या प्रमाणपत्र डाउनलोड कर सकते हैं। स्प्रिंग बूट के मेरे मामले में, keycloak.realm-key के तहत application.properties फ़ाइल एक सार्वजनिक कुंजी दर्ज करें।

0
parvuselephantus 17 अक्टूबर 2020, 11:53

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

यदि आप अपने क्लाइंट के "एक्सेस टाइप" को "गोपनीय" (कीक्लोक एडमिन यूआई पर क्लाइंट सेटिंग्स में) पर सेट करते हैं और सेटिंग्स को सेव करते हैं, तो "क्रेडेंशियल्स" शीर्षक वाला एक और टैब (क्लाइंट के "सेटिंग" टैब के बगल में) दिखाई देगा। वहां आप अपने क्लाइंट के लिए बनाए गए डिफ़ॉल्ट रहस्य को देख सकते हैं। फिर आपको इस रहस्य को नीचे अपनी keycloak.json फ़ाइल में अपने आवेदन के अंदर रखना चाहिए:

"credentials": {
    "secret": "paste-the-secret-value-here"
}

आप "रीजेनरेट सीक्रेट" बटन का चयन करके भी मूल्य को फिर से उत्पन्न कर सकते हैं।

आप वहां "क्लाइंट ऑथेंटिकेटर" को भी बदल सकते हैं और इसे "X509 सर्टिफिकेट" पर सेट कर सकते हैं। फिर आपको उस प्रमाणपत्र के "विषय डीएन" को मान्य करने के लिए एक नियमित अभिव्यक्ति को परिभाषित करने के लिए कहा जाएगा जिसका उपयोग ग्राहक प्रमाणीकरण के लिए करेगा। रेगेक्स से मेल खाने वाला कोई भी प्रमाणपत्र मान्य और प्रमाणित माना जाएगा। फिर आपको keycloak.json फ़ाइल में "गुप्त" मान को परिभाषित करने के बजाय ऐसे प्रमाणपत्र का उपयोग करने के लिए अपने क्लाइंट को सेटअप करना होगा।

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

0
zaerymoghaddam 14 अक्टूबर 2020, 15:48