| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
G_Z 07.12.2017 21:46 / 07.12.2017 22:46
Если есть идеи как это можно масштабировать или сделать универсальный метод проверки и декодированияПро масштабирование не совсем понятно.
@main[]
$secret[secret]
$payload[
$.a[1]
$.b[2]
]
$token[^jwt:encode[$payload;$secret]]
encoded:
<pre>$token</pre>
decoded:
<pre>^json:string[^jwt:decode[$token;$secret];$.indent(true)]</pre>
# ---------
$payload[
$.c[3]
$.d[4]
]
$jwt[^jwt::create[$secret]]
$token[^jwt.encode[$payload]]
encoded:
<pre>$token</pre>
decoded:
<pre>^json:string[^jwt.decode[$token];$.indent(true)]</pre>
@CLASS
jwt
@OPTIONS
locals
@create[secret]
$self.secret[$secret]
@encode[payload;secret]
$header[^json:string[
$.alg[HS256]
$.typ[JWT]
]]
$header[^self.to_url_safe[^header.base64[]]]
$payload[^json:string[$payload]]
$payload[^self.to_url_safe[^payload.base64[]]]
$signature[^self.sign[$header;$payload;$secret]]
$result[${header}.${payload}.$signature]
@sign[header;payload;secret]
^if(!def $secret){
$secret[$self.secret]
}
$result[^self.to_url_safe[^math:digest[sha256;${header}.$payload][
$.format[base64]
$.hmac[$secret]
]]]
@decode[token;secret]
$result[]
$token[^token.split[.;h]]
$header[$token.0]
$payload[$token.1]
$signature[$token.2]
^if(^self.sign[$header;$payload;$secret] eq $signature){
$result[^json:parse[^taint[as-is;^string:base64[^self.from_url_safe[$payload]]]]]
}
@to_url_safe[result]
$replace[^table::create[nameless]{
^#0A
+ -
/ _}]
$result[^result.replace[$replace]]
@from_url_safe[result]
$replace[^table::create[nameless]{
- +
_ /}]
$result[^result.replace[$replace]]