นี่คือพร็อกซี GitHub API ไร้สถานะ ที่อนุญาตให้สร้างและใช้โทเค็น GitHub API แบบจำกัดการเข้าถึง
โดยพื้นฐานแล้วมันคือการจัดการข้อมูลประจำตัวและการเข้าถึงสำหรับโทเค็น GitHub API
โทเค็น API ของ GitHub ไม่อนุญาตให้มีการควบคุมอย่างละเอียดว่าโทเค็นจะดำเนินการใดได้บ้าง (ดูปัญหา Dear GitHub นี้) ตัวอย่างเช่น โดยทั่วไป คุณจะต้องสร้างโทเค็นที่สามารถควบคุมพื้นที่เก็บข้อมูลได้อย่างสมบูรณ์เพื่ออนุญาตให้โทเค็นใช้ป้ายกำกับกับปัญหาเท่านั้น
นี่เป็นปัญหาในระดับ เมื่อคุณมีงาน กระบวนการ และ/หรือบอทจำนวนมากที่โต้ตอบกับ GitHub API คุณจะเพิ่มโอกาสที่โทเค็นอาจถูกบุกรุก และโทเค็นที่ได้รับอนุญาตในวงกว้างจะมีผลกระทบที่ตามมาสูงมาก
พร็อกซีนี้อนุญาตให้คุณสร้างโทเค็น API ที่มีสิทธิ์แบบละเอียด ( โทเค็นเวทย์มนตร์ ) จากนั้นพูดคุยกับ GitHub API โดยใช้โทเค็นเวทย์มนตร์เหล่านั้นผ่านพร็อกซี พร็อกซีตรวจสอบโทเค็นเวทย์มนตร์ว่าอนุญาตให้ดำเนินการตามที่ร้องขอ จากนั้นส่งต่อคำขอไปยัง GitHub API โดยใช้โทเค็น GitHub API จริง
พร็อกซีนี้ไม่ต้องการพื้นที่เก็บข้อมูลสำรอง และจัดเก็บสถานะทั้งหมดไว้ในโทเค็นเวทย์มนตร์
พร็อกซีใช้การเข้ารหัสแบบอสมมาตร (คู่คีย์สาธารณะและส่วนตัว) และ JWT เพื่อเข้ารหัสสถานะลงในโทเค็นเวทย์มนตร์
โทเค็นเวทย์มนตร์แต่ละรายการเป็น JWT แบบธรรมดาที่ลงนามโดย คีย์ส่วนตัว ของพร็อกซีพร้อมการอ้างสิทธิ์เหล่านี้:
{
"iat": 1541616032,
"exp": 1699296032,
"github_token": "[long encrypted key]",
"scopes": [
"GET /user",
"GET /repos/theacodes/nox/issues"
]
}
การอ้างสิทธิ์ github_token
เป็นเวอร์ชันที่เข้ารหัสของโทเค็น GitHub API แบบดิบ มีการเข้ารหัสโดยใช้ กุญแจสาธารณะ ของพร็อกซี เพื่อให้มีเพียงพร็อกซีเท่านั้นที่สามารถถอดรหัสได้ (โดยใช้รหัส ส่วนตัว )
การอ้างสิทธิ์ขอบเขตจะกำหนดว่าโทเค็นเวทย์มนตร์สามารถเข้าถึงอะไรได้บ้าง พร็อกซีนี้มีการใช้งานขอบเขตพื้นฐานขั้นพื้นฐานตามที่อธิบายไว้ด้านล่าง แต่คุณสามารถใช้กลยุทธ์การกำหนดขอบเขตใดๆ ที่คุณต้องการได้
JWT ถูกสร้างและลงนามโดยพรอกซีเองโดยใช้ รหัสส่วนตัว ซึ่งหมายความว่าเนื้อหาไม่สามารถถูกดัดแปลงโดยไม่ทำให้ JWT เป็นโมฆะ
ตามค่าเริ่มต้น พร็อกซีนี้มีกลยุทธ์ขอบเขตอย่างง่ายโดยใช้รูปแบบ:
METHOD /url/pattern
โดยที่ METHOD
สามารถเป็น GET
, POST
, PUT
ฯลฯ และ /url/pattern
สามารถเป็นนิพจน์ทั่วไปที่ใช้ในการตรวจสอบ URL
ตัวอย่างเช่น หากต้องการสร้างโทเค็นที่สามารถเข้าถึงปัญหาของพื้นที่เก็บข้อมูลใน someorg
คุณสามารถทำได้:
GET /repos/someorg/.+?/issues
สิ่งที่ต้องทำ
นี่ไม่ใช่ผลิตภัณฑ์อย่างเป็นทางการของ Google การทดลองหรืออย่างอื่น นี่ไม่ใช่สัญลักษณ์แสดงหัวข้อย่อยเพื่อความปลอดภัย คุณต้องยอมรับความเสี่ยงทั้งหมดเมื่อใช้โครงการนี้