ক্রস ডোমেন প্রমাণীকরণের জন্য JWT ব্যবহার করে একক সাইন অন প্রবাহ


112

Json Web Tokenপ্রমাণীকরণের জন্য জেডাব্লুটি ( ) ব্যবহার করার বিষয়ে ওয়েবে প্রচুর তথ্য রয়েছে । তবে আমি একাধিক ডোমেন পরিবেশে একক সাইন-অন সমাধানের জন্য জেডাব্লুটি টোকেন ব্যবহার করার সময় প্রবাহটি কী হওয়া উচিত তার স্পষ্ট ব্যাখ্যা আমি খুঁজে পাইনি ।

আমি এমন একটি সংস্থার জন্য কাজ করি যার বিভিন্ন হোস্টে প্রচুর সাইট রয়েছে। এর ব্যবহার করা যাক example1.com এবং example2.com । আমরা একটি একক সাইন-অন সমাধান, একজন ব্যবহারকারী পরিচয় প্রমাণিত, তাহলে মানে প্রয়োজন example1.com , আমরা চাই তাকে এছাড়াও প্রামাণ করা example2.com , স্বয়ংক্রিয়ভাবে।

ব্যবহার থেকে OpenID প্রবাহ, আমি বুঝতে পারি যে ব্যবহারকারী কে প্রমাণীকরণ করতে চায় example1.com প্রথম আপনাকে পুনঃনির্দেশিত করা হবে প্রমাণীকরণ সার্ভার (অথবা OP: "OpenID সরবরাহকারী")। ব্যবহারকারী সেই সার্ভারে অনুমোদন দেয় যা তারপরে স্বাক্ষরিত জেডাব্লুটি টোকেন সহ তাকে মূল উদাহরণ 1.com সাইটে ফিরিয়ে আনবে। (আমি বুঝতে পারি যে আরও একটি প্রবাহ রয়েছে যা মধ্যবর্তী টোকেনটি দেয় যা পরে নিজেই সত্যিকারের জেডব্লিউটি টোকেনের জন্য বিনিময় হতে পারে, তবে আমি মনে করি না এটি আমাদের জন্য প্রয়োজনীয়)) ...

সুতরাং এখন ব্যবহারকারী উদাহরণ 1.com এ ফিরে এসেছে এবং সত্যায়িত হয়! তিনি অনুরোধ করতে পারেন, Authenticationশিরোনামে JWT টোকন পাস করে এবং সার্ভার স্বাক্ষরিত JWT যাচাই করতে সক্ষম এবং তাই ব্যবহারকারীকে সনাক্ত করতে সক্ষম। নিস!

প্রথম প্রশ্ন :

কীভাবে JWT টোকন ক্লায়েন্টে সংরক্ষণ করা উচিত? এ সম্পর্কে আবারও প্রচুর তথ্য রয়েছে এবং লোকেরা মনে হয় যে Web Storageএই ব্যবহারটি ভাল পুরানোের চেয়ে বরং চলার পথ cookies। আমরা চাই যে JWT ব্রাউজার পুনরায় আরম্ভের মধ্যে অবিচল থাকে তাই আসুন আমরা ব্যবহার করি Local Storage, না Session Storage...

এখন ব্যবহারকারী তার ব্রাউজারটি পুনরায় চালু করতে পারবেন এবং জেডাব্লুটি টোকেনটির মেয়াদ শেষ না হওয়া পর্যন্ত তিনি উদাহরণ 1.com এ প্রমাণীকরণ করবেন !

এছাড়াও, যদি উদাহরণ 1.com আমাদের অন্য ডোমেনগুলিতে একটি অ্যাজাক্স অনুরোধ করা দরকার, আমি বুঝতে পারি যে সিওআরএস কনফিগার করা এটির অনুমতি দেয়। তবে আমাদের প্রধান ব্যবহারের ক্ষেত্রে ক্রস-ডোমেন অনুরোধ নয়, এটির একটি একক সাইন-অন সমাধান রয়েছে !

সুতরাং, মূল প্রশ্ন:

এখন, প্রবাহটি কী হওয়া উচিত, যদি ব্যবহারকারী উদাহরণ 2.com এ যান এবং আমরা ইতিমধ্যে তার কাছে থাকা জেডাব্লুটি টোকেন ব্যবহার করে তাকে প্রমাণীকরণ করতে চাই? Local Storageক্রস-ডোমেন অ্যাক্সেসের অনুমতি দেবে বলে মনে হচ্ছে না তাই এই মুহুর্তে ব্রাউজারটি উদাহরণ 2.com এ অনুরোধ করার জন্য জেডাব্লুটি টোকনটি পড়তে পারে না !

উচিত:

  • ব্যবহারকারীকে আবার প্রমাণীকরণের সার্ভারে পুনঃনির্দেশিত করা হবে ? ব্যবহারকারীর জন্য প্রামাণ যখন example1.com , প্রমাণীকরণ সার্ভার তাই এই নতুন প্রমাণীকরণ অনুরোধ ব্যবহারকারী একটি কুকি সেট হতে পারে example2.com যে কুকির ব্যবহার করতে পারে দেখতে ব্যবহারকারী ইতিমধ্যে অনুমোদন যাচাই করা হয় এবং অবিলম্বে তাকে ফিরে পুননির্দেশনা example2.com একই JWT টোকেন সঙ্গে?
  • অথবা ব্রাউজার, উদাহরণ 2.com এ , আবার প্রমাণীকরণের সার্ভারে না গিয়েই JWT টোকেন অ্যাক্সেস করতে পারে ? আমি দেখতে পাচ্ছি যে ক্রস-স্টোরেজ সমাধান রয়েছে তবে সেগুলি কি বহুল ব্যবহৃত হয়? তারা কি ক্রস ডোমেন এসএসও পরিবেশের প্রস্তাবিত সমাধান?

আমরা অভিনব কিছু চাই না, আমরা বেশিরভাগ ব্যবহৃত সমাধানে খুশি হব!

উত্তর:


28

ব্যবহারকারীর আবার প্রমাণীকরণের সার্ভারে পুনঃনির্দেশ করা উচিত এবং একটি নতুন টোকেন (জেডাব্লুটি) পাওয়া উচিত, এটি একটি বিশেষভাবে উদাহরণ 2.com জন্য লক্ষ্যযুক্ত। এইভাবে ওপেনআইডি কানেক্ট এবং অন্য কোনও ক্রস-ডোমেন ফেডারেটেড এসএসও প্রোটোকল কাজ করে।


15
তবে ব্যবহারকারীকে প্রমাণীকরণের শংসাপত্রগুলি (যেমন ব্যবহারকারীর নাম / পাসওয়ার্ড) পুনরায় পাঠাতে হবে না কারণ এটি এসএসও, তাই না? তাহলে এটি কিভাবে হয়? প্রমাণীকরণের সার্ভারটি কি প্রথমবার ব্যবহারকারীর জন্য একটি আদর্শ কুকি সেট করা উচিত, যাতে এই ব্যবহারকারী কোনও নতুন ডোমেন থেকে ফিরে আসার পরে এটি স্বয়ংক্রিয়ভাবে তাকে প্রমাণীকরণ করতে পারে?
ইলেক্ট্রোটাইপ

7
তবে যদি ব্যবহারকারী সমস্ত কুকি অবরোধ করতে ব্রাউজারটি কনফিগার করে?
খ্রিস্টিয়ান ওয়েস্টারবিক

1
আমার ধারণা, কুকিজ সম্পর্কে একটি সতর্কতা দেওয়া উচিত যা "আপনার ব্রাউজার কুকিগুলি ব্লক করে দিলে সাইটটি ঠিকমতো কাজ করতে পারে না"
অ্যানবিসউ

একক সাইনন অগত্যা এটি বোঝায় না যে ব্যবহারকারীর একটি কুকি দ্বারা চলমান একটি সেশন রয়েছে: এর সংজ্ঞায়িত বৈশিষ্ট্যটি হ'ল বিভিন্ন তৃতীয় পক্ষের অ্যাপ্লিকেশনগুলিতে অ্যাক্সেস অর্জন করতে একই পরিচয় সরবরাহকারীর বিরুদ্ধে একই শংসাপত্রগুলি পুনরায় ব্যবহার করা হয় অর্থাৎ কোনও কুকির প্রয়োজন নেই, ঠিক একই ক্রেডিটগুলির পুনরায় ব্যবহার করুন
হান্স জেড।

35

ব্যবহারকারী শংসাপত্রগুলির অনুরোধ করতে লগ ইন না করে এবং নতুন প্রমাণীকরণের টোকেন ইস্যু করার সময় ব্যবহারকারীকে কেন্দ্রীয় প্রমাণীকরণ পরিষেবায় পুনর্নির্দেশ করা হ'ল oauth2 বা ওপেনআইডি কানেক্টের মতো সুপরিচিত প্রোটোকল ব্যবহার করে সিঙ্গল সাইন অন সিস্টেমে সাধারণ পরিস্থিতি is

তবে যখন এই স্কিমাটি ডোমেনগুলিতে ব্যবহার করা হয় তখন মূল ত্রুটিটি হ'ল একই-উত্স নীতিমালার কারণে ব্যবহারকারী প্রতিবার অন্য ডোমেনে নেভিগেট করে পুনঃনির্দেশিত এবং প্রমাণীকরণ করতে চলেছে : অ্যাক্সেস টোকেন ডোমেনগুলির মধ্যে ভাগ করা example2.comযায় না ( ডেটা অ্যাক্সেস করতে পারে না) এর example1.com), সুতরাং লক্ষ্যযুক্ত ডোমেন ব্যবহারকারীকে অচিহ্নিত হিসাবে বিবেচনা করবে, তাকে কেন্দ্রীয় এসএসও পরিষেবাতে পুনর্নির্দেশ করবে।

পুনরায় অনুরোধ শংসাপত্রগুলি থেকে প্রমাণীকরণ পরিষেবাটি রোধ করার জন্য, একটি সেশন কুকি (অ্যাক্সেস টোকেন নয়) থাকা সাধারণ বিষয়, তবে ব্রাউজার লোকালস্টোরেজ / কুকিজ এবং একটি ইন্টারমিডিয়েট ডোমেনের দিকে ইশারা করে ডোমেনগুলিতে ডেটা ভাগ করার একটি প্রযুক্তি রয়েছে sso.example.com

  1. এতে ব্যবহারকারীকে প্রমাণীকরণ করতে example1.com, তাকে প্রমাণীকরণের সার্ভারে পুনর্নির্দেশ করুন, প্রমাণীকরণের sso.example.comপরে একটি JWT জারি করুন এবং এটিকে এই ডোমেনের স্থানীয় স্টোরেজে সংরক্ষণ করুন। এর পরে, ব্যবহারকারীকে মূল ডোমেন উদাহরণ 1.com এ পুনঃনির্দেশ করুন

  2. example2.comনির্দেশ করে একটি iframe তৈরি করুন sso.example.com। Sso.example.com- এ থাকা iframe JWT টোকন পড়ে এবং পিতামাত্ত পৃষ্ঠায় একটি বার্তা প্রেরণ করে

  3. মূল পৃষ্ঠাটি বার্তাটি গ্রহণ করে এবং এসএসও প্রবাহের সাথে সংযুক্ত টোকেনটি অবিরত করে

সম-উত্স নীতিতে কোনও সমস্যা নেই কারণ sso.example.comএর লোকাল স্টোরেজে অ্যাক্সেস রয়েছে এবং যদি উত্স এবং লক্ষ্য ডোমেনগুলি একে অপরকে স্বীকৃতি দেয় তবে আইফ্রেমে এবং প্যারেন্ট পৃষ্ঠার মধ্যে যোগাযোগের অনুমতি রয়েছে (দেখুন http://blog.teamtreehouse.com/cross-domain- পোস্টম্যাসেজ সহ মেসেজিং )

উন্নয়ন সহজ করার জন্য, আমরা সম্প্রতি https://github.com/Aralink/ssojwt এ JWT সহ একটি ক্রস ডোমেন এসএসও প্রকাশ করেছি

এই পদ্ধতিটি এসএসও প্রবাহের সাথে পুরোপুরি সামঞ্জস্যপূর্ণ। পুনঃনির্দেশ ছাড়াই প্রমাণীকরণ টোকেন ভাগ করে নেওয়ার এবং ডোমেনগুলি সংঘবদ্ধ করার সময় অপ্রয়োজনীয় লগ-ইনগুলি এড়াতে কেবল এটি একটি উপায় is


3
এই সমাধানটি কোনও মানকে অনুসরণ না করা ছাড়াও সাধারণত ক্রস-ডোমেন এসএসও-তে একজন প্রশাসনিক গণ্ডি অতিক্রম করে এবং সে ক্ষেত্রে উভয় ডোমেনের জন্য খুব একই জেডাব্লুটিটি ব্যবহার করে একটি ডোমেনে কোনও অ্যাপ্লিকেশন মালিকের পক্ষে অন্যটিতে ব্যবহারকারীর ছদ্মবেশ তৈরি করার সম্ভাবনা খুলে যায় ডোমেন
হান্স জেড

6
ধন্যবাদ @ હંজ আমরা কয়েক ডজন অ্যাপ্লিকেশন এবং একই ব্যবহারকারীর সাথে একাধিক ডোমেনের একক প্রশাসনের জন্য এই সমাধানটি বাস্তবায়িত করেছি। অপারেশনটি গুগল সিস্টেমে অনুরূপ (তুলনামূলকভাবে কথা বলা)
পেডরফবি

2

এটি আপনার প্রশ্নের উত্তর দেয় কিনা তা নিশ্চিত না, তবে যদি আপনার মূল লক্ষ্য একক সাইন-অন হয় তবে আমি মনে করি একটি সাধারণ বিপরীত প্রক্সি আপনার সমস্যার সমাধান করবে (কমপক্ষে ক্রস-ডোমেন স্টোরেজ এক)।

সুতরাং example1.com উদাহরণ2.com

কিছু হয়ে যাবে

example.com/example1

example.com/example2

(এবং ব্যবহারকারীর পক্ষ থেকে, এটি সাধারণত ক্লিনার)

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

এবং যদি এটি কোনও বিকল্প না হয়, আপনাকে ব্রাউজারগুলি ক্রস-ডোমেন ইন্টারঅ্যাকশন সম্পর্কে আরও কঠোর হয়ে উঠছে বলে আপনার ব্যবহারকারীর নাম + পিনটি নিতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.