3rd पार्टी साइट के साथ सिंगल साइन-ऑन के लिए एपीआई बनाएं


13

मेरी साइट को एक 3 पार्टी सॉफ्टवेयर के साथ एकीकृत करने की आवश्यकता है, जो सॉफ्टवेयर कंपनी द्वारा होस्ट किए गए अपने स्वयं के उप-डोमेन पर रहेगा। मुझे एक एंडपॉइंट के साथ तीसरे पक्ष के डेवलपर्स प्रदान करने की आवश्यकता है जो वे मेरी साइट के उपयोगकर्ताओं को उप-डोमेन तक पहुंचने की अनुमति देने के लिए एपीआई कॉल (मेरे वर्डप्रेस साइट पर) का उपयोग कर सकते हैं।

दूसरी साइट को कुछ प्रकार के एपीआई के माध्यम से मेरी साइट से उपयोगकर्ताओं को प्रमाणित करने की आवश्यकता है।

मुझे यकीन नहीं है कि कहां से शुरू करना है, लेकिन मेरी समझ यह है कि यह मेरे द्वारा समझदार लोगों द्वारा पता लगाया गया है। अग्रिम में धन्यवाद!


1
किस तरह की एपीआई कॉल की जरूरत होगी? तुम क्या करने की कोशिश कर रहे हो? क्या आपने WP के XML-RPC सपोर्ट ( codex.wordpress.org/XML-RPC_Support ) को देखा है?
अनु

अन्य साइट को मेरी WP साइट से उपयोगकर्ताओं को सत्यापित / प्रमाणित करने की आवश्यकता है।
एमुथोथिसिस

जवाबों:


16

क्रॉस-साइट स्क्रिप्टिंग समस्याएँ

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

एक एपीआई एंडपॉइंट बनाएं

इस लेख को देखें जो मैंने अभी यहाँ लिखा है: http://coderrr.com/create-an-api-endpoint-in-wordpress/

इसके अलावा, आप यहां कोड प्रदर्शन देख सकते हैं: https://gist.github.com/2982319

आपको अपने स्वयं के ऐप की ज़रूरतों के लिए तर्क का पता लगाना होगा, लेकिन यह आपको एक समापन बिंदु बनाने की अनुमति देगा जहां आप वर्डप्रेस की ओर से अपनी इच्छानुसार कुछ भी सेवा कर सकते हैं।

चूंकि आप वर्डप्रेस को प्रमाणीकरण साइट के रूप में उपयोग कर रहे हैं, इसलिए आप is_user_logged_in () जैसे चेक का उपयोग कर सकते हैं। यदि वे लॉग इन हैं, तो किसी भी जानकारी के साथ किसी उपयोगकर्ता वस्तु को तीसरे पक्ष को लौटा दें, जिसकी उन्हें आवश्यकता है।

थर्ड-पार्टी से लॉग इन करना

तृतीय-पक्ष से, वे आपके अप्रत्यक्ष अनुभव के लिए redirect_to क्वेरी संस्करण का उपयोग करके आपके लॉगिन पृष्ठ से लिंक कर सकते हैं। एक बार लॉग इन करने के बाद, यह उन्हें तीसरे पक्ष की साइट पर वापस भेज देगा।

http://sub.yourdomain.com/wp-login.php?redirect_to=http%3A%2F%2Fwww.third-party-domain.com

रिमोट लॉगिन

यदि आपको तृतीय-पक्ष साइट से उपयोगकर्ताओं को वर्डप्रेस में लॉगिन करने की आवश्यकता है, तो आप इस साइट पर सूचीबद्ध कुछ सरल WP फ़ंक्शन का उपयोग कर सकते हैं: http://kuttler.eu/code/log-in-a-wordpress-user-programmatically/

आपको निश्चित रूप से एक साझा रहस्य का उपयोग करने और चीजों को सुरक्षित रखने के लिए उस रहस्य से समय आधारित हैश बनाने की आवश्यकता होगी। मूल रूप से, यहाँ यह कैसा दिखेगा:

तृतीय पक्ष एक टाइमस्टैम्प और एक साझा रहस्य द्वारा उत्पन्न टोकन के साथ अनुरोध भेजता है:

$shared_secret = 'foobar'; //do not send this to the API endpoint
$timestamp = time();
$token = md5($shared_secret.$time_stamp);

WordPress स्थापना अनुरोध प्राप्त करता है:

$shared_secret = 'foobar';
$timestamp = esc_attr($_GET['timestamp']);

if((time() - $timestamp) > 30) # Threshold is 30 seconds
    //do something here - TOKEN expired!

$token = md5($share_secret.$timestamp);
$token_to_check = esc_attr($_GET);

if($token == $token_to_check)
    //authenticated!

यह निश्चित रूप से निश्चित है कि सॉफ़्टवेयर का 3rd पार्टी टुकड़ा WP से कोई लेना-देना नहीं है, इसलिए अनिवार्य रूप से यह एकल साइन ऑन है, लेकिन प्रमाणीकरण प्रदाता के रूप में WP अभिनय के साथ है।
अनु

@anu: यह सही है।
इमेरोथिसिस

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

@ मैं अब देख रहा हूं। गलतफहमी के लिए खेद है। आप मेरे द्वारा बनाए गए एंडपॉइंट विचार का उपयोग कर सकते हैं और प्रमाणीकरण के लिए उपयोगकर्ता मेटा में साझा टोकन का उपयोग कर सकते हैं। यदि उपयोगकर्ता मौजूद है तो 3-पार्टी के लिए JSON प्रतिक्रिया लौटाएं।
ब्रायन फीगर

1
बहुत अच्छा समाधान है। यदि विभिन्न सर्वरों पर एप्लिकेशन इंस्टॉल किए गए हैं और किसी कारण से प्रत्येक मशीन का समय अलग है, तो समस्या हो सकती है। मैं counterइसके बजाय इसका उपयोग करने time()और अनुरोध के साथ इसे पारित करने का सुझाव दूंगा। दोनों पक्ष अंतिम काउंटर पास रखते हैं, और जब एपी को नए काउंटर के साथ अनुरोध प्राप्त होता है, तो यह सत्यापित करता है कि नया पिछले एक से अधिक है। इस तरह एक विलंब कोई नुकसान नहीं कर सकता है।
मंगलनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.