convert pem to jwk ทำอย่างไร

id token ที่ใช้ algor RS256 จะถูกสร้างจาก private key จะเป็นไฟล์ที่มีนามสกุล Privacy Enhanced Mail (.pem) เวลา client จะทำการ verify signature ของ id token จะต้องใช้ public key ซึ่ง เวลาที่สร้าง private key นั้น มันจะมี public key เป็น keypairs คู่กันอยู่แล้ว เพื่อใช้สำหรับถอดรหัส ซึ่งใน Lib จะใช้โหนด “kid” (key id) ของ jkw(json web token) ซึ่งไฟล์ jwk นั้น สามารถ convert มาจาก private key(pem) ได้ และเลือกเอาแต่ส่วนที่เป็น public key เพื่อนำมาทำ jwk ได้ อันจะเห็นได้จากตัวอย่างของ google ที่ลิ้งนี้ https://www.googleapis.com/oauth2/v2/certs

วิธีการ convert pem to jwk ทำอย่างไร
1. ติดตั้ง node.js เพื่อใช้คำสั่ง npm ติดตั้ง module เพื่อที่จะใช้ convert pem to jwk
2. ใช้คำสั่ง openssl เพื่อสร้าง private.pem

openssl genrsa -out private.pem 2048

3. ใช้คำสั่ง node convert.js เพื่อ convert private.pem เป็น cert.jwk

ขั้นตอนและรายละเอียดอ่านเพิ่มเติมที่นี่

https://github.com/OADA/rsa-pem-to-jwk#rsapemtojwkpem-extrakeys-type

ตัวอย่างไฟล์ convert.js ที่เราต้องสร้างและรันด้วย node.js หลักการทำงานจะอ่านไฟล์ private.pem และใช้ module rsa-pem-to-jwk สร้าง cert.jwk ออกมา

var fs = require('fs');
var rsaPemToJwk = require('rsa-pem-to-jwk');

var pem = fs.readFileSync('private.pem');

var jwk = rsaPemToJwk(pem, {use: 'sig'}, 'public');

console.log(JSON.stringify(jwk));

fs.writeFile("cert.jwk", JSON.stringify(jwk), function(err) {
if(err) {
return console.log(err);
}

});

ตัวอย่างไฟล์ cert.jwk ที่ได้มาเป็นถือเป็น public key ใช้ถอดรหัส id token signature

{

"kty":"RSA",

"use":"sig",

"n":"ANa5v64jAMVAWAKN9RyuI6GOLivCyIMstwl5yncOTiSj098_INOukM8kaVO8QLm4bUobev1eb4VwgPIEzWiCXKeVDaCtf2lQRF5MaVH7nqJSjoOC2MbXtPa0Mv71z_Ov-YcmTL05MxNxxg-A8miVM05xsNNBW2xegBL4bYplNeY4hJ5a2x3NFgg1z7WHwo0v4JqPJi4KqOMtqoJ-4orVgo3AEI6JgylRZbLdrJoTHN1F_ufcH1KkMgPCce90Hy0GA6PnFm1JrOVE7jyx1qv9vFtQQ31wQYMYcGJIsUuqfeiU-e8McF6qDI9KJgJ9vikcrb9a5IuM8KAuQvj_kuq8aeU",

"e":"AQAB"

}

หลังจากนี้เราก็เพิ่มโหนด “kid” เข้าไป และนำมาทำเป็นโหนดซ้อน keys ตาม google ได้เลย

เท่านี้เราก็ได้ cert.jwk เป็นของ server เราเอง เพื่อให้ third party ใช้งานกันได้แล้ว

Related posts:

This entry was posted in ไม่มีหมวดหมู่. Bookmark the permalink.