ما هي المطالبة (Claim)؟
المطالبة (Claim) هي زوج اسم-قيمة ينقل معلومات محددة. على سبيل المثال، في كائن JSON:
{
"sub": "foo",
"email": "[email protected]"
}
في هذا المثال، “sub” هو مطالبة (Claim) تمثل معرف الموضوع بالقيمة “foo”، و”email” هو مطالبة (Claim) تمثل عنوان البريد الإلكتروني بالقيمة [email protected]
.
نستخدم الموضوع (subject) بدلاً من المستخدم (user) لأنه بدون تعريف واضح، يمكن أن يمثل الموضوع (
sub
) مستخدمًا أو جهازًا أو أي كيان.
استخدامات المطالبات (Claims)
تستخدم المطالبات (Claims) بشكل واسع في سياقات مختلفة مثل:
- رمز الويب جيسون (JSON Web Token, JWT) : في JWT، تستخدم المطالبات لتمثيل معلومات حول التوكن، مثل المصدر (issuer) (
iss
)، والموضوع (sub
)، ووقت الانتهاء (exp
). - OpenID Connect (OIDC) : في OIDC، تستخدم المطالبات لتمثيل معلومات المستخدم في رمز الهوية (ID token) و نقطة نهاية معلومات المستخدم (Userinfo endpoint) ، مثل عنوان بريد المستخدم الإلكتروني (
email
)، الاسم (name
)، وصورة الملف الشخصي (picture
).
المطالبات القياسية
في JWT و OIDC، هناك مطالبات قياسية محددة بالمواصفات. بعض المطالبات القياسية الشائعة تشمل:
iss
: مصدر التوكن. على سبيل المثال، إذا كانت خادم التفويض (Authorization server) التي أصدرت التوكن هيhttps://example.com
، ففي معظم الحالات ستكون مطالبةiss
نفسها (https://example.com
).sub
: موضوع التوكن. يمثل الكيان المتعلق بالتوكن. على سبيل المثال، في توكن هوية، تمثل مطالبةsub
عادة معرف المستخدم.aud
: جمهورية التوكن. تشير إلى المستلمين الذين يهدف التوكن لهم. على سبيل المثال، إذا كان التوكن مخصصًا للوصول إلى API فيhttps://api.example.com
، فستكون مطالبةaud
نفسها (https://api.example.com
).exp
: وقت انتهاء التوكن. يشير إلى متى ينبغي عدم قبول التوكن للمعالجة.nbf
: الوقت “ليس قبل” للتوكن. يشير إلى متى ينبغي بدء قبول التوكن للمعالجة.iat
: وقت إصدار التوكن. يشير إلى متى تم إصدار التوكن.jti
: معرف JWT للتوكن. يوفر معرفًا فريدًا للتوكن.
كما أن OIDC يعرف مطالبات قياسية إضافية لمعلومات المستخدم. انظر المطالبات (Claims) في مواصفات OIDC لمزيد من التفاصيل.
المطالبات المخصصة
بالإضافة إلى المطالبات القياسية، يمكن تعريف المطالبات المخصصة لتمثيل معلومات خاصة بالتطبيق. على سبيل المثال، يمكن تضمين مطالبة role
لتمثيل دور المستخدم في التطبيق.
يمكن أن تكون المطالبات المخصصة مميزة بـ معرفات الموارد المنتظمة (URIs) لتجنب التعارض مع المطالبات الأخرى. على سبيل المثال:
{
"https://example.com/claims/role": "admin"
}
في هذا المثال، تتميز مطالبة role
بـ https://example.com/claims/
لضمان التفرد. بدلاً من ذلك، يمكنك تحديد
اسم مورد منتظم (URN) خاص بك للمطالبات المخصصة:
{
"urn:example:claims:role": "admin"
}
في هذا المثال، تتميز مطالبة role
بـ urn:example:claims:
.