Dotnet core JWT auth
1. Common authorization
Хамгийн түгээмэл ашиглагддаг authorization бол Session ID, cookie юм. Хэрэглэгч амжилттай нэвтрэх үед сервэр дээр Session ID үүсгээд, client руу дамжуулдаг. Эргээд client-аас хүсэлт орж ирэх үед cookie-д агуулагдаж буй Session ID-г шалгаж, тухайн хүсэлтийг биелүүлэх эсэхийг шийддэг.
2. JWT authorization
Хэрэглэгч амжилттай нэвтрэх үед сервер JSON web token үүсгэж client руу буцаадаг. Ингэхдээ өөрийн түлхүүр үгээр (key) шифрлэж (encode), тэмдэглэгээ (sign) хийдэг. JWT authorization нь сервер дээр Session ID гэх мэт ямар ч мэдээлэл хадгалдаггүйгээрээ давуу талтай. Client-аас хүсэлт орж ирэх үед JWT дотроос хэрэглэгчийн мэдээлэл, signature-ыг шалгаж, тухайн хүсэлтийг биелүүлэх эсэхийг шийддэг.
Client-аас ирсэн JWT доторх мэдээлэл өөрчлөгдсөн эсэхийг сервер өөрийн sign хийсэн key-ээрээ шалгадаг. Microservice архитектороор зохион байгуулагдсан сервер дээр JWT ашиглах нь маш тохиромжтой. Учир нь microservice-үүд хоорондоо Session ID дамжуулах шаардлагагүйгээр JWT ашиглан тухайн хүсэлт илгээж буй хэрэглэгч нэвтэрсэн эсэхийг мэдэх боломжтой.
JSON web token 3 хэсгээс бүрддэг.
- Header: Кодлохдоо ямар алгоритм ашигласан талаар мэдээлэл агуулах бөгөөд Base64 форматтай.
- Playload: Хэрэглэгчийн нэр, ID гэх мэт янз бүрийн мэдээлэл хадгалах боломжтой.
- Signature: Header болон Payload-ыг base64 рүү хөрвүүлж, тусгай key ашиглан кодоор шифрлэнэ (hash). Payload дахь мэдээллийг хэн нэгэн өөрчлөх боломжтой. Хэдий тийм боловч payload дахь мэдээллийг signature нь өөртөө шифрлэж хадгалсан учир өмнөх мэдээлэл өөрчлөгдсөн эсэхийг тэр даруй мэдчих боломжтой.
JWT өөрчлөгдсөн бол Signature буруу байна гэсэн алдаа өгнө.
2 өөр сервер рүү нэг JWT ашиглан хүсэлт шидэх бол дундаа нэг ижил secret key тохируулсан байх шаардлагатай.
JWT жишээ project ажиллууулах:
Алхам -1: GitHub project татаж, Visual Studio дээр ажиллуулах.
Алхам-2: Postman-аас http хүсэлт шидэж, JSON web token авах.