{"id":50890,"date":"2024-02-14T00:00:00","date_gmt":"2024-02-14T08:00:00","guid":{"rendered":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/"},"modified":"2025-11-14T07:56:34","modified_gmt":"2025-11-14T15:56:34","slug":"protect-your-griddb-rest-api-with-json-web-tokens-part-ii","status":"publish","type":"post","link":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/","title":{"rendered":"JSON Web\u30c8\u30fc\u30af\u30f3\u3067GridDB REST API\u3092\u4fdd\u8b77\u3059\u308b \u5f8c\u7de8"},"content":{"rendered":"<p>GridDB\u306eJSON Web Token\u30b7\u30ea\u30fc\u30ba\u306e\u30d1\u30fc\u30c82\u3067\u3059\u3002\u524d\u56de\u306e\u8a18\u4e8b\u306f\u3053\u3061\u3089\u304b\u3089\u304a\u8aad\u307f\u3044\u305f\u3060\u3051\u307e\u3059\uff1a <a href=\"https:\/\/griddb.net\/ja\/blog\/json-web-tokens\/\">JSON Web Tokens Part I<\/a>. \u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001JSON Web Token\u3068\u306f\u4f55\u304b\u3001\u305d\u306e\u767a\u884c\u3068\u78ba\u8a8d\u65b9\u6cd5\u3001GridDB\u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u4fdd\u8b77\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3057\u305f\u3002\u305d\u306e\u8a18\u4e8b\u306e Web \u30c8\u30fc\u30af\u30f3\u306f\u975e\u5e38\u306b\u30b7\u30f3\u30d7\u30eb\u3067\u3001\u9069\u5207\u306a\u30e6\u30fc\u30b6\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u30e6\u30fc\u30b6\u306b\u767a\u884c\u3055\u308c\u3001\u30db\u30fc\u30e0\u30da\u30fc\u30b8\u3068 <code>\/data<\/code> \u30da\u30fc\u30b8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u53ef\u3059\u308b\u3082\u306e\u3067\u3057\u305f\u3002<\/p>\n<p>\u5f8c\u7de8\u3067\u306f\u3001GridDB \u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306b\u5bfe\u3057\u3066\u3001\u3088\u308a\u8a73\u7d30\u306a\u8a8d\u8a3c\u30c1\u30a7\u30c3\u30af\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002JSON Web \u30c8\u30fc\u30af\u30f3\u306f\u5358\u7d14\u306b\u30cf\u30c3\u30b7\u30e5\u5316\u3055\u308c\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3067\u3042\u308a\u3001\u8ffd\u52a0\u3057\u305f\u3044\u3042\u3089\u3086\u308b\u7a2e\u985e\u306e\u60c5\u5831\u3092\u542b\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u305f\u3081\u3001\u4efb\u610f\u306e\u7c92\u5ea6\u306e\u8a8d\u8a3c\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4eca\u56de\u306e\u4f8b\u3067\u306f\u30014\u3064\u306e\u7570\u306a\u308bGridDB\u30b3\u30f3\u30c6\u30ca\u3092\u7528\u610f\u3057\u3001JSON Web Token\u306e\u304d\u3081\u7d30\u304b\u306a\u30c8\u30fc\u30af\u30f3\u3067\u4fdd\u8b77\u3057\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u3042\u308bGridDB\u30b3\u30f3\u30c6\u30ca\/\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306b\u306f\u30a2\u30af\u30bb\u30b9\u3067\u304d\u3066\u3082\u3001\u5225\u306eGridDB\u30b3\u30f3\u30c6\u30ca\/\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306b\u306f\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002\u30d1\u30fc\u30c81\u306e\u30c8\u30fc\u30af\u30f3\u3067\u306f\u3001\u30aa\u30fc\u30eb\u30fb\u30aa\u30a2\u30fb\u30ca\u30c3\u30b7\u30f3\u30b0\u3067\u3057\u305f\u3002<\/p>\n<p>GridDB\u306b\u4fdd\u5b58\u3055\u308c\u305f\u30e6\u30fc\u30b6\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u4f7f\u3063\u3066\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u307e\u3059\u3002\u30c8\u30fc\u30af\u30f3\u306e\u6709\u52b9\u671f\u9650\u3001\u30c8\u30fc\u30af\u30f3\u306e\u540d\u524d\u3001\u305d\u3057\u3066\u3053\u306e\u65b0\u3057\u3044\u30c8\u30fc\u30af\u30f3\u304c\u8a31\u53ef\u3059\u308b\u69d8\u3005\u306a\u30b3\u30f3\u30c6\u30ca\uff0f\u30af\u30ea\u30a2\u30e9\u30f3\u30b9\u30fb\u30ec\u30d9\u30eb\u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002\u30c8\u30fc\u30af\u30f3\u3092\u624b\u306b\u3057\u305f\u30e6\u30fc\u30b6\u306f\u3001\u4fdd\u8b77\u3055\u308c\u305f\u30eb\u30fc\u30c8\u3078\u306e\u3059\u3079\u3066\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u3001\u8a8d\u53ef\u30d9\u30a2\u30e9\u30fc\u30c8\u30fc\u30af\u30f3\u3068\u3057\u3066\u30c8\u30fc\u30af\u30f3\u3092\u30a2\u30bf\u30c3\u30c1\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3082\u3057\u30e6\u30fc\u30b6\u304c\u30a2\u30af\u30bb\u30b9\u6a29\u306e\u306a\u3044\u30eb\u30fc\u30c8\u306b\u30d9\u30a2\u30e9\u30fc\u30c8\u30fc\u30af\u30f3\u3092\u30a2\u30bf\u30c3\u30c1\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u3001401\u8a8d\u8a3chttp\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<h2>\u524d\u63d0\u6761\u4ef6<\/h2>\n<p>GridDB\u3068GridDB Go Connector\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001HTML\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u9664\u304d\u3001\u3059\u3079\u3066\u306e\u30b3\u30fc\u30c9\u3092Go\u3067\u8a18\u8ff0\u3057\u307e\u3059\u3002<\/p>\n<p>\u4e0a\u8a18\u3067\u8aac\u660e\u3057\u305f\u3088\u3046\u306b\u3001\u4ee5\u4e0b\u306e\u3082\u306e\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\uff1a<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.griddb.net\/gettingstarted\/using-apt\/\">GridDB Server (v5.3)<\/a><\/li>\n<li><a href=\"https:\/\/go.dev\/doc\/install\">Go v1.21.4<\/a><\/li>\n<\/ul>\n<p>\u73fe\u5728\u306e\u3068\u3053\u308d\u3001GridDB Go Connector\u306e\u52d5\u4f5c\u65b9\u6cd5\u306e\u305f\u3081\u3001\u30d3\u30eb\u30c9\u3068\u4f7f\u7528\u30d7\u30ed\u30bb\u30b9\u306e\u4e00\u90e8\u3068\u3057\u3066\u3001go 1.11\u30e2\u30b8\u30e5\u30fc\u30eb\u6a5f\u80fd\u3092\u30aa\u30d5\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff08<code>go env -w GO111MODULE=off<\/code>\uff09\u3002\u3053\u306e\u6a5f\u80fd\u3092\u30aa\u30d5\u306b\u3059\u308b\u3068\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092 <code>$GOPATH<\/code> \u5185\u306b\u30d3\u30eb\u30c9\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002\u307e\u305f\u3001\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u95a2\u9023\u3059\u308b\u3059\u3079\u3066\u306e Go \u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u624b\u52d5\u3067 <code>go get<\/code> \u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u6307\u793a\u306f\u3059\u3079\u3066\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3 <code>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d3\u30eb\u30c9<\/code> \u306b\u8a18\u8f09\u3057\u307e\u3059\u3002<\/p>\n<h2>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d3\u30eb\u30c9<\/h2>\n<p>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092 $GOPATH \u306e\u4e2d\u306b\u5165\u308c\u3066\u304a\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u304c\u3001go\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u5229\u7528\u3057\u306a\u3044\u901a\u5e38\u306eGo\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u52d5\u4f5c\u65b9\u6cd5\u3067\u3059\u3002\u79c1\u306e\u5834\u5408\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u69cb\u6210\u306f\u3053\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff1a<\/p>\n<pre><code>\/home\/israel\/go\/\n                \u2514\u2500 src\n                    \u2514\u2500 github.com\n                        \u2514\u2500 griddbnet\n                            \u2514\u2500 Blogs\n                                \u2514\u2500 [all source code]\n<\/code><\/pre>\n<p>\u305d\u306e\u524d\u306b\u3001GridDB Go\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f5c\u3063\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p><a href=\"https:\/\/github.com\/griddb\/go_client\">GridDB Go Connector v0.8.4<\/a><\/p>\n<p>\u307e\u305a\u3001Go\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306eREADME\u306e\u6307\u793a\u306b\u5f93\u3063\u3066\u3001SWIG\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n<pre><code>$ wget https:\/\/prdownloads.sourceforge.net\/swig\/swig-4.0.2.tar.gz\n$ tar xvfz swig-4.0.2.tar.gz\n$ cd swig-4.0.2\n$ .\/autogen.sh\n$ .\/configure\n$ make\n$ sudo make install\n<\/code><\/pre>\n<p>\u305d\u3057\u3066\u3001GridDB Go Client \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u958b\u59cb\u3057\u307e\u3059\u3002\u307e\u305a\u3001\u74b0\u5883\u5909\u6570 <code>GOPATH<\/code> \u3092\u8a2d\u5b9a\u3057\u3066\u304a\u304f\u3068\u3088\u3044\u3002\u30bf\u30fc\u30df\u30ca\u30eb\u306b<code>go env<\/code>\u3068\u5165\u529b\u3059\u308b\u3068\u3001Go\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u65e2\u306b\u4f7f\u7528\u3057\u3066\u3044\u308b\u3082\u306e\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u305d\u308c\u3092\u30b3\u30d4\u30fc\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n<pre><code>$ export GOPATH=\/home\/israel\/go\n<\/code><\/pre>\n<p>\u305d\u3057\u3066<\/p>\n<pre><code>1. $ go env -w GO111MODULE=off\n2. $ go get -d github.com\/griddb\/go_client\n3. $ cd $GOPATH\/src\/github.com\/griddb\/go_client\n4. $ .\/run_swig.sh\n5. $ go install\n<\/code><\/pre>\n<p>\u3053\u308c\u3067\u5b8c\u4e86\u3067\u3059\uff01\u3053\u308c\u3067Go\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3067\u306f\u3001\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3068\u6b8b\u308a\u306e\u5fc5\u8981\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u5165\u624b\u3057\u307e\u3057\u3087\u3046\uff1a<\/p>\n<pre><code>$ cd $GOPATH\/src\/github.com\n$ mkdir griddbnet\n$ cd griddbnet\n$ git clone https:\/\/github.com\/griddbnet\/Blogs.git --branch jwtII\n$ cd Blogs\n$ go env -w GO111MODULE=on\n$ go get\n$ go env -w GO111MODULE=off\n<\/code><\/pre>\n<p>\u305d\u308c\u304b\u3089\u8d70\u308b\u306e\u306f\u7c21\u5358\u3067\u3059<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ source key.env\n$ go build\n$ .\/Blogs<\/code><\/pre>\n<\/div>\n<p>\u6ce8\uff1a\u3053\u306e\u30d6\u30ed\u30c3\u30af\u306e\u6700\u521d\u306e\u30b3\u30de\u30f3\u30c9\u306f\u3001\u5358\u306b\u79d8\u5bc6\u9375\u3092\u74b0\u5883\u5909\u6570\u306b\u8ffd\u52a0\u3059\u308b\u3060\u3051\u3067\u3059\u3002\u3053\u308c\u3092\u5165\u308c\u5fd8\u308c\u308b\u3068\u3001\u30b5\u30fc\u30d0\u30fc\u306f\u5b9f\u884c\u3055\u308c\u307e\u3059\u304c\u3001Web \u30c8\u30fc\u30af\u30f3\u3092\u767a\u884c\u3057\u305f\u308a\u30c1\u30a7\u30c3\u30af\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n<h2>JSON \u30a6\u30a7\u30d6\u30c8\u30fc\u30af\u30f3\u3068\u304d\u3081\u7d30\u304b\u306a\u5236\u5fa1<\/h2>\n<p>\u4e0a\u3067\u8aac\u660e\u3057\u305f\u3088\u3046\u306b\u3001\u79c1\u305f\u3061\u304c\u8ffd\u52a0\u3057\u305f\u3044\u4e3b\u306a\u6a5f\u80fd\u306f\u3001\u30a6\u30a7\u30d6\u30c8\u30fc\u30af\u30f3\u3001\u3072\u3044\u3066\u306f\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u3088\u308a\u304d\u3081\u7d30\u304b\u304f\u5236\u5fa1\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u3064\u307e\u308a\u3001Web \u30c8\u30fc\u30af\u30f3\u3092\u767a\u884c\u3059\u308b\u95a2\u6570\u3092\u4fee\u6b63\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u3055\u3089\u306b Web \u30c8\u30fc\u30af\u30f3\u304c\u8a8d\u8a3c\u3055\u308c\u308b\u30d7\u30ed\u30bb\u30b9\u3092\u4fee\u6b63\u3057\u3066\u3001\u30c8\u30fc\u30af\u30f3\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u4ed8\u4e0e\u3055\u308c\u305f\u7279\u5b9a\u306e\u30ed\u30fc\u30eb\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u3057\u3066\u6700\u5f8c\u306b\u3001\u30e6\u30fc\u30b6\u304c\u30d8\u30c3\u30c0\u306b\u30a6\u30a7\u30d6\u30c8\u30fc\u30af\u30f3\u3092\u542b\u3080\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u305f\u3081\u306b\u3001\u8a8d\u53ef\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u4fee\u6b63\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<h3>\u30a6\u30a7\u30d6\u30c8\u30fc\u30af\u30f3\u30af\u30ec\u30fc\u30e0<\/h3>\n<p>\u30c8\u30fc\u30af\u30f3\u3092\u4f5c\u6210\u3059\u308b\u3068\u304d\u3068\u30c8\u30fc\u30af\u30f3\u3092\u8a8d\u8a3c\u3059\u308b\u3068\u304d\u306e\u4e21\u65b9\u3067\u3001\u79c1\u305f\u3061\u306f <code>claims<\/code> \u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u300c\u30af\u30ec\u30fc\u30e0\u300d\u306f\u3001\u30b5\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u3064\u3044\u3066\u4e3b\u5f35\u3055\u308c\u308b\u60c5\u5831\u306e\u65ad\u7247\u3067\u3059\u3002\u305f\u3068\u3048\u3070\u3001ID\u30c8\u30fc\u30af\u30f3\uff08\u3053\u308c\u306f\u5e38\u306bJWT\u3067\u3042\u308b\uff09\u306b\u306f\u3001\u8a8d\u8a3c\u3059\u308b\u30e6\u30fc\u30b6\u306e\u540d\u524d\u304c\u300cJohn Doe\u300d\u3067\u3042\u308b\u3053\u3068\u3092\u4e3b\u5f35\u3059\u308bname\u3068\u3044\u3046\u30af\u30ec\u30fc\u30e0\u3092\u542b\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002JWT\u3067\u306f\u3001\u30af\u30ec\u30fc\u30e0\u306fname\u3068value\u306e\u30da\u30a2\u3068\u3057\u3066\u8868\u793a\u3055\u308c\u3001name\u306f\u5e38\u306b\u6587\u5b57\u5217\u3067\u3001value\u306f\u4efb\u610f\u306eJSON\u5024\u3067\u3059\u3002\u4e00\u822c\u7684\u306b\u3001JWT\u306e\u6587\u8108\u3067\u30af\u30ec\u30fc\u30e0\u306b\u3064\u3044\u3066\u8a71\u3059\u3068\u304d\u306f\u3001\u540d\u524d\uff08\u307e\u305f\u306f\u30ad\u30fc\uff09\u3092\u6307\u3057\u3066\u3044\u307e\u3059\u3002&#8221; (\u30bd\u30fc\u30b9)[https:\/\/auth0.com\/docs\/secure\/tokens\/json-web-tokens\/json-web-token-claims]\u3002<\/p>\n<p>\u79c1\u305f\u3061\u304c\u4f7f\u7528\u3057\u3066\u3044\u308bJWT\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u306f\u3001\u6700\u3082\u4e00\u822c\u7684\u306b\u4f7f\u7528\u3055\u308c\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30af\u30ec\u30fc\u30e0\uff08issued-by\u3001expiry\u306a\u3069\uff09\u304c\u3044\u304f\u3064\u304b\u4ed8\u5c5e\u3057\u3066\u304a\u308a\u3001\u672c\u9023\u8f09\u306e\u7b2c1\u56de\u3067\u306f\u3053\u308c\u3089\u3092\u4f7f\u7528\u3057\u307e\u3057\u305f\u3002\u3053\u306e\u30d1\u30fc\u30c8\u3067\u306f\u3001\u3053\u308c\u306b\u72ec\u81ea\u306e\u30ab\u30b9\u30bf\u30e0\u30af\u30ec\u30fc\u30e0\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u5177\u4f53\u7684\u306b\u306f\u3001<code>roles<\/code>\u69cb\u9020\u4f53\u3092\u8ffd\u52a0\u3057\u3001\u30e6\u30fc\u30b6\u304c\u7279\u5b9a\u306eGridDB\u30b3\u30f3\u30c6\u30ca\uff08\u7279\u5b9a\u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u304b\u3089\u8aad\u307f\u8fbc\u307e\u308c\u308b\uff09\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u304b\u3069\u3046\u304b\u3092\u6307\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u30c8\u30fc\u30af\u30f3\u306e\u6709\u52b9\u671f\u9650\u3084<code>name<\/code>\u3068\u3044\u3046\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u5909\u66f4\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n<h3>\u30ab\u30b9\u30bf\u30e0\u30af\u30ec\u30fc\u30e0\u306e\u8ffd\u52a0<\/h3>\n<p>\u30ab\u30b9\u30bf\u30e0\u30af\u30ec\u30fc\u30e0\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306f\u3001<code>MyClaims<\/code> \u3068\u3044\u3046\u65b0\u3057\u3044\u69cb\u9020\u4f53\u3092\u4f5c\u6210\u3057\u3001\u4ee5\u524d\u306b\u4f7f\u7528\u3057\u305f\u30c7\u30d5\u30a9\u30eb\u30c8\u30af\u30ec\u30fc\u30e0\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-go\">\/\/specialRoleEndpoints.go\ntype Roles struct {\n    Basic   bool   `json:\"basic\"`\n    Advisor bool   `json:\"advisor\"`\n    Admin   bool   `json:\"admin\"`\n    Owner   bool   `json:\"owner\"`\n    Value   string `json:\"value\"`\n    Name    string `json:\"name\"`\n}\n\n\/\/issueTokens.go\ntype MyCustomClaims struct {\n    Role Roles `json:\"roles\"`\n    jwt.RegisteredClaims\n}\n\nvar claims = MyCustomClaims{\n    Roles{},\n    jwt.RegisteredClaims{\n        ExpiresAt: jwt.NewNumericDate(time.Unix(time.Now().Unix()*time.Hour.Milliseconds(), 0)),\n        IssuedAt:  jwt.NewNumericDate(time.Now()),\n        NotBefore: jwt.NewNumericDate(time.Now()),\n        Issuer:    \"griddb-auth-server\",\n    },\n}<\/code><\/pre>\n<\/div>\n<p>\u305d\u3057\u3066\u3001\u5b9f\u969b\u306b\u30c8\u30fc\u30af\u30f3\u3092\u767a\u884c\u3059\u308b\u3068\u304d\u306b\u3001\u30e6\u30fc\u30b6\u304c\u7279\u5b9a\u306e\u30ed\u30fc\u30eb\u3092\u6301\u3063\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\uff08bool\u3067\uff09\u6307\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u307e\u305f\u3001\u30e6\u30fc\u30b6\u304c\u6709\u52b9\u671f\u9650\u3092\u6307\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u305f\u306e\u3067\u3001\u6709\u52b9\u671f\u9650 <code>time.Time<\/code> \u3092\u30d1\u30e9\u30e1\u30fc\u30bf\u306e1\u3064\u3068\u3057\u3066\u53d7\u3051\u53d6\u308b\u3088\u3046\u306b <code>IssueTokens<\/code> \u95a2\u6570\u3092\u5909\u66f4\u3057\u307e\u3057\u305f\uff08Roles \u69cb\u9020\u4f53\u3068\u4e00\u7dd2\u306b\u3057\u307e\u3059\uff09\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-go\">\/\/issueTokens.go\nfunc IssueToken(roles Roles, expiry time.Time) (string, error) {\n\n    claims.Role = roles\n    claims.ExpiresAt = jwt.NewNumericDate(expiry)\n\n    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)\n    key := []byte(os.Getenv(\"SigningKey\"))\n    if string(key) != \"\" {\n        if len(key) &lt;= 0 {\n            return \"\", errors.New(\"Key is less than length 0\")\n        }\n        s, err := token.SignedString(key)\n        if err != nil {\n            fmt.Printf(\"Error, couldn't read os environment: %q\", err)\n            return \"\", errors.New(\"could not read environment var\")\n        }\n        return s, nil\n    }\n\n    return \"\", errors.New(\"No environment variable set\")\n}<\/code><\/pre>\n<\/div>\n<p>\u3064\u307e\u308a\u3001\u4ee5\u524d\u3068\u6bd4\u8f03\u3059\u308b\u3068\u3001\u3053\u306e\u95a2\u6570\u306fRoles\u69cb\u9020\u4f53\u3092\u53d7\u3051\u53d6\u308a\u3001Web\u30c8\u30fc\u30af\u30f3\u81ea\u4f53\u3092\u4f5c\u6210\u3059\u308b\u3068\u304d\u306b\u305d\u306e\u60c5\u5831\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u8a8d\u53ef\u306e\u90e8\u5206\u306b\u5165\u308b\u524d\u306b\u3001\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u3053\u308c\u3089\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u53ce\u96c6\u3059\u308bhtml\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<h3>\u30e6\u30fc\u30b6\u30fc\u6307\u5b9a\u306e\u30af\u30ec\u30fc\u30e0\u306e\u53d7\u3051\u5165\u308c<\/h3>\n<p>\u3053\u308c\u3092\u9054\u6210\u3059\u308b\u305f\u3081\u306b\u3001\u30e6\u30fc\u30b6\u304c\u81ea\u5206\u306e\u597d\u307f\u3092\u9078\u629e\u3067\u304d\u308b\u3088\u3046\u306b\u5165\u529b\u3092\u8ffd\u52a0\u3059\u308b\u3060\u3051\u3067\u3059\u3002\u6b21\u306b\u3001POST\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3053\u306e\u60c5\u5831\u3092\u30b5\u30fc\u30d0\u30fc\u306b\u9001\u308a\u8fd4\u3057\u307e\u3059\u3002\u30b5\u30fc\u30d0\u30fc\u306f\u3053\u306e\u60c5\u5831\u3092\u4f7f\u7528\u3057\u3066Roles\u69cb\u9020\u4f53\u3092\u5f62\u6210\u3057\u3001\u6709\u52b9\u671f\u9650\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-html\">\/\/home.tmpl\n &lt;h3&gt; Select your level of clearance &lt;\/h3&gt;\n &lt;form action=\"\/getToken\" method=\"post\"&gt;\n  &lt;fieldset&gt;\n    &lt;legend&gt;JSON Web Token Choices&lt;\/legend&gt;\n\n    &lt;label for=\"Owner\"&gt;Expiration in Days&lt;\/label&gt; \n    &lt;input type=\"number\" id=\"expiration\" name=\"expiration\" min=\"1\" max=\"365\" \/&gt;\n    &lt;\/br&gt;\n\n    &lt;label for=\"Owner\"&gt;Token Name&lt;\/label&gt; \n    &lt;input type=\"text\" id=\"name\" name=\"name\" required \/&gt;\n    &lt;\/br&gt;\n\n    &lt;input type=\"checkbox\" id=\"role\" name=\"basic\" value=\"true\" \/&gt;\n    &lt;label for=\"basic\"&gt;Basic&lt;\/label&gt;&lt;br \/&gt;\n\n    &lt;input type=\"checkbox\" id=\"advisor\" name=\"advisor\" value=\"true\" \/&gt;\n    &lt;label for=\"advisor\"&gt;Advisor&lt;\/label&gt;&lt;br \/&gt;\n\n    &lt;input type=\"checkbox\" id=\"admin\" name=\"admin\" value=\"true\" \/&gt;\n    &lt;label for=\"admin\"&gt;Admin&lt;\/label&gt;&lt;br \/&gt;\n\n    &lt;input type=\"checkbox\" id=\"owner\" name=\"owner\" value=\"true\" \/&gt;\n    &lt;label for=\"Owner\"&gt;Owner&lt;\/label&gt;\n  &lt;\/fieldset&gt;\n      &lt;div&gt;\n    &lt;button type=\"submit\"&gt;Get Token&lt;\/button&gt;\n    &lt;\/div&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<\/div>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/auth-page.png\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/auth-page.png\" alt=\"\" width=\"884\" height=\"1106\" class=\"aligncenter size-full wp-image-29951\" srcset=\"\/wp-content\/uploads\/2024\/02\/auth-page.png 884w, \/wp-content\/uploads\/2024\/02\/auth-page-240x300.png 240w, \/wp-content\/uploads\/2024\/02\/auth-page-818x1024.png 818w, \/wp-content\/uploads\/2024\/02\/auth-page-768x961.png 768w, \/wp-content\/uploads\/2024\/02\/auth-page-600x751.png 600w\" sizes=\"(max-width: 884px) 100vw, 884px\" \/><\/a><\/p>\n<p>\u305d\u3057\u3066\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u3067\u306f\u3001http\u30cf\u30f3\u30c9\u30e9\u3067\u3053\u308c\u3089\u306e\u5165\u529b\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-go\"> roles := &Roles{}\n    if r.Method == \"POST\" {\n\n        roles.Basic, _ = strconv.ParseBool(r.FormValue(\"basic\"))\n        roles.Advisor, _ = strconv.ParseBool(r.FormValue(\"advisor\"))\n        roles.Admin, _ = strconv.ParseBool(r.FormValue(\"admin\"))\n        roles.Owner, _ = strconv.ParseBool(r.FormValue(\"owner\"))\n        roles.Name = r.FormValue(\"name\")\n        fmt.Println(\"Received form values\", roles)\n\n        expiryTime, _ := strconv.ParseInt(r.FormValue(\"expiration\"), 10, 64)\n        expiryTimeInDays := expiryTime * 24\n        expirationTime := time.Now().Add(time.Duration(expiryTimeInDays) * time.Hour)\n\n        token, err := IssueToken(*roles, expirationTime)\n        if err != nil {\n            fmt.Println(\"issue getting token\", err)\n            fmt.Fprintf(w, \"Issue getting token, possible no environment variable set\")\n            return\n        }\n        \/\/ We send the roles data struct to the template file. \n        \/\/ We need the value to share with the user on the frontend\n        roles.Value = token <\/code><\/pre>\n<\/div>\n<h3>\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3068\u30af\u30ec\u30fc\u30e0\u306e\u8a8d\u8a3c<\/h3>\n<p>\u7c92\u72b6\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u65b0\u3057\u3044\u30c8\u30fc\u30af\u30f3\u3092\u624b\u306b\u5165\u308c\u305f\u306e\u3067\u3001\u30eb\u30fc\u30c8\u304c\u9069\u5207\u306b\u4fdd\u8b77\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u305f\u3081\u306b\u3001\u65b0\u3057\u3044\u8a8d\u8a3c\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u4f7f\u308f\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002\u305d\u306e\u305f\u3081\u306b\u3001<code>granularAuth<\/code>\u3068\u3044\u3046\u65b0\u3057\u3044\u95a2\u6570\u3092\u4f5c\u308a\u307e\u3059\u3002<\/p>\n<p>\u4e0a\u3067\u8aac\u660e\u3057\u305f\u3088\u3046\u306b\u3001\u3053\u306e\u95a2\u6570\u306f\u3053\u306e\u30eb\u30fc\u30c8\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u30d8\u30c3\u30c0\u30fc\u306bauthorization\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u6301\u3063\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3059\u3002\u3082\u3057\u3042\u308c\u3070\u3001\u30c8\u30fc\u30af\u30f3\u304c\u79c1\u305f\u3061\u306e\u4e3b\u5f35\u3068\u79d8\u5bc6\u306e\u7f72\u540d\u9375\u306b\u5bfe\u3057\u3066\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u691c\u8a3c\u3057\u307e\u3059\u3002\u3053\u308c\u304c\u3059\u3079\u3066\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3055\u308c\u308b\u3068\u3001\u3053\u306e\u95a2\u6570\u306f\u3053\u306e\u30c8\u30fc\u30af\u30f3\u306e\u4ed5\u69d8\u306b\u5f93\u3063\u3066\u4ed8\u4e0e\u3055\u308c\u305f\u30ed\u30fc\u30eb\u306e\u30c1\u30a7\u30c3\u30af\u3092\u958b\u59cb\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u30c8\u30fc\u30af\u30f3\u304cbasic\u306e\u30ed\u30fc\u30eb\u304cTrue\u3067\u3042\u308b\u3068\u4e3b\u5f35\u3059\u308c\u3070\u3001\u30eb\u30fc\u30c8<code>\/basic<\/code>\u304c\u3053\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5bfe\u3057\u3066\u8a31\u53ef\u3055\u308c\u307e\u3059\u3002\u3082\u3057basic\u304cFalse\u3067\u3042\u308c\u3070\u3001\u3053\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u898b\u308b\u305f\u3081\u306e\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u304c\u4e0d\u5341\u5206\u3067\u3042\u308b\u3053\u3068\u3092\u30e6\u30fc\u30b6\u30fc\u306b\u4f1d\u3048\u307e\u3059\u3002<\/p>\n<p>\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u8a31\u53ef\u3055\u308c\u305f\u5834\u5408\u3001\u540c\u3058\u540d\u524d\uff08basic\uff09\u306eGridDB\u30b3\u30f3\u30c6\u30ca\u3092\u8aad\u307f\u8fbc\u307f\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u3068\u3057\u3066\u30ea\u30af\u30a8\u30b9\u30c8\u5143\u306b\u8fd4\u3057\u307e\u3059\u3002\u307e\u305a\u3001\u8a8d\u53ef\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u30a2\u30bf\u30c3\u30c1\u3057\u305f\u65b0\u3057\u3044\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-go\">\/\/main.go\nfunc main() {\n    createUsersContainer()\n\n    http.HandleFunc(\"\/\", func(w http.ResponseWriter, r *http.Request) {\n        http.Redirect(w, r, \"\/signIn\", http.StatusSeeOther)\n    })\n\n    http.HandleFunc(\"\/signUp\", SignUp)\n    http.HandleFunc(\"\/signIn\", SignIn)\n\n    http.HandleFunc(\"\/getToken\", isAuthorized(GetToken))\n    http.HandleFunc(\"\/auth\", isAuthorized(AuthPage))\n    http.HandleFunc(\"\/data\", isAuthorized(DataEndPoints))\n\n    http.HandleFunc(\"\/basic\", granularAuth(Basic))\n    http.HandleFunc(\"\/admin\", granularAuth(Admin))\n    http.HandleFunc(\"\/advisor\", granularAuth(Advisor))\n    http.HandleFunc(\"\/owner\", granularAuth(Owner))\n\n    fmt.Println(\"Listening on port :2828....\")\n    log.Fatal(http.ListenAndServe(\":2828\", nil))\n\n}<\/code><\/pre>\n<\/div>\n<p>\u524d\u56de\u306e\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u305f\u53e4\u3044\u30eb\u30fc\u30c8\u306f <code>isAuthorized<\/code> \u95a2\u6570\u3067\u4fdd\u8b77\u3055\u308c\u3066\u3044\u308b\u304c\u3001\u65b0\u3057\u3044\u30eb\u30fc\u30c8\u306f <code>granularAuth<\/code> \u3067\u4fdd\u8b77\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u7e70\u308a\u8fd4\u3057\u307e\u3059\u304c\u3001\u30d5\u30ed\u30fc\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u30e6\u30fc\u30b6\u304c\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066 <code>login<\/code> \u30c8\u30fc\u30af\u30f3\u304c\u4ed8\u4e0e\u3055\u308c\u307e\u3059\u3002\u6b21\u306b\u3001\u30e6\u30fc\u30b6\u306f <code>\/auth<\/code> \u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3055\u308c\u3001\u305d\u3053\u3067\u65b0\u3057\u3044 json web \u30c8\u30fc\u30af\u30f3\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u4eca\u306e\u3068\u3053\u308d\u3001\u30e6\u30fc\u30b6\u306f <code>granularAuth<\/code> \u3067\u4fdd\u8b77\u3055\u308c\u305f\u30eb\u30fc\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u63d0\u793a\u3055\u308c\u305f\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u65b0\u3057\u3044\u30c8\u30fc\u30af\u30f3\u3092\u4f5c\u6210\u3059\u308b\u3068\u3001 <code>\/getToken<\/code> \u30da\u30fc\u30b8\u3067\u65b0\u3057\u3044\u30c8\u30fc\u30af\u30f3\u304c\u63d0\u793a\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u30c8\u30fc\u30af\u30f3\u3092\u4f7f\u3063\u3066 <code>granularAuth<\/code> \u3067\u4fdd\u8b77\u3055\u308c\u305f\u30eb\u30fc\u30c8\u306b HTTP \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u30c8\u30fc\u30af\u30f3\u3092\u8a8d\u53ef\u30d9\u30a2\u30e9\u30fc\u30c8\u30fc\u30af\u30f3\u3068\u3057\u3066\u30a2\u30bf\u30c3\u30c1\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/token-page-1.png\"><img decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/token-page-1.png\" alt=\"\" width=\"1184\" height=\"1049\" class=\"aligncenter size-full wp-image-29964\" srcset=\"\/wp-content\/uploads\/2024\/02\/token-page-1.png 1184w, \/wp-content\/uploads\/2024\/02\/token-page-1-300x266.png 300w, \/wp-content\/uploads\/2024\/02\/token-page-1-1024x907.png 1024w, \/wp-content\/uploads\/2024\/02\/token-page-1-768x680.png 768w, \/wp-content\/uploads\/2024\/02\/token-page-1-600x532.png 600w\" sizes=\"(max-width: 1184px) 100vw, 1184px\" \/><\/a><\/p>\n<p>\u3053\u306e\u30da\u30fc\u30b8\u3092\u898b\u3066\u308f\u304b\u308b\u3088\u3046\u306b\u3001\u5404\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306b\u306f\u305d\u308c\u305e\u308c\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30e6\u30fc\u30b6\u306f\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u30c7\u30fc\u30bf\u884c\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff08\u305f\u3068\u3048\u3070\u3001\/basic \u306f basic \u3068\u3044\u3046\u30b3\u30f3\u30c6\u30ca\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u307e\u3059\uff09\u3002\u305d\u3057\u3066\u3001\u3053\u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306f\u8a8d\u8a3c\u306b\u3088\u3063\u3066\u4fdd\u8b77\u3055\u308c\u3066\u3044\u308b\uff08\u3064\u307e\u308a\u3001\u5148\u307b\u3069\u4f5c\u6210\u3057\u305f\u65b0\u3057\u3044json\u30a6\u30a7\u30d6\u30c8\u30fc\u30af\u30f3\u304c\u5fc5\u8981\uff09\u306e\u3067\u3001\u3053\u306e\u30b3\u30fc\u30c9\u306f\u3001\u30c7\u30fc\u30bf\u3092\u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001post\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u76f4\u63a5\u30d9\u30a2\u30e9\u30fc\u30c8\u30fc\u30af\u30f3\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306f\u305d\u306e\u30b3\u30fc\u30c9\u306e\u4e00\u90e8\u3067\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-javascript\">function send(e,form) {\n    console.log(\"Authorization: 'Bearer {{ .Value }}'\")\n\n    const str = form.action;\n    const n = str.lastIndexOf('\/');\n    const containerName = str.substring(n + 1);\n\n    fetch(form.action, {\n      method:'post', \n      headers: {\n        Authorization: 'Bearer {{ .Value }}'\n      },\n      body: new URLSearchParams(new FormData(form))\n    });\n\n  console.log('sent data');\n  alert(\"Added row of data to container: \" + containerName)\n  \/\/document.getElementById(result).reset();\n  form.reset()\n  e.preventDefault();\n}<\/code><\/pre>\n<\/div>\n<p>\u3053\u306e <code>{{ .Value }}<\/code> \u306f Go \u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304b\u3089\u6765\u305f\u3082\u306e\u3067\u3001json web \u30c8\u30fc\u30af\u30f3\u306e\u6587\u5b57\u5217\u3067\u3059\u3002\u3057\u304b\u3057\u3001GET\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u30c6\u30b9\u30c8\u3057\u305f\u308a\u5185\u5bb9\u3092\u8aad\u3093\u3060\u308a\u3059\u308b\u3068\u304d\u306b\u306f\u3001\u30d9\u30a2\u30e9\u30fc\u30c8\u30fc\u30af\u30f3\u3092\u624b\u52d5\u3067\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u5b9f\u969b\u306b\u8a8d\u8a3c\u3092\u51e6\u7406\u3059\u308b\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\uff08golang\uff09\u306e\u30b3\u30fc\u30c9\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-go\">func granularAuth(endpoint func(http.ResponseWriter, *http.Request)) func(http.ResponseWriter, *http.Request) {\n    return func(w http.ResponseWriter, r *http.Request) {\n\n        if r.Header[\"Authorization\"] != nil {\n            authorization := r.Header.Get(\"Authorization\")\n            tokenString := strings.TrimSpace(strings.Replace(authorization, \"Bearer\", \"\", 1))\n\n            token, err := jwt.ParseWithClaims(tokenString, &MyCustomClaims{}, func(token *jwt.Token) (interface{}, error) {\n                return MySigningKey, nil\n            }, jwt.WithLeeway(5*time.Second))\n\n            if err != nil {\n                log.Fatal(err)\n            } else if claims, ok := token.Claims.(*MyCustomClaims); ok {\n                urlPath := strings.TrimLeft(r.URL.Path, \"\/\")\n\n                gridstore := ConnectGridDB()\n                defer griddb.DeleteStore(gridstore)\n\n                col := GetContainer(gridstore, urlPath)\n                defer griddb.DeleteContainer(col)\n\n                rs, err := QueryContainer(gridstore, col, \"select *\")\n                if err != nil {\n                    fmt.Println(\"Error getting container\", err)\n                    return\n                }\n                defer griddb.DeleteRowSet(rs)\n\n                var b strings.Builder\n\n                switch urlPath {\n                case \"basic\":\n                    if claims.Role.Basic {\n                        for rs.HasNext() {\n                            rrow, err := rs.NextRow()\n                            if err != nil {\n                                fmt.Println(\"GetNextRow err:\", err)\n                                panic(\"err GetNextRow\")\n                            }\n\n                            str := rrow[0].(string)\n                            fmt.Fprintln(&b, str)\n                        }\n                        fmt.Fprintf(w, b.String())\n                        endpoint(w, r)\n                        return\n                    } else {\n                        w.WriteHeader(http.StatusUnauthorized)\n                        fmt.Fprintln(w, \"Insufficient Role to view this content\")\n                        fmt.Fprintln(w, \"Please make sure you have the role of BASIC\")\n                    }\n                case \"admin\":\n                    if claims.Role.Admin {\n                        for rs.HasNext() {\n                            rrow, err := rs.NextRow()\n                            if err != nil {\n                                fmt.Println(\"GetNextRow err:\", err)\n                                panic(\"err GetNextRow\")\n                            }\n\n                            str := rrow[0].(string)\n                            fmt.Fprintln(&b, str)\n                        }\n                        fmt.Fprintf(w, b.String())\n                        endpoint(w, r)\n                        return\n                    } else {\n                        w.WriteHeader(http.StatusUnauthorized)\n                        fmt.Fprintln(w, \"Insufficient Role to view this content\")\n                        fmt.Fprintln(w, \"Please make sure you have the role of ADMIN\")\n                    }\n                case \"advisor\":\n                    if claims.Role.Advisor {\n                        for rs.HasNext() {\n                            rrow, err := rs.NextRow()\n                            if err != nil {\n                                fmt.Println(\"GetNextRow err:\", err)\n                                panic(\"err GetNextRow\")\n                            }\n\n                            str := rrow[0].(string)\n                            fmt.Fprintln(&b, str)\n                        }\n                        fmt.Fprintf(w, b.String())\n                        endpoint(w, r)\n                        return\n                    } else {\n                        w.WriteHeader(http.StatusUnauthorized)\n                        fmt.Fprintln(w, \"Insufficient Role to view this content\")\n                        fmt.Fprintln(w, \"Please make sure you have the role of ADVISOR\")\n                    }\n                case \"owner\":\n                    if claims.Role.Owner {\n                        for rs.HasNext() {\n                            rrow, err := rs.NextRow()\n                            if err != nil {\n                                fmt.Println(\"GetNextRow err:\", err)\n                                panic(\"err GetNextRow\")\n                            }\n\n                            str := rrow[0].(string)\n                            fmt.Fprintln(&b, str)\n                        }\n                        fmt.Fprintf(w, b.String())\n                        endpoint(w, r)\n                        return\n                    } else {\n                        w.WriteHeader(http.StatusUnauthorized)\n                        fmt.Fprintln(w, \"Insufficient Role to view this content\")\n                        fmt.Fprintln(w, \"Please make sure you have the role of OWNER\")\n                    }\n\n                default:\n                    w.WriteHeader(http.StatusUnauthorized)\n                    fmt.Fprintln(w, \"Authorization Signature Invalid\")\n                }\n\n            } else {\n                log.Fatal(\"unknown claims type, cannot proceed\")\n            }\n\n        } else {\n            w.WriteHeader(http.StatusUnauthorized)\n            return\n        }\n\n    }\n}<\/code><\/pre>\n<\/div>\n<p>\u3059\u3067\u306b\u8aac\u660e\u3057\u305f\u304c\u3001\u3053\u3053\u3067\u306e\u5927\u524d\u63d0\u306f\u3001\u3053\u306e\u95a2\u6570\u304c\u547c\u3070\u308c\u308b\u3068\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u30d8\u30c3\u30c0\u5185\u306bauthorization\u30bb\u30af\u30b7\u30e7\u30f3\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u6b21\u306b\u3001\u30d9\u30a2\u30e9\u30fc\u30c8\u30fc\u30af\u30f3\u30d8\u30c3\u30c0\u30fc\u306e\u30c8\u30fc\u30af\u30f3\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\u305d\u3057\u3066\u6700\u5f8c\u306b\u3001\u3053\u306e\u30c8\u30fc\u30af\u30f3\u306b\u3088\u3063\u3066\u4ed8\u4e0e\u3055\u308c\u305f\u7279\u5b9a\u306e\u30ed\u30fc\u30eb\u3092\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3059\u3002<\/p>\n<h3>\u4fdd\u8b77\u3055\u308c\u305f\u30eb\u30fc\u30c8\u306e\u30c6\u30b9\u30c8<\/h3>\n<p>Postman\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u898b\u3066\u3001\u30eb\u30fc\u30c8\u304c\u671f\u5f85\u901a\u308a\u306b\u52d5\u3044\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u307e\u305a\u3001\u6210\u529f\u3057\u305f\u30eb\u30fc\u30c8\u3092\u793a\u3057\u307e\u3059<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/successful-route.png\"><img decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/successful-route.png\" alt=\"\" width=\"1892\" height=\"1202\" class=\"aligncenter size-full wp-image-29953\" srcset=\"\/wp-content\/uploads\/2024\/02\/successful-route.png 1892w, \/wp-content\/uploads\/2024\/02\/successful-route-300x191.png 300w, \/wp-content\/uploads\/2024\/02\/successful-route-1024x651.png 1024w, \/wp-content\/uploads\/2024\/02\/successful-route-768x488.png 768w, \/wp-content\/uploads\/2024\/02\/successful-route-1536x976.png 1536w, \/wp-content\/uploads\/2024\/02\/successful-route-600x381.png 600w\" sizes=\"(max-width: 1892px) 100vw, 1892px\" \/><\/a><\/p>\n<p>\u9069\u5207\u306a\u30ed\u30fc\u30eb\u3001\u9069\u5207\u306a\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u7528\u610f\u3057\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u30d8\u30c3\u30c0\u306e bearer auth \u306e\u4f4d\u7f6e\u306b\u30c8\u30fc\u30af\u30f3\u3092\u5165\u308c\u307e\u3059\u3002\u3059\u308b\u3068\u3001GridDB\u30b3\u30f3\u30c6\u30ca\u306e\u4e2d\u8eab\u304c\u8fd4\u3063\u3066\u304d\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u30d9\u30a2\u30e9\u30fb\u30c8\u30fc\u30af\u30f3\u3092\u542b\u3081\u306a\u304b\u3063\u305f\u5834\u5408\u306b\u3069\u3046\u306a\u308b\u304b\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/no-token.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/no-token.png\" alt=\"\" width=\"1892\" height=\"1202\" class=\"aligncenter size-full wp-image-29952\" srcset=\"\/wp-content\/uploads\/2024\/02\/no-token.png 1892w, \/wp-content\/uploads\/2024\/02\/no-token-300x191.png 300w, \/wp-content\/uploads\/2024\/02\/no-token-1024x651.png 1024w, \/wp-content\/uploads\/2024\/02\/no-token-768x488.png 768w, \/wp-content\/uploads\/2024\/02\/no-token-1536x976.png 1536w, \/wp-content\/uploads\/2024\/02\/no-token-600x381.png 600w\" sizes=\"(max-width: 1892px) 100vw, 1892px\" \/><\/a><\/p>\n<p>\u3053\u3053\u3067\u306f\u3001401 http\u30b9\u30c6\u30fc\u30bf\u30b9\u30fb\u30a8\u30e9\u30fc\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002<\/p>\n<p>\u6700\u5f8c\u306b\u3001\u30c8\u30fc\u30af\u30f3\u306f\u3042\u308b\u304c\u3001\u7279\u5b9a\u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306b\u5bfe\u3059\u308b\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u304c\u4e0d\u5341\u5206\u306a\u5834\u5408\u306b\u4f55\u304c\u8d77\u3053\u308b\u304b\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/unauthorized.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/unauthorized.png\" alt=\"\" width=\"1892\" height=\"1202\" class=\"aligncenter size-full wp-image-29955\" srcset=\"\/wp-content\/uploads\/2024\/02\/unauthorized.png 1892w, \/wp-content\/uploads\/2024\/02\/unauthorized-300x191.png 300w, \/wp-content\/uploads\/2024\/02\/unauthorized-1024x651.png 1024w, \/wp-content\/uploads\/2024\/02\/unauthorized-768x488.png 768w, \/wp-content\/uploads\/2024\/02\/unauthorized-1536x976.png 1536w, \/wp-content\/uploads\/2024\/02\/unauthorized-600x381.png 600w\" sizes=\"(max-width: 1892px) 100vw, 1892px\" \/><\/a><\/p>\n<h2>\u7d50\u8ad6<\/h2>\n<p>\u4f8b\u3048\u3070\u3001\u7279\u5b9a\u306e\u30b3\u30f3\u30c6\u30ca\u3084\u30b3\u30f3\u30c6\u30ca\u306e\u30b5\u30d6\u30bb\u30c3\u30c8\u306b\u5bfe\u3057\u3066\u3001\u30ed\u30fc\u30eb\u3092\u8aad\u307f\u53d6\u308a\u5c02\u7528\u3084\u8aad\u307f\u53d6\u308a\/\u66f8\u304d\u8fbc\u307f\u5c02\u7528\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u672c\u5f53\u306b\u3001JSON \u30a6\u30a7\u30d6 \u30c8\u30fc\u30af\u30f3\u306e\u512a\u308c\u305f\u70b9\u306f\u3001\u958b\u767a\u8005\u306e\u624b\u306b\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u304c\u59d4\u306d\u3089\u308c\u308b\u3053\u3068\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>GridDB\u306eJSON Web Token\u30b7\u30ea\u30fc\u30ba\u306e\u30d1\u30fc\u30c82\u3067\u3059\u3002\u524d\u56de\u306e\u8a18\u4e8b\u306f\u3053\u3061\u3089\u304b\u3089\u304a\u8aad\u307f\u3044\u305f\u3060\u3051\u307e\u3059\uff1a JSON Web Tokens Part I. \u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001JSON Web Token\u3068\u306f\u4f55\u304b\u3001\u305d\u306e\u767a\u884c\u3068 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":49640,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1005],"tags":[],"class_list":["post-50890","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-1005"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JSON Web\u30c8\u30fc\u30af\u30f3\u3067GridDB REST API\u3092\u4fdd\u8b77\u3059\u308b \u5f8c\u7de8 | GridDB: Open Source Time Series Database for IoT<\/title>\n<meta name=\"description\" content=\"GridDB\u306eJSON Web Token\u30b7\u30ea\u30fc\u30ba\u306e\u30d1\u30fc\u30c82\u3067\u3059\u3002\u524d\u56de\u306e\u8a18\u4e8b\u306f\u3053\u3061\u3089\u304b\u3089\u304a\u8aad\u307f\u3044\u305f\u3060\u3051\u307e\u3059\uff1a JSON Web Tokens Part I.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JSON Web\u30c8\u30fc\u30af\u30f3\u3067GridDB REST API\u3092\u4fdd\u8b77\u3059\u308b \u5f8c\u7de8 | GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"og:description\" content=\"GridDB\u306eJSON Web Token\u30b7\u30ea\u30fc\u30ba\u306e\u30d1\u30fc\u30c82\u3067\u3059\u3002\u524d\u56de\u306e\u8a18\u4e8b\u306f\u3053\u3061\u3089\u304b\u3089\u304a\u8aad\u307f\u3044\u305f\u3060\u3051\u307e\u3059\uff1a JSON Web Tokens Part I.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/\" \/>\n<meta property=\"og:site_name\" content=\"GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/griddbcommunity\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-14T08:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-14T15:56:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/json-web-token-feature-image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"512\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Israel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:site\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"Israel\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/\"},\"author\":{\"name\":\"Israel\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740\"},\"headline\":\"JSON Web\u30c8\u30fc\u30af\u30f3\u3067GridDB REST API\u3092\u4fdd\u8b77\u3059\u308b \u5f8c\u7de8\",\"datePublished\":\"2024-02-14T08:00:00+00:00\",\"dateModified\":\"2025-11-14T15:56:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/\"},\"wordCount\":125,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/griddb.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2024\/02\/json-web-token-feature-image.png\",\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/\",\"url\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/\",\"name\":\"JSON Web\u30c8\u30fc\u30af\u30f3\u3067GridDB REST API\u3092\u4fdd\u8b77\u3059\u308b \u5f8c\u7de8 | GridDB: Open Source Time Series Database for IoT\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2024\/02\/json-web-token-feature-image.png\",\"datePublished\":\"2024-02-14T08:00:00+00:00\",\"dateModified\":\"2025-11-14T15:56:34+00:00\",\"description\":\"GridDB\u306eJSON Web Token\u30b7\u30ea\u30fc\u30ba\u306e\u30d1\u30fc\u30c82\u3067\u3059\u3002\u524d\u56de\u306e\u8a18\u4e8b\u306f\u3053\u3061\u3089\u304b\u3089\u304a\u8aad\u307f\u3044\u305f\u3060\u3051\u307e\u3059\uff1a JSON Web Tokens Part I.\",\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2024\/02\/json-web-token-feature-image.png\",\"contentUrl\":\"\/wp-content\/uploads\/2024\/02\/json-web-token-feature-image.png\",\"width\":512,\"height\":512},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/griddb.net\/en\/#website\",\"url\":\"https:\/\/griddb.net\/en\/\",\"name\":\"GridDB: Open Source Time Series Database for IoT\",\"description\":\"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL\",\"publisher\":{\"@id\":\"https:\/\/griddb.net\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/griddb.net\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/griddb.net\/en\/#organization\",\"name\":\"Fixstars\",\"url\":\"https:\/\/griddb.net\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"contentUrl\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"width\":200,\"height\":83,\"caption\":\"Fixstars\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/griddbcommunity\/\",\"https:\/\/x.com\/GridDBCommunity\",\"https:\/\/www.linkedin.com\/company\/griddb-by-toshiba\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740\",\"name\":\"Israel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g\",\"caption\":\"Israel\"},\"url\":\"https:\/\/griddb.net\/ja\/author\/israel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"JSON Web\u30c8\u30fc\u30af\u30f3\u3067GridDB REST API\u3092\u4fdd\u8b77\u3059\u308b \u5f8c\u7de8 | GridDB: Open Source Time Series Database for IoT","description":"GridDB\u306eJSON Web Token\u30b7\u30ea\u30fc\u30ba\u306e\u30d1\u30fc\u30c82\u3067\u3059\u3002\u524d\u56de\u306e\u8a18\u4e8b\u306f\u3053\u3061\u3089\u304b\u3089\u304a\u8aad\u307f\u3044\u305f\u3060\u3051\u307e\u3059\uff1a JSON Web Tokens Part I.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/","og_locale":"ja_JP","og_type":"article","og_title":"JSON Web\u30c8\u30fc\u30af\u30f3\u3067GridDB REST API\u3092\u4fdd\u8b77\u3059\u308b \u5f8c\u7de8 | GridDB: Open Source Time Series Database for IoT","og_description":"GridDB\u306eJSON Web Token\u30b7\u30ea\u30fc\u30ba\u306e\u30d1\u30fc\u30c82\u3067\u3059\u3002\u524d\u56de\u306e\u8a18\u4e8b\u306f\u3053\u3061\u3089\u304b\u3089\u304a\u8aad\u307f\u3044\u305f\u3060\u3051\u307e\u3059\uff1a JSON Web Tokens Part I.","og_url":"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2024-02-14T08:00:00+00:00","article_modified_time":"2025-11-14T15:56:34+00:00","og_image":[{"width":512,"height":512,"url":"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/json-web-token-feature-image.png","type":"image\/png"}],"author":"Israel","twitter_card":"summary_large_image","twitter_creator":"@GridDBCommunity","twitter_site":"@GridDBCommunity","twitter_misc":{"\u57f7\u7b46\u8005":"Israel","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"6\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/#article","isPartOf":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/"},"author":{"name":"Israel","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740"},"headline":"JSON Web\u30c8\u30fc\u30af\u30f3\u3067GridDB REST API\u3092\u4fdd\u8b77\u3059\u308b \u5f8c\u7de8","datePublished":"2024-02-14T08:00:00+00:00","dateModified":"2025-11-14T15:56:34+00:00","mainEntityOfPage":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/"},"wordCount":125,"commentCount":0,"publisher":{"@id":"https:\/\/griddb.net\/en\/#organization"},"image":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2024\/02\/json-web-token-feature-image.png","inLanguage":"ja","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/","url":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/","name":"JSON Web\u30c8\u30fc\u30af\u30f3\u3067GridDB REST API\u3092\u4fdd\u8b77\u3059\u308b \u5f8c\u7de8 | GridDB: Open Source Time Series Database for IoT","isPartOf":{"@id":"https:\/\/griddb.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/#primaryimage"},"image":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2024\/02\/json-web-token-feature-image.png","datePublished":"2024-02-14T08:00:00+00:00","dateModified":"2025-11-14T15:56:34+00:00","description":"GridDB\u306eJSON Web Token\u30b7\u30ea\u30fc\u30ba\u306e\u30d1\u30fc\u30c82\u3067\u3059\u3002\u524d\u56de\u306e\u8a18\u4e8b\u306f\u3053\u3061\u3089\u304b\u3089\u304a\u8aad\u307f\u3044\u305f\u3060\u3051\u307e\u3059\uff1a JSON Web Tokens Part I.","inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/protect-your-griddb-rest-api-with-json-web-tokens-part-ii\/#primaryimage","url":"\/wp-content\/uploads\/2024\/02\/json-web-token-feature-image.png","contentUrl":"\/wp-content\/uploads\/2024\/02\/json-web-token-feature-image.png","width":512,"height":512},{"@type":"WebSite","@id":"https:\/\/griddb.net\/en\/#website","url":"https:\/\/griddb.net\/en\/","name":"GridDB: Open Source Time Series Database for IoT","description":"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL","publisher":{"@id":"https:\/\/griddb.net\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/griddb.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Organization","@id":"https:\/\/griddb.net\/en\/#organization","name":"Fixstars","url":"https:\/\/griddb.net\/en\/","logo":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/","url":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","contentUrl":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","width":200,"height":83,"caption":"Fixstars"},"image":{"@id":"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/griddbcommunity\/","https:\/\/x.com\/GridDBCommunity","https:\/\/www.linkedin.com\/company\/griddb-by-toshiba"]},{"@type":"Person","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740","name":"Israel","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g","caption":"Israel"},"url":"https:\/\/griddb.net\/ja\/author\/israel\/"}]}},"_links":{"self":[{"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/posts\/50890","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/comments?post=50890"}],"version-history":[{"count":1,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/posts\/50890\/revisions"}],"predecessor-version":[{"id":51711,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/posts\/50890\/revisions\/51711"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/media\/49640"}],"wp:attachment":[{"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/media?parent=50890"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/categories?post=50890"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/tags?post=50890"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}