2015-08-24 6 views
5

इस प्रश्न को विशिष्ट और बिंदु पर रखने के लिए नया प्रश्न।मैं सार्वजनिक आरएसए कुंजी का उपयोग कर JSON वेब टोकन को कैसे सत्यापित करूं?

मेरे पास Azure से जेडब्ल्यूटी है और अब मुझे अपने आवेदन में हस्ताक्षर सत्यापित करने की आवश्यकता है।

Microsoft से सार्वजनिक कुंजी यहां पाया जा सकता:

https://login.windows.net/common/discovery/keys

मैं इन कुंजियों का उपयोग कैसे करूँ एक हस्ताक्षर सत्यापित करने के? मैं ये बता सकता हूं कि ये सार्वजनिक कुंजी हैं जिन्हें मुझे जेडब्ल्यूटी में एक्स 5 टी हेडर के रूप में आवश्यक है, जो इस सार्वजनिक कुंजी सूची में मेल खाते हैं।

मैं जेडब्ल्यूटी PHP लाइब्रेरी का उपयोग कर रहा हूं लेकिन सार्वजनिक कुंजी के रूप में जो कुछ भी मैं दर्ज करता हूं वह असफल लगता है।

supplied key param cannot be coerced into a public key 

तो, ऊपर के लिंक का उपयोग कर उस पैरामीटर तीन (नीचे उदाहरण में $ कुंजी) के रूप में पीएचपी openssl_verify समारोह में वहां से चला जाता है?

$success = openssl_verify($msg, $signature, $key, 'SHA256') 

जो कुछ भी मैं दर्ज करता हूं वह एक तरफ या किसी अन्य तरीके से त्रुटि का कारण बनता है।

धन्यवाद,

+0

इस लिंक के पृष्ठ के बहुत नीचे http://bshaffer.github.io/oauth2-server-php-docs/overview/jwt-access-tokens/ यह वर्णन करता है कि PHP का उपयोग करके जेडब्ल्यूटी को कैसे सत्यापित किया जाए। – honerlawd

उत्तर

8

समस्या हल हो गई।

बाहर कर देता है कि JSON सारणी की X5C हिस्सा है प्रमाण पत्र नहीं सार्वजनिक कुंजी तो JSON डिकोडिंग https://login.windows.net/common/discovery/keys और X5C तत्व हथियाने और सार्वजनिक कुंजी काम करता है प्राप्त करने के लिए openssl का उपयोग कर:

$cert_object = openssl_x509_read($cert); 

$pkey_object = openssl_pkey_get_public(cert_object); 

$pkey_array = openssl_pkey_get_details($pkey_object); 

$publicKey = $pkey_array ['key']; 

इस उदाहरण $ में प्रमाण X5C मान है। हालांकि यह अपने आप पर पर्याप्त नहीं है क्योंकि यह X509 को एन्कोड नहीं किया गया है। तो मैंने जो किया वह सर्टिफिकेट.सर नामक विंडोज़ में एक नई फाइल तैयार करता है, नोटपैड में खुलता है और एक्स 5 सी वैल्यू डालता है। फिर विंडोज़ में थर्मर पर डबल क्लिक करके, विवरण टैब पर नेविगेट करके "फ़ाइल में प्रतिलिपि" पर क्लिक करके यह प्रमाणपत्र निर्यात विज़ार्ड खोलता है।

X509 के रूप में निर्यात करें और सर्वर पर अपलोड करें।

$cert = file_get_contents('Certificates/Public/public.cer'); 

काम करता है! शायद एक आसान तरीका है लेकिन यह काम करता है।

संबंधित मुद्दे