کتابخانه‌ی استاندارد · امنیت و رمزنگاری

جی دبلیو تی jwt

ساختن و بررسی توکن JWT و محافظت از مسیرهای API.

واردسازی جی دبلیو تی

JWT توکنی است که سرور پس از ورود کاربر امضا می‌کند و کارخواه با هر درخواست می‌فرستد؛ سرور با بررسی امضا بی‌نیاز از پایگاه داده می‌داند کاربر کیست. این بسته الگوریتم‌های HMAC، یعنی HS256، HS384 و HS512، را پشتیبانی می‌کند و توکن با الگوریتم none را هرگز نمی‌پذیرد.

برای یک API، یک نگهبان بسازید و در هر گرداننده نیاز یا روال‌های مشابهش را صدا بزنید؛ اگر توکن نادرست باشد، پاسخ خطا خودکار فرستاده می‌شود. کلید باید بلند و تصادفی باشد، مثلاً از توکن تصادفی ایمن در رمزنگاری.

گونه‌ها

توکن Token

ساختار توکن
توکن کدگشایی‌شده.
نامانگلیسیگونهتوضیح
algalgرشته = ""الگوریتم امضا، مثل HS256.
typtypرشته = ""نوع، معمولاً JWT.
kidkidرشته = ""شناسه‌ی کلید، اگر در سرآیند باشد.
claimsclaimsادعاهاادعاهای استاندارد.
header_jsonheader_jsonرشته = ""متن جیسون سرآیند.
payload_jsonpayload_jsonرشته = ""متن جیسون بدنه.
signing_inputsigning_inputرشته = ""بخشی که امضا شده: سرآیند و بدنه با نقطه.
signaturesignatureرشته = ""امضا به شکل بیس۶۴ نشانی‌امن.
validvalidمنطقی = نادرستامضا و زمان‌ها بررسی شده و درست بوده‌اند.
jwt-Sign.salam
واردسازی جی دبلیو تی

روال ریشه:
    ناپایا ا := جی دبلیو تی.ادعاهای جدید()
    ا.iss = "salamlang.ir"
    ا.sub = "42"
    ا.aud = "api"
    ا.iat = ۱۷۰۰۰۰۰۰۰۰
    ا.exp = ۱۷۰۰۰۰۳۶۰۰
    جی دبلیو تی.تنظیم رشته(ا، "name"، "مریم")
    جی دبلیو تی.تنظیم عدد(ا، "level"، ۳)
    جی دبلیو تی.تنظیم منطقی(ا، "admin"، نادرست)
    جی دبلیو تی.تنظیم خام(ا، "scope"، `"read write"`)
    جی دبلیو تی.تنظیم خام(ا، "roles"، `["editor","viewer"]`)
    سرچاپ جی دبلیو تی.جیسون ادعاها(ا)

    ناپایا خطا := ۰
    توکن := جی دبلیو تی.امضای اچ اس۲۵۶(ا، "راز-بلند-و-تصادفی"، خطا)
    سرچاپ خطا == جی دبلیو تی.بدون خطا
    سرچاپ توکن

    ناپایا گ := جی دبلیو تی.گزینه های پیش فرض()
    گ.now = ۱۷۰۰۰۰۱۰۰۰
    گ.issuer = "salamlang.ir"
    گ.audience = "api"
    ت := جی دبلیو تی.تایید(توکن، "راز-بلند-و-تصادفی"، گ، خطا)
    سرچاپ ت.valid، ت.alg، ت.typ، ت.claims.sub
    سرچاپ جی دبلیو تی.رشته(ت، "name")، جی دبلیو تی.عدد(ت، "level")، جی دبلیو تی.منطقی(ت، "admin")، جی دبلیو تی.دارد(ت، "email")
    سرچاپ جی دبلیو تی.خام(ت، "level")، جی دبلیو تی.دامنه دارد(ت، "write")، جی دبلیو تی.مخاطب دارد(ت، "api")، جی دبلیو تی.فهرست دارد(ت، "roles"، "editor")

    _ := جی دبلیو تی.تایید(توکن، "راز-دیگر"، گ، خطا)
    سرچاپ خطا == جی دبلیو تی.خطای امضا، جی دبلیو تی.متن خطا(خطا)
    گ.now = ۱۸۰۰۰۰۰۰۰۰
    _ := جی دبلیو تی.تایید(توکن، "راز-بلند-و-تصادفی"، گ، خطا)
    سرچاپ خطا == جی دبلیو تی.خطای انقضا، جی دبلیو تی.متن خطا(خطا)
    گ.now = ۱۷۰۰۰۰۱۰۰۰
    گ.issuer = "example.com"
    سرچاپ جی دبلیو تی.معتبر است(توکن، "راز-بلند-و-تصادفی"، گ)
    _ := جی دبلیو تی.کدگشایی("abc"، خطا)
    سرچاپ خطا == جی دبلیو تی.خطای قالب توکن
پایان
خروجی{"iss":"salamlang.ir","sub":"42","aud":"api","exp":1700003600,"iat":1700000000,"name":"مریم","level":3,"admin":false,"scope":"read write","roles":["editor","viewer"]} true eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzYWxhbWxhbmcuaXIiLCJzdWIiOiI0MiIsImF1ZCI6ImFwaSIsImV4cCI6MTcwMDAwMzYwMCwiaWF0IjoxNzAwMDAwMDAwLCJuYW1lIjoi2YXYsduM2YUiLCJsZXZlbCI6MywiYWRtaW4iOmZhbHNlLCJzY29wZSI6InJlYWQgd3JpdGUiLCJyb2xlcyI6WyJlZGl0b3IiLCJ2aWV3ZXIiXX0.DUKhTpjA2zLl36cgfbSy8WB_He7u9xvLRJ1TsG7RaFg true HS256 JWT 42 مریم 3 false false 3 true true true true signature does not match true token expired false true

ادعاها Claims

ساختار ادعاها
ادعاهای یک توکن.
نامانگلیسیگونهتوضیح
ississرشته = ""صادرکننده.
subsubرشته = ""موضوع، معمولاً شناسه‌ی کاربر.
audaudرشته = ""مخاطب.
aud_rawaud_rawرشته = ""مخاطب به شکل جیسون، اگر آرایه باشد.
expexpصحیح۶۴ = 0زمان انقضا بر حسب ثانیه‌ی یونیکس.
nbfnbfصحیح۶۴ = 0زمانی که پیش از آن معتبر نیست.
iatiatصحیح۶۴ = 0زمان صدور.
jtijtiرشته = ""شناسه‌ی یکتای توکن.
extraextraرشته = ""ادعاهای دیگر به شکل جیسون.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

گزینه ها Options

ساختار گزینه ها
گزینه‌های بررسی.
نامانگلیسیگونهتوضیح
algalgرشته = "HS256"الگوریتمی که انتظار می‌رود؛ توکن با الگوریتم دیگر رد می‌شود.
issuerissuerرشته = ""صادرکننده‌ی لازم؛ خالی یعنی بررسی نشود.
audienceaudienceرشته = ""مخاطب لازم.
subjectsubjectرشته = ""موضوع لازم.
leewayleewayصحیح۶۴ = 0چند ثانیه اختلاف ساعت پذیرفته شود.
nownowصحیح۶۴ = 0زمان بررسی؛ صفر یعنی اکنون. برای آزمایش.
require_exprequire_expمنطقی = نادرستتوکن بدون exp رد شود.
require_nbfrequire_nbfمنطقی = نادرستبدون nbf رد شود.
require_iatrequire_iatمنطقی = نادرستبدون iat رد شود.
require_subrequire_subمنطقی = نادرستبدون sub رد شود.
require_jtirequire_jtiمنطقی = نادرستبدون jti رد شود.
check_typcheck_typمنطقی = درستنوع JWT بررسی شود.
jwt-Algorithms.salam
واردسازی جی دبلیو تی

روال ریشه:
    سرچاپ جی دبلیو تی.الگوریتم اچ اس۲۵۶، جی دبلیو تی.الگوریتم اچ اس۳۸۴، جی دبلیو تی.الگوریتم اچ اس۵۱۲
    سرچاپ جی دبلیو تی.الگوریتم پشتیبانی می شود("HS512")، جی دبلیو تی.الگوریتم پشتیبانی می شود("none")، جی دبلیو تی.اندازه چکیده("HS384")

    ناپایا ا := جی دبلیو تی.ادعاهای جدید()
    ا.sub = "7"
    ا.jti = "t-1"
    جی دبلیو تی.انقضا در(ا، ۳۶۰۰)
    جی دبلیو تی.معتبر نه پیش از(ا، ۰)
    ناپایا خطا := ۰
    یک := جی دبلیو تی.امضای اچ اس۳۸۴(ا، "k"، خطا)
    دو := جی دبلیو تی.امضای اچ اس۵۱۲(ا، "k"، خطا)
    سه := جی دبلیو تی.امضا(ا، جی دبلیو تی.الگوریتم اچ اس۲۵۶، "k"، خطا)
    چهار := جی دبلیو تی.امضا با شناسه کلید(ا، "HS256"، "key-2026"، "k"، خطا)
    سرچاپ جی دبلیو تی.کدگشایی(یک، خطا).alg، جی دبلیو تی.کدگشایی(دو، خطا).alg، جی دبلیو تی.کدگشایی(چهار، خطا).kid

    ت := جی دبلیو تی.تایید اچ اس۲۵۶(سه، "k"، خطا)
    سرچاپ ت.valid، جی دبلیو تی.ثانیه های باقی مانده(ت) > ۳۵۰۰
    ب := جی دبلیو تی.تایید(یک، "k"، جی دبلیو تی.گزینه ها برای("HS384")، خطا)
    سرچاپ ب.valid
    _ := جی دبلیو تی.تایید(یک، "k"، جی دبلیو تی.گزینه های پیش فرض()، خطا)
    سرچاپ جی دبلیو تی.متن خطا(خطا)

    خام := جی دبلیو تی.امضای جیسون(`{"sub":"1"}`، "HS256"، ""، "k"، خطا)
    سرچاپ خام
    د := جی دبلیو تی.کدگشایی(خام، خطا)
    سرچاپ د.header_json، د.payload_json
    سرچاپ جی دبلیو تی.امضای ورودی(د.signing_input، "HS256"، "k") == د.signature

    کد := جی دبلیو تی.کدگذاری پایه۶۴ نشانی("سلام؟")
    سرچاپ کد.طول()
    ناپایا سالم := نادرست
    سرچاپ جی دبلیو تی.کدگشایی پایه۶۴ نشانی(کد، سالم)، سالم
    سرچاپ جی دبلیو تی.کدگذاری پایه۶۴ نشانی بایت("hi?" برگردان تهی*، ۳)
    _ := جی دبلیو تی.امضای اچ اس۲۵۶(ا، ""، خطا)
    سرچاپ خطا == جی دبلیو تی.خطای کلید خالی، جی دبلیو تی.متن خطا(خطا)
    سرچاپ جی دبلیو تی.خطای پایه۶۴ معیوب، جی دبلیو تی.خطای جیسون معیوب، جی دبلیو تی.خطای الگوریتم پشتیبانی نشده، جی دبلیو تی.خطای ناهمخوانی الگوریتم
    سرچاپ جی دبلیو تی.خطای هنوز معتبر نیست، جی دبلیو تی.خطای صدور در آینده، جی دبلیو تی.خطای صادرکننده، جی دبلیو تی.خطای مخاطب
    سرچاپ جی دبلیو تی.متن خطا(جی دبلیو تی.خطای موضوع)، "/"، جی دبلیو تی.متن خطا(جی دبلیو تی.خطای ادعای ناموجود)، "/"، جی دبلیو تی.متن خطا(جی دبلیو تی.خطای نوع)
پایان
خروجیHS256 HS384 HS512 true false 48 HS384 HS512 key-2026 true true true algorithm mismatch eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxIn0.q9rSPf4ratZ1Xkhd3M-FudlLIKYdlSzrHeXV7AICSuw {"alg":"HS256","typ":"JWT"} {"sub":"1"} true 14 سلام؟ true aGk_ true empty secret 2 3 4 5 8 9 10 11 subject mismatch / required claim missing / unexpected typ header

نگهبان Guard

ساختار نگهبان
نگهبان مسیرهای HTTP: کلید، گزینه‌های بررسی و نام کوکی.
نامانگلیسیگونهتوضیح
secretsecretرشته = ""کلید امضا.
optsoptsگزینه هاگزینه‌های بررسی.
cookiecookieرشته = ""نام کوکی‌ای که توکن از آن هم خوانده شود؛ خالی یعنی فقط سرآیند Authorization.
realmrealmرشته = "api"نامی که در سرآیند WWW-Authenticate می‌آید.
jwt-Guard.salam
واردسازی جی دبلیو تی
واردسازی شبکه.اچ تی تی پی شبکه
واردسازی شبکه.مسیریاب شبکه

ناپایا نگه := جی دبلیو تی.نگهبان جدید("راز-سرور-که-فقط-سرور-می-داند")

روال ورود(ز: صحیح۶۴):
    ناپایا خطا := ۰
    ناپایا ا := جی دبلیو تی.ادعاهای جدید()
    ا.sub = "42"
    جی دبلیو تی.تنظیم رشته(ا، "scope"، "read")
    جی دبلیو تی.تنظیم خام(ا، "roles"، `["editor"]`)
    توکن := جی دبلیو تی.صدور(نگه، ا، ۳۶۰۰، خطا)
    جی دبلیو تی.تنظیم کوکی نشست ناامن(ز، نگه، توکن، ۳۶۰۰)
    اچ تی تی پی شبکه.متن زمینه(ز، توکن)
پایان

روال من(ز: صحیح۶۴):
    ناپایا ت := جی دبلیو تی.توکن {}
    اگر جی دبلیو تی.نیاز(ز، نگه، ت):
        اچ تی تی پی شبکه.متن زمینه(ز، "سلام کاربر " + ت.claims.sub)
    پایان
پایان

روال مدیر(ز: صحیح۶۴):
    ناپایا ت := جی دبلیو تی.توکن {}
    اگر جی دبلیو تی.نیاز به دامنه(ز، نگه، "admin"، ت):
        اچ تی تی پی شبکه.متن زمینه(ز، "پنل مدیر")
    پایان
پایان

روال ویرایش(ز: صحیح۶۴):
    ناپایا ت := جی دبلیو تی.توکن {}
    اگر جی دبلیو تی.نیاز به ادعا(ز، نگه، "roles"، "editor"، ت):
        اچ تی تی پی شبکه.متن زمینه(ز، "ویرایشگر")
    پایان
پایان

روال پرونده(ز: صحیح۶۴):
    ناپایا ت := جی دبلیو تی.توکن {}
    اگر جی دبلیو تی.نیاز به موضوع(ز، نگه، اچ تی تی پی شبکه.پارامتر زمینه(ز، "id")، ت):
        اچ تی تی پی شبکه.متن زمینه(ز، "پرونده‌ی خودت")
    پایان
پایان

روال بررسی دستی(ز: صحیح۶۴):
    ناپایا خطا := ۰
    ت := جی دبلیو تی.بررسی(ز، نگه، خطا)
    اگر جی دبلیو تی.توکن حامل(ز).طول() == ۰ و جی دبلیو تی.توکن از(ز، نگه).طول() == ۰:
        جی دبلیو تی.بدون گواهی(ز، نگه)
    وگرنه خطا != جی دبلیو تی.بدون خطا:
        جی دبلیو تی.غیرمجاز(ز، نگه، جی دبلیو تی.متن خطا(خطا))
    وگرنه ت.claims.sub == "0":
        جی دبلیو تی.ممنوع(ز، "کاربر مسدود است")
    وگرنه:
        اچ تی تی پی شبکه.متن زمینه(ز، "معتبر")
    پایان
پایان

روال خروج(ز: صحیح۶۴):
    جی دبلیو تی.پاک کردن کوکی نشست(ز، نگه)
    اچ تی تی پی شبکه.متن زمینه(ز، "خارج شدید")
پایان

روال ریشه:
    نگه.cookie = "session"
    ناپایا م := مسیریاب شبکه.مسیریاب جدید()
    مسیریاب شبکه.ارسال(م، "/login"، ورود)
    مسیریاب شبکه.دریافت(م، "/me"، من)
    مسیریاب شبکه.دریافت(م، "/admin"، مدیر)
    مسیریاب شبکه.دریافت(م، "/edit"، ویرایش)
    مسیریاب شبکه.دریافت(م، "/users/:id"، پرونده)
    مسیریاب شبکه.دریافت(م، "/check"، بررسی دستی)
    مسیریاب شبکه.ارسال(م، "/logout"، خروج)
    ناپایا س := اچ تی تی پی شبکه.سرور جدید(۱۹۶۱۰)
    اچ تی تی پی شبکه.استفاده(س، م)
    _ := اچ تی تی پی شبکه.اجرا در پس زمینه(س)
    پایه := "http://127.0.0.1:19610"

    ورود پاسخ := اچ تی تی پی شبکه.ارسال(پایه + "/login"، "")
    توکن := اچ تی تی پی شبکه.بدنه(ورود پاسخ)
    سرچاپ اچ تی تی پی شبکه.نگاشت کوکی(ورود پاسخ).دریافت("session") == توکن
    ناپایا سر := اچ تی تی پی شبکه.سرصفحه جدید()
    سر.درج("Authorization"، "Bearer " + توکن)
    سرچاپ جی دبلیو تی.تجزیه حامل("Bearer " + توکن) == توکن
    بپرس(پایه، "/me"، سر)
    بپرس(پایه، "/admin"، سر)
    بپرس(پایه، "/edit"، سر)
    بپرس(پایه، "/users/42"، سر)
    بپرس(پایه، "/users/7"، سر)
    بپرس(پایه، "/check"، سر)
    بپرس(پایه، "/me"، اچ تی تی پی شبکه.سرصفحه جدید())
    ناپایا بد := اچ تی تی پی شبکه.سرصفحه جدید()
    بد.درج("Authorization"، "Bearer x.y.z")
    بپرس(پایه، "/check"، بد)
    ناپایا کوکی := اچ تی تی پی شبکه.سرصفحه جدید()
    کوکی.درج("Cookie"، "session=" + توکن)
    بپرس(پایه، "/me"، کوکی)

    ناپایا دسترسی := ""
    ناپایا تازه‌سازی := ""
    ناپایا خطا := ۰
    سرچاپ جی دبلیو تی.صدور جفت(نگه، "42"، ۹۰۰، ۸۶۴۰۰، دسترسی، تازه‌سازی، خطا)، دسترسی != تازه‌سازی
    یک := جی دبلیو تی.صدور برای(نگه، "42"، ۶۰، خطا)
    سرچاپ جی دبلیو تی.تایید(یک، نگه.secret، نگه.opts، خطا).claims.sub، نگه.realm
پایان

روال بپرس(پایه: رشته، مسیر: رشته، سر: نگاشت<رشته، رشته>):
    پ := اچ تی تی پی شبکه.دریافت با(پایه + مسیر، سر)
    سرچاپ مسیر، اچ تی تی پی شبکه.وضعیت(پ)، اچ تی تی پی شبکه.بدنه(پ)
پایان
خروجیtrue true /me 200 سلام کاربر 42 /admin 403 {"error":"forbidden","reason":"missing scope: admin"} /edit 200 ویرایشگر /users/42 200 پرونده‌ی خودت /users/7 403 {"error":"forbidden","reason":"not your resource"} /check 200 معتبر /me 401 {"error":"unauthorized","reason":"missing bearer token"} /check 401 {"error":"unauthorized","reason":"invalid base64url segment"} /me 200 سلام کاربر 42 true true 42 api

پایاها و متغیرها

الگوریتم اچ اس۲۵۶ JWT_HS256

پایا الگوریتم اچ اس۲۵۶: رشته = "HS256"
الگوریتم HS256.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

الگوریتم اچ اس۳۸۴ JWT_HS384

پایا الگوریتم اچ اس۳۸۴: رشته = "HS384"
الگوریتم HS384.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

الگوریتم اچ اس۵۱۲ JWT_HS512

پایا الگوریتم اچ اس۵۱۲: رشته = "HS512"
الگوریتم HS512.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

بدون خطا JWT_OK

پایا بدون خطا: صحیح۳۲ = 0
کد خطا: بدون خطا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

خطای قالب توکن JWT_ERR_MALFORMED

پایا خطای قالب توکن: صحیح۳۲ = 1
کد خطا: توکن سه بخش جداشده با نقطه ندارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

خطای پایه۶۴ معیوب JWT_ERR_BAD_BASE64

پایا خطای پایه۶۴ معیوب: صحیح۳۲ = 2
کد خطا: بخشی بیس۶۴ درست نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

خطای جیسون معیوب JWT_ERR_BAD_JSON

پایا خطای جیسون معیوب: صحیح۳۲ = 3
کد خطا: سرآیند یا بدنه جیسون درست نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

خطای الگوریتم پشتیبانی نشده JWT_ERR_ALG_UNSUPPORTED

پایا خطای الگوریتم پشتیبانی نشده: صحیح۳۲ = 4
کد خطا: الگوریتم پشتیبانی نمی‌شود، مثلاً none.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

خطای ناهمخوانی الگوریتم JWT_ERR_ALG_MISMATCH

پایا خطای ناهمخوانی الگوریتم: صحیح۳۲ = 5
کد خطا: الگوریتم توکن با الگوریتم مورد انتظار یکی نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

خطای امضا JWT_ERR_SIGNATURE

پایا خطای امضا: صحیح۳۲ = 6
کد خطا: امضا نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

خطای انقضا JWT_ERR_EXPIRED

پایا خطای انقضا: صحیح۳۲ = 7
کد خطا: توکن منقضی شده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

خطای هنوز معتبر نیست JWT_ERR_NOT_YET_VALID

پایا خطای هنوز معتبر نیست: صحیح۳۲ = 8
کد خطا: زمان nbf هنوز نرسیده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

خطای صدور در آینده JWT_ERR_ISSUED_IN_FUTURE

پایا خطای صدور در آینده: صحیح۳۲ = 9
کد خطا: زمان صدور در آینده است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

خطای صادرکننده JWT_ERR_ISSUER

پایا خطای صادرکننده: صحیح۳۲ = 10
کد خطا: صادرکننده درست نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

خطای مخاطب JWT_ERR_AUDIENCE

پایا خطای مخاطب: صحیح۳۲ = 11
کد خطا: مخاطب درست نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

خطای موضوع JWT_ERR_SUBJECT

پایا خطای موضوع: صحیح۳۲ = 12
کد خطا: موضوع درست نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

خطای ادعای ناموجود JWT_ERR_MISSING_CLAIM

پایا خطای ادعای ناموجود: صحیح۳۲ = 13
کد خطا: ادعایی که لازم است نیامده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

خطای کلید خالی JWT_ERR_EMPTY_SECRET

پایا خطای کلید خالی: صحیح۳۲ = 14
کد خطا: کلید خالی است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

خطای نوع JWT_ERR_TYPE

پایا خطای نوع: صحیح۳۲ = 15
کد خطا: نوع توکن JWT نیست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

روال‌ها

دارد Has

روال دارد(t: توکن، key: رشته): منطقی
توکن این ادعا را دارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

خام Raw

روال خام(t: توکن، key: رشته): رشته
متن جیسون یک ادعا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

رشته Str

روال رشته(t: توکن، key: رشته): رشته
ادعای رشته‌ای.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

عدد Int

روال عدد(t: توکن، key: رشته): صحیح۶۴
ادعای عددی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

منطقی Bool

روال منطقی(t: توکن، key: رشته): منطقی
ادعای بولی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

مخاطب دارد HasAudience

روال مخاطب دارد(t: توکن، want: رشته): منطقی
مخاطب توکن، چه رشته و چه آرایه، این مقدار را دارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

فهرست دارد ListHas

روال فهرست دارد(t: توکن، key: رشته، want: رشته): منطقی
ادعای آرایه‌ای این مقدار را دارد؛ مثل نقش‌ها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

دامنه دارد HasScope

روال دامنه دارد(t: توکن، want: رشته): منطقی
ادعای scope، که دامنه‌ها را با فاصله جدا می‌کند، این دامنه را دارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

ثانیه های باقی مانده SecondsRemaining

روال ثانیه های باقی مانده(t: توکن): صحیح۶۴
چند ثانیه تا انقضا مانده؛ اگر منقضی شده، صفر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

الگوریتم پشتیبانی می شود IsSupportedAlg

روال الگوریتم پشتیبانی می شود(alg: رشته): منطقی
این الگوریتم پشتیبانی می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

اندازه چکیده DigestSize

روال اندازه چکیده(alg: رشته): صحیح
طول امضای الگوریتم بر حسب بایت.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

متن خطا ErrorText

روال متن خطا(code: صحیح): رشته
توضیح انگلیسی یک کد خطا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

ادعاهای جدید NewClaims

روال ادعاهای جدید(): ادعاها
ادعاهای خالی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

تنظیم رشته SetStr

روال تنظیم رشته(c &: ادعاها، key: رشته، value: رشته)
ادعای رشته‌ای می‌افزاید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

تنظیم عدد SetInt

روال تنظیم عدد(c &: ادعاها، key: رشته، value: صحیح۶۴)
ادعای عددی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

تنظیم منطقی SetBool

روال تنظیم منطقی(c &: ادعاها، key: رشته، value: منطقی)
ادعای بولی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

تنظیم خام SetRaw

روال تنظیم خام(c &: ادعاها، key: رشته، raw: رشته)
ادعا با متن جیسون آماده، مثل آرایه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

انقضا در ExpiresIn

روال انقضا در(c &: ادعاها، seconds: صحیح۶۴)
انقضا را این قدر ثانیه پس از اکنون می‌گذارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

معتبر نه پیش از NotBeforeIn

روال معتبر نه پیش از(c &: ادعاها، seconds: صحیح۶۴)
زمان آغاز اعتبار را این قدر ثانیه پس از اکنون می‌گذارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

جیسون ادعاها ClaimsJSON

روال جیسون ادعاها(c: ادعاها): رشته
ادعاها به شکل متن جیسون.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

گزینه های پیش فرض DefaultOptions

روال گزینه های پیش فرض(): گزینه ها
گزینه‌های پیش‌فرض با HS256.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

گزینه ها برای OptionsFor

روال گزینه ها برای(alg: رشته): گزینه ها
گزینه‌های پیش‌فرض با الگوریتم دیگر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

کدگشایی Decode

روال کدگشایی(token: رشته، err &: صحیح): توکن
توکن را بدون بررسی امضا کدگشایی می‌کند؛ فقط برای دیدن محتوا، نه برای اعتماد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

تایید Verify

روال تایید(token: رشته، secret: رشته، opts: گزینه ها، err &: صحیح): توکن
امضا، الگوریتم و زمان‌ها را بررسی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

تایید اچ اس۲۵۶ VerifyHS256

روال تایید اچ اس۲۵۶(token: رشته، secret: رشته، err &: صحیح): توکن
بررسی با HS256 و گزینه‌های پیش‌فرض.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

معتبر است IsValid

روال معتبر است(token: رشته، secret: رشته، opts: گزینه ها): منطقی
توکن معتبر است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

کدگذاری پایه۶۴ نشانی بایت B64UrlEncodeBytes

روال کدگذاری پایه۶۴ نشانی بایت(p: تهی*، n: صحیح): رشته
بایت‌ها را به بیس۶۴ نشانی‌امن بدون = تبدیل می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

کدگذاری پایه۶۴ نشانی B64UrlEncode

روال کدگذاری پایه۶۴ نشانی(s: رشته): رشته
رشته را به بیس۶۴ نشانی‌امن تبدیل می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

کدگشایی پایه۶۴ نشانی B64UrlDecode

روال کدگشایی پایه۶۴ نشانی(s: رشته، ok &: منطقی): رشته
بیس۶۴ نشانی‌امن را کدگشایی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

امضای جیسون SignJSON

روال امضای جیسون(payload_json: رشته، alg: رشته، kid: رشته، secret: رشته، err &: صحیح): رشته
بدنه‌ی جیسون آماده را امضا می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

امضای ورودی SignatureOf

روال امضای ورودی(signing_input: رشته، alg: رشته، secret: رشته): رشته
امضای یک ورودی را حساب می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

امضا با شناسه کلید SignWithKid

روال امضا با شناسه کلید(c: ادعاها، alg: رشته، kid: رشته، secret: رشته، err &: صحیح): رشته
مثل امضا، با شناسه‌ی کلید در سرآیند؛ برای چرخاندن کلیدها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

امضا Sign

روال امضا(c: ادعاها، alg: رشته، secret: رشته، err &: صحیح): رشته
ادعاها را با الگوریتم داده‌شده امضا می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

امضای اچ اس۲۵۶ SignHS256

روال امضای اچ اس۲۵۶(c: ادعاها، secret: رشته، err &: صحیح): رشته
امضا با HS256.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Sign.salam

امضای اچ اس۳۸۴ SignHS384

روال امضای اچ اس۳۸۴(c: ادعاها، secret: رشته، err &: صحیح): رشته
امضا با HS384.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

امضای اچ اس۵۱۲ SignHS512

روال امضای اچ اس۵۱۲(c: ادعاها، secret: رشته، err &: صحیح): رشته
امضا با HS512.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

صدور Issue

روال صدور(g: نگهبان، c: ادعاها، ttl: صحیح۶۴، err &: صحیح): رشته
ادعاها را با زمان صدور و انقضای داده‌شده و الگوریتم نگهبان امضا می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Algorithms.salam

صدور برای IssueFor

روال صدور برای(g: نگهبان، subject: رشته، ttl: صحیح۶۴، err &: صحیح): رشته
توکنی فقط با موضوع و انقضا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

صدور جفت IssuePair

روال صدور جفت(g: نگهبان، subject: رشته، access_ttl: صحیح۶۴، refresh_ttl: صحیح۶۴، access &: رشته، refresh &: رشته، err &: صحیح): منطقی
یک توکن دسترسی کوتاه‌عمر و یک توکن تازه‌سازی بلندعمر می‌سازد؛ ادعای kind آن‌ها را از هم جدا می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

تنظیم کوکی نشست SetSessionCookie

روال تنظیم کوکی نشست(ctx: صحیح۶۴، g: نگهبان، token: رشته، max_age: صحیح)
توکن را در کوکی امن و HttpOnly نگهبان می‌گذارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

تنظیم کوکی نشست ناامن SetSessionCookieInsecure

روال تنظیم کوکی نشست ناامن(ctx: صحیح۶۴، g: نگهبان، token: رشته، max_age: صحیح)
مثل روال بالا، بدون پرچم Secure؛ فقط برای آزمایش روی HTTP.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

پاک کردن کوکی نشست ClearSessionCookie

روال پاک کردن کوکی نشست(ctx: صحیح۶۴، g: نگهبان)
کوکی نشست را پاک می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

نگهبان جدید NewGuard

روال نگهبان جدید(secret: رشته): نگهبان
نگهبان تازه با کلید و گزینه‌های پیش‌فرض.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

تجزیه حامل ParseBearer

روال تجزیه حامل(header_value: رشته): رشته
توکن را از مقدار سرآیند Bearer ... جدا می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

توکن حامل BearerToken

روال توکن حامل(ctx: صحیح۶۴): رشته
توکن سرآیند Authorization درخواست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

توکن از TokenFrom

روال توکن از(ctx: صحیح۶۴، g: نگهبان): رشته
توکن درخواست، از سرآیند یا کوکی نگهبان.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

بررسی Check

روال بررسی(ctx: صحیح۶۴، g: نگهبان، err &: صحیح): توکن
توکن درخواست را بررسی می‌کند و خودش پاسخی نمی‌فرستد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

غیرمجاز Unauthorized

روال غیرمجاز(ctx: صحیح۶۴، g: نگهبان، reason: رشته)
پاسخ ۴۰۱ با دلیل.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

بدون گواهی MissingCredential

روال بدون گواهی(ctx: صحیح۶۴، g: نگهبان)
پاسخ ۴۰۱ برای درخواستی که اصلاً توکن ندارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

ممنوع Forbidden

روال ممنوع(ctx: صحیح۶۴، reason: رشته)
پاسخ ۴۰۳: توکن درست است ولی اجازه ندارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

نیاز Require

روال نیاز(ctx: صحیح۶۴، g: نگهبان، t &: توکن): منطقی
توکن را بررسی می‌کند؛ اگر نبود یا نادرست بود، خودش پاسخ ۴۰۱ می‌فرستد و نادرست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

نیاز به دامنه RequireScope

روال نیاز به دامنه(ctx: صحیح۶۴، g: نگهبان، scope: رشته، t &: توکن): منطقی
مثل روال بالا و توکن باید این دامنه را داشته باشد، وگرنه ۴۰۳.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

نیاز به ادعا RequireClaim

روال نیاز به ادعا(ctx: صحیح۶۴، g: نگهبان، key: رشته، value: رشته، t &: توکن): منطقی
توکن باید در این ادعای آرایه‌ای این مقدار را داشته باشد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam

نیاز به موضوع RequireSubject

روال نیاز به موضوع(ctx: صحیح۶۴، g: نگهبان، subject: رشته، t &: توکن): منطقی
موضوع توکن باید همین باشد؛ برای اینکه کاربر فقط به داده‌ی خودش برسد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: jwt-Guard.salam