Новости | 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]]