হ্যালো কিক্লোক

ভুমিকা

আমরা যখন ফেসবুক, গুগল ইত্যাদিতে লগিন করতে যাই তখন আমাদের বেশ কিছু সিকিউরিটির ধাপ পার হতে হয়। চোখের সামনে এসব ধাপগুলো সহজ বা কঠিন যাই লাগুক, পর্দার আড়ালে এসব ধাপ আরো জটিল। এগুলোকে বলা যায় সফটওয়ারের অথেন্টিকেশন ও ইউজার ম্যানেজমেন্ট।

আমরা যদি নিজেরা কোনো সফটওয়ার তৈরি করতে চাই, এবং সেখানে যদি এরকম ইউজার ম্যানেজমেন্ট প্রয়োজন হয়, তাহলে হয়তো আমরা নিজেরাই সেই ফিচার বানিয়ে নিতে পারি। তবে ইউজার ম্যানেজমেন্টের বিভিন্ন ফিচার তৈরী ও রক্ষণাবেক্ষণ করাতে বেশ সময় আর রিসোর্স প্রয়োজন । কারণ ইউজার ম্যানেজমেন্টের সাথে ওতপ্রোতভাবে জড়িয়ে আছে যে বিষয়টি, তার নাম সিকিউরিটি।

তো মোটাদাগে আমরা বলতে পারি,ফিচারসম্বৃদ্ধ এবং একই সাথে নিরাপদ ইউজার ম্যানেজমেন্ট তৈরী ও মেইনটেইন করা সময় ও রিসোর্স সাপেক্ষ। অনেকক্ষেত্রে আমরা নিজেরা হয়তো এগুলো ডেভেলপ করার বদলে ৩য় কোনো পক্ষের কাছ থেকে এই সেবা নিয়ে নিজেদের সফটওয়ারে যুক্ত করতে আগ্রহী হই, যাতে সময়ও অনেক কম লাগবে, রিসোর্স আর সিকিরিটির ঝক্কিও সেই ৩য় 3rd party) সামাল দেবে আমাদের হয়ে।

কিক্লোক

কিক্লোক একটি ওপেন সোর্স আইডেন্টিটি ও একসেস(IAM) টুল যার মাধ্যমে আমরা উপরে বর্ণিত সমস্যার সাথে সাথে আরো অনেক সেবা পেতে পারি। এতে করে আমাদের নিজেদের ব্যবহারকারীর অথেন্টিকেশনের তথ্য জমা করার কোনো প্রয়োজন নেই। কিক্লোকই আমাদের হয়ে সেটি করে দিবে।

একনজরে কিক্লোকের ফিচারগুলো দেখতে নিচের ছবিটি দেখতে পারি।

টপিক হিসেবে কিক্লোক অনেক বড়ো একটা বিষয়, যার বিভিন্ন দিক আলাদা আর্টিকেল লেখার দাবিদার। তবে শুরু হিসেবে আজকে আমরা দেখবো কিক্লোক কিভাবে আমাদের সিস্টেমে ডাউনলোড ও কনফিগার করতে হয়।

ডাউনলোড

কিক্লোকের ডাউনলোড পেজে গেলে আমরা নিচের ছবির মতো অনেকগুলো অপশন দেখতে পারবো।

১ম অপশনটি হচ্ছে OpenJDK এর মাধ্যমে standalone ডাউনলোড। ২য় অপশনটি হচ্ছে ডকারের মাধ্যমে ডাউনলোড করা। আজকের লেখায় আমরা এই দুটি অপশন দেখবো।

ডকার

ডকার মাধ্যমে কিক্লোকের ইমেজ ডাউনলোড ও কন্টেইনার তৈরীর ধাপগুলো সোজাসাপ্টা।

টার্মিনাল ওপেন করে নিচের কমান্ডটি রান করি।

docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:20.0.1 start-dev

ডকারের সাথে যাদের হালকা পাতলা পরিচয় আছে, তাদের জন্য কমান্ডটি সহজ। যাদের কাছে ডকার নতুন, তাদের জন্য দুঃসংবাদ হচ্ছে, যেহেতু এই লেখা ডকার নিয়ে নয় তাই আমরা বিস্তারিত আলোচনা করছি না। আর সুসংবাদ হলো, বিস্তারিত আলোচনা না করলেও কমান্ডটি ব্যাখ্যা করছি ।

  • docker run — এই কমান্ডের মাধ্যমে আমরা একটা ইমেজ ডাউনলোড বা পুল করছি, তার একটি কন্টেইনার তৈরী করছি এবং একইসাথে সেটা রান করছি।
  • -p 8080:8080- আমাদের সিস্টেমের 8080 পোর্টের সাথে কিক্লোক যে কন্টেইনারে রান হবে তার 8080 পোর্ট বাইন্ড বা কানেক্ট করে দিচ্ছি।
  • -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin — এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমে বলে দিচ্ছি, কিক্লোকের এডমিন ও পাসওয়ার্ড কী হবে।
  • quay.io/keycloak/keycloak:20.0.1 — যে ইমেজটি পুল বা ডাউনলোড করতে চাচ্ছি তার নাম ও ভার্সন নাম্বার। ইমেজ রিপোজিটরি থেকে ইমেজটি ডাউনলোড হবে। রিপোটি দেখতে চাইলে একটু চোখ বুলিয়ে নিতে পারেন এখানে
  • start-dev- ডেভেলপমেন্ট মোডে রান হবে।

ঠিকঠাক মতো ডাউনলোড হলে নিচের মতো আউটপুট আসবে।

কিক্লোক সার্ভার যে রান হয়েছে তা চেক করার জন্য ব্রাউজারে গিয়ে এই লিংকে গেলে নিচের মতো ছবি দেখতে পারবো -

Administration Console এ ক্লিক করলে নিচের মতো লগিন পেজ আসবে যেখানে ইউজারনেম ও পাসওয়ার্ড দিয়ে লগিন করতে পারবো।

১ মিনিট, ইউজার ও পাসওয়ার্ড কোথায় পাবো? মনে আছে এনভায়রনমেন্ট ভেরিয়েবলে আমরা এই দুটি ভ্যালু পাঠিয়েছিলাম? সেগুলো দিয়েই এখানে লগিন করতে হবে।

ডকারের রাস্তা ধরে আমাদের জার্নি আপাতত এখানে শেষ। এখন আমরা standalone ডাউনলোডের পথ ধরে আবার এখানে আসার চেষ্টা করি।

স্ট্যান্ডএলোন(standalone) ডাউনলোড

শুরুতেই যেটা মনে রাখতে হবে, এভাবে ডাউনলোড করে রান করার জন্য সিস্টেমে অবশ্যই OpenJDK ১১ বা তার পরের ভার্সন ইন্সটল করা থাকতে হবে। না থাকলে করে ফেলুন, আর থাকলে আমরা সামনে আগাই -

প্রথমে এই লিংকে গেলে নিচের মতো পেজ দেখতে পাবো।

এই লেখার সময় ভার্সন ২০.০.১। আপনাদের সময় সেটি অন্য হতে পারে।

এবার Server সেকশনের ভেতরে ১ম অপশন(keycloak) থেকে জিপ ফাইলটি ডাউনলোড করে আনজিপ করি।

আনজিপ করা ফোল্ডারের ভেতর প্রবেশ করি, যেখানে bin,conf, data, lib ইত্যাদি রয়েছে। এবার এই ফোল্ডারে টার্মিনাল ওপেন করি। অথবা টার্মিনাল থেকে এই ডিরেক্টরিতে আসি। অন্যথায় ফাইল/ফোল্ডার খুজে পাবেনা। এবার টার্মিনালে নিচের কমান্ড রান করি-

bin/kc.sh start-dev(লিনাক্সে)
bin/kc.bat start-dev(উইন্ডোজে)

সব ঠিক থাকলে নিচের মতো আউটপুট আসবে

লেখাগুলো চেনা চেনা লাগছে? ডকার কন্টেইনারের মাধ্যমে রান করার সময়ও আমরা এমন আউটপুট দেখেছিলাম। এরমানে আমরা ডকারকে ছেড়ে আসা রাস্তার খুব কাছাকাছি চলে এসেছি।

আবার localhost:8080 তে গেলে আমরা নিচের পেজটি দেখতে

পেজটি প্রায় পুরোটাই আগের মতো। পার্থক্য হচ্ছে, এখানে Administration Console এ শুরুতে আমাদের ইউজারনেম ও পাসওয়ার্ড দিয়ে ইউজার তৈরি করতে বলছে। কিন্তু কেন? কারণ এখানে আমরা এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমে আগে কোনো ইউজার তৈরি করি নি। চটপট তৈরি করে ফেলি, এরপর নিচের পেজটি আসবে।

এরমানে ডকার আর standalone দুই ধরণের ইন্সটলে আমরা এক বিন্দুতে এসে পৌছেছি। এবার সবার জন্য একইরকম পথ চলা।

আমাদের আসল উদ্দেশ্য পূর্ণ হয়েছে। এবার একটু কিক্লোকের ভেতরের জগতে ঢুকে উঁকিঝুকি দিয়ে দেখি, যাতে পরে কাজের সময় একেবারে অচেনা না লাগে।

লগিন করলে শুরুতেই আমরা নিচের মতো পেজ দেখতে পারবো যেখানে আমরা বর্তমান realm বা জগতের বিভিন্ন তথ্য পাবো।

এই realm বিষয়টা গুরুত্বপূর্ণ, কারণ কিক্লোক সবকিছু এই realm এর ভেতরে নিয়ন্ত্রণ করে। এটা সত্যিই একটা ভার্চুয়াল জগতের মতো।

ডিফল্টভাবে আমরা master realm দেখতে পাচ্ছি। চাইলে আমরা এখানেই কাজ হয়তো করতে পারি, তবে এই realm টি আসলে কিক্লোকের নিজের জন্য। এখানে কিছু করা রিকমেন্ডেড না। আমাদের প্রয়োজনে আমরা আলাদা একটা realm তৈরি করতে নিবো। এরজন্য উপরে বাম কোণায় master এর পাশের ড্রপডাউনে ক্লিক করে এরপর Create Realm বাটনে ক্লিক করি। একটি ফর্ম আসবে, সেখানে realm এর জন্য কোনো একটা নাম দিয়ে Create বাটনে ক্লিক করি। যেমন আমি development নামে একটি realm তৈরি করলাম।

create realm

আমাদের realm তৈরি হয়ে গেছে। উপরে বাম কোণায় তাকালে দেখতে পারবো আমরা এখন আমাদের তৈরি করা development realm এর ভেতরে আছি। এর নিচে আরো অনেক অপশন রয়েছে। কয়েকটায় চোখ বুলানো যাক

Realm settings

এখানে realm এর বিভিন্ন কনিফিগারেশন রয়েছে। উপরে General, Login, Email, Themes ইত্যাদি অনেকগুলো ট্যাব দেখতে পাচ্ছি। সেগুলো একটু ঘুরে দেখতে পারেন। আমরা যেহেতু আজকে কোনো এপ বা ক্লায়েন্ট কনফিগার করছি না তাই এসবে আর যাচ্ছি না।

Clients

কিক্লোকের সাথে আমরা আমাদের যে এপকে কানেক্ট করতে চাই কিক্লোকে তাকে ক্লায়েন্ট বলে। আমরা দেখতে পাচ্ছি ইতোমধ্যে কিছু প্রয়োজনীয় ক্লায়েন্ট তৈরি হয়েই আছে । এছাড়া আমাদের ক্লায়েন্ট তৈরি ও অন্যান্য কনফিগারেশন করতে পারি এখানে।

Users

Realm ও Client তৈরি করার পর আমরা যে জিনিসটা চাইবো তা হচ্ছে তাতে আমাদের প্রয়োজনীয় ইউজার যোগ করা। সেই সম্পর্কিত কাজগুলো আমরা এখানে করতে পারি।

Realm roles

এটা একটা নেমস্পেস যেখানে realm লেভেলে আমাদের তৈরি করা ইউজারদের কার কোন রোল থাকবে সেটা কনফিগার করতে পারি।

Identity providers

এটা বেশ ইন্টারেস্টিং একটা অংশ। আমাদের নিজেদের তৈরি করা ইউজার বাদেও আমরা OpenID Connect বা SAML ব্যবহার করতে পারি। এছাড়া বিভিন্ন সোশ্যাল মিডিয়া যেমন ফেসবুক, গুগল, গিটহাব(এবং আরো এত্তোগুলা) ব্যবহার করে আমরা ইউজারকে অথেনটিকেট করতে পারি।

ইন্টারেস্টিং, তাই না?

ইন্টারেস্টিং, তবে আগেই যেটা বলেছি, কিক্লোক অনেক বিস্তারিত একটা বিষয়। তাই আমাদের আজকের আর্টিকেলের পথ আজকে এখানেই শেষ করছি। আশা করি আরো ছোট ছোট বিষয় নিয়ে সামনে লিখবো।

পড়ার জন্য ধন্যবাদ। মূল্যবান মতামত বা পরামর্শ দিয়ে আমাকে আরো ভালো লেখার জন্য উৎসাহিত করতে পারেন। আমার লেখা অন্যান্য আর্টিকেলগুলো এখানে পড়তে পারেন।

এছাড়া আমি আছি লিংকডইন বা গিটহাবেও

আবারো ধন্যবাদ সবাইকে।

--

--