changeset 2640:885bcb41fbcf

Added an example to njs examples.
author Yaroslav Zhuravlev <yar@nginx.com>
date Tue, 19 Jan 2021 12:40:34 +0000
parents 7ad967af16b8
children ea9f4dc0c801
files xml/en/docs/njs/examples.xml xml/ru/docs/njs/examples.xml
diffstat 2 files changed, 84 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/xml/en/docs/njs/examples.xml
+++ b/xml/en/docs/njs/examples.xml
@@ -9,7 +9,7 @@
 <article name="Examples"
         link="/en/docs/njs/examples.html"
         lang="en"
-        rev="16">
+        rev="17">
 
 <section id="summary">
 
@@ -232,6 +232,47 @@ export default {jwt};
 </section>
 
 
+<section id="jwt_field" name="Getting Arbitrary Field from JWT
+                              as nginx Variable">
+
+<para>
+<path>nginx.conf</path>:
+<example>
+js_import http.js;
+
+js_set $jwt_payload_sub main.jwt_payload_sub;
+
+server {
+    ...
+
+    location /jwt {
+        return 200 $jwt_payload_sub;
+    }
+}
+</example>
+</para>
+
+<para>
+<path>http.js</path>:
+<example>
+function jwt(data) {
+    var parts = data.split('.').slice(0,2)
+        .map(v=>Buffer.from(v, 'base64url').toString())
+        .map(JSON.parse);
+    return { headers:parts[0], payload: parts[1] };
+}
+
+function jwt_payload_sub(r) {
+    return jwt(r.headersIn.Authorization.slice(7)).payload.sub;
+}
+
+export default {jwt_payload_sub}
+</example>
+</para>
+
+</section>
+
+
 <section id="subrequest" name="Accessing API from a Subrequest">
 
 <para>
--- a/xml/ru/docs/njs/examples.xml
+++ b/xml/ru/docs/njs/examples.xml
@@ -9,7 +9,7 @@
 <article name="Примеры использования"
         link="/ru/docs/njs/examples.html"
         lang="ru"
-        rev="16">
+        rev="17">
 
 <section id="summary">
 
@@ -231,6 +231,47 @@ export default {jwt};
 </section>
 
 
+<section id="jwt_field" name="Получение произвольного поля JWT
+                              как значение переменной nginx">
+
+<para>
+<path>nginx.conf</path>:
+<example>
+js_import http.js;
+
+js_set $jwt_payload_sub main.jwt_payload_sub;
+
+server {
+    ...
+
+    location /jwt {
+        return 200 $jwt_payload_sub;
+    }
+}
+</example>
+</para>
+
+<para>
+<path>http.js</path>:
+<example>
+function jwt(data) {
+    var parts = data.split('.').slice(0,2)
+        .map(v=>Buffer.from(v, 'base64url').toString())
+        .map(JSON.parse);
+    return { headers:parts[0], payload: parts[1] };
+}
+
+function jwt_payload_sub(r) {
+    return jwt(r.headersIn.Authorization.slice(7)).payload.sub;
+}
+
+export default {jwt_payload_sub}
+</example>
+</para>
+
+</section>
+
+
 <section id="subrequest" name="Доступ к API из подзапроса">
 
 <para>