{"id":46672,"date":"2021-11-16T00:00:00","date_gmt":"2021-11-16T08:00:00","guid":{"rendered":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/blog\/using-authlib-with-griddb\/"},"modified":"2025-11-13T12:55:38","modified_gmt":"2025-11-13T20:55:38","slug":"using-authlib-with-griddb","status":"publish","type":"post","link":"https:\/\/www.griddb.net\/en\/blog\/using-authlib-with-griddb\/","title":{"rendered":"Using Authlib with GridDB"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>This blog will walk through the process of installing and using <a href=\"https:\/\/docs.authlib.org\/en\/latest\/\">authlib<\/a> with GridDB. Authlib is a <a href=\"https:\/\/www.python.org\/\">Python<\/a> library for installing OAuth (and others) to your server and applications.<\/p>\n<h2>What is Authlib<\/h2>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/OAuth\">Open Authorization (OAuth)<\/a> is an open standard predicated on using a token system for securing applications. The general flow of things is that a user logs in via their username and password, and the application will provide a special token that will expire after X amount of time. That token will then be checked everytime that user wishes to access the application. Once the token expires, the user will then be required to log in again and be to be issued a brand new token.<\/p>\n<p>Normally, this sort of implementation is done via SQL-based databases, meaning unders some circumstances, the developer may be forced into juggling multiple different databases for just one application.<\/p>\n<h3>When to use Authlib<\/h3>\n<p>Generally, when an application needs to be secure in some way &#8212; there is no better option than OAuth. This is mostly because it is an open-standard with a vast track record of flexibility and effectiveness. It works via HTTP which means it can used in a wide variety of applications and is understood by a large majority of developers. Strictly speaking, there are very cases in which OAuth (and by extension Authlib) is not the best option for a new application.<\/p>\n<h2>Using GridDB with Authlib<\/h2>\n<p>As already alluded to, the main reason as to why a developer or organization would want to use GridDB to handle their users\/authentication for their application, is simply reducing the amount of databases in use. If your application is already using GridDB because of the <a href=\"https:\/\/griddb.net\/en\/blog\/griddb-automotive\/\">numerous<\/a> <a href=\"https:\/\/griddb.net\/en\/blog\/three-examples-griddb-iot-industry\/\">benefits<\/a>, then adding in functionality for authentication will be of a great benefit.<\/p>\n<h3>How it&#8217;s Implemented<\/h3>\n<p>To implement Authlib with GridDB, we can follow along with the <a href=\"https:\/\/github.com\/authlib\/example-oauth2-server\">Sample OAuth Server<\/a> and make a few key changes to get it working; the purpose of most of the changes made will be altering from using a SQL-based database to the specific code GridDB requires.<\/p>\n<p>First, the obvious (<code>griddb.py<\/code>):<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">import griddb_python\ngriddb = griddb_python\nfactory = griddb.StoreFactory.get_instance()\n\ngridstore = factory.get_store(\n    host=\"239.0.0.1\",\n    port=31999,\n    cluster_name=\"defaultCluster\",\n    username=\"admin\",\n    password=\"admin\"\n)<\/code><\/pre>\n<\/div>\n<h4>oauth.py<\/h4>\n<p>The <code>oauth.py<\/code> file is responsible for handling password and token and checking for veracity against the database.<\/p>\n<p>First we need to import the GridDB credentials.<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">from .griddb import griddb, gridstore <\/code><\/pre>\n<\/div>\n<p>And then it&#8217;s making sure the OAuth functionality works. First it needs to check for the user and its password in the DB to ensure the credentials match. To do this with GridDB, we simply run a query to check for the saved user:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">        try:\n\n            con = gridstore.get_container(\"USERS\")\n            q = con.query(\"select * where username = '\"+username+\"'\")\n            rs = q.fetch(False)\n            if rs.has_next():\n                u = rs.next()\n        except:\n            print(\"Exception finding user\")\n            abort(401, \"UNAUTHORIZED\")\n        if u:\n            user = User(u)\n            if user.check_password(password):\n                return user\n            print(\"pass doesnt match\")\n\n        abort(401, \"UNAUTHORIZED\")<\/code><\/pre>\n<\/div>\n<p>Next, our application needs to be able to save the OAuth-issued tokens into GridDB.<\/p>\n<p>To start the saving process, we create the schema for a <code>collection container<\/code> called <code>TOKENS<\/code>. This container needs to have 4 saved rows: token string, expires time, issued time, and the user id associated with the token. The nice thing is that with the GridDB Python container, we can set the container&#8217;s schema as a variable like so:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">def save_token(token, request):\n\n    conInfo = griddb.ContainerInfo(\"TOKENS\",\n        [[\"token\", griddb.Type.STRING],\n        [\"expires_at\", griddb.Type.TIMESTAMP],\n        [\"issued_at\", griddb.Type.TIMESTAMP],\n        [\"userid\", griddb.Type.STRING]],\n        griddb.ContainerType.COLLECTION, True)\n    cn = gridstore.put_container(conInfo)\n\n    cn.set_auto_commit(False)\n    cn.create_index(\"token\")\n    cn.put([token['access_token'], datetime.datetime.utcfromtimestamp(time.time()+token['expires_in']), datetime.datetime.utcnow(), request.user.username])\n    cn.commit()<\/code><\/pre>\n<\/div>\n<p>The server also needs to be able to check the validity of the token passed to it. To do so, we once again make a query to our GridDB server with our BearerTokenValidator class<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">class MyBearerTokenValidator(BearerTokenValidator):\n    def authenticate_token(self, token_string):\n        try:\n            cn = griddb.get_container(\"TOKENS\")\n            q = con.query(\"select * where token = '\"+token_string+\"'\")\n            rs = q.fetch(False)\n            if rs.has_next():\n                return OAuth2Token(rs.next())\n            else:\n                return None\n        except:\n            return None\n        return None<\/code><\/pre>\n<\/div>\n<p>If the passed token exists in the GridDB <code>TOKENS<\/code> container, then the application accepts the token as valid, if not, it will return as invalid.<\/p>\n<p>And so, everytime a user logs in these functions will run to make sure first the password matches, and then once the token is issued, if the user tries to access content that is secured, it will also make sure the token is valid.<\/p>\n<h4>routes.py<\/h4>\n<p>The <code>routes.py<\/code> file handles our server&#8217;s endpoints\/API calls. For our specific example, we will focus on three different endpoints: the home endpoint (&#8220;\/&#8221;), the endpoint used to sign up (&#8220;\/sign_up&#8221;), and the endpoint used to verify our token works (&#8220;\/private&#8221;).<\/p>\n<p>First, let&#8217;s take a look at the <code>\/sign_up<\/code> endpoint. To test this out on your own, you can clone the repo and run the API server: <code>flask run --host=0.0.0.0<\/code>. Once it&#8217;s running, you can try signing up. This process will create the <code>USERS<\/code> collection container on your GridDB server and save the credentials of the user you <code>POST<\/code>.<\/p>\n<p>So, once you&#8217;ve got your API server running, try this <code>curl<\/code> command:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">curl --request POST \n--url 'http:\/\/52.250.124.168:5000\/sign_up' \n--header 'Content-Type: application\/x-www-form-urlencoded' \n--data 'grant_type=password' \n--data 'scope=all' \n--data 'username=israel' \n--data 'password=imru'<\/code><\/pre>\n<\/div>\n<p>Here I am creating a new user <code>israel<\/code> with password <code>imru<\/code>.<\/p>\n<p>Whether the command was successful or not will be apparent via the server logs. Once you&#8217;ve got your user signed up and registered, we can try to log in. To do, we use the <code>\/<\/code> endpoint along with our credentials to test if the user is present in our database.<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">curl --location --request POST 'http:\/\/52.250.124.168:5000\/' \n--form 'username=\"israel\"' \n--form 'password=\"imru\"' \n--form 'grant_type=\"password\"' \n--form 'scope=\"all\"'<\/code><\/pre>\n<\/div>\n<p>If all is successful, you should get back a token string. This is your OAuth-issued token for accessing the <code>\/private<\/code> endpoint. So first, we can try accessing the endpoint without our token. If the token is invalid, or not found in your DB, you will receive a 401 server error code:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">{\n    \"error\": \"invalid_token\",\n    \"error_description\": \"The access token provided is expired, revoked, malformed, or invalid for other reasons.\"\n}<\/code><\/pre>\n<\/div>\n<p>And now to see if make sure that the entire system is working as expected, you can make the request again but with the token attached as an authentication header like so:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">curl --location --request GET 'http:\/\/52.250.124.168:5000\/private' \n--header 'Authorization: Bearer ZcoI1Rxgcw8rx8z0uFjCArdqacjM8lyE0K6fNWf2zz'<\/code><\/pre>\n<\/div>\n<p>If successful, your API server should respond with the following message: <code>This is a private page only viewable if you're logged in<\/code>. This is working as intended.<\/p>\n<p>Here is a diagram of the general flow of things:<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2021\/11\/Authlib.png\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2021\/11\/Authlib.png\" alt=\"\" width=\"1280\" height=\"720\" class=\"aligncenter size-full wp-image-27906\" srcset=\"\/wp-content\/uploads\/2021\/11\/Authlib.png 1280w, \/wp-content\/uploads\/2021\/11\/Authlib-300x169.png 300w, \/wp-content\/uploads\/2021\/11\/Authlib-1024x576.png 1024w, \/wp-content\/uploads\/2021\/11\/Authlib-768x432.png 768w, \/wp-content\/uploads\/2021\/11\/Authlib-150x85.png 150w, \/wp-content\/uploads\/2021\/11\/Authlib-600x338.png 600w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/a><\/p>\n<h2>Conclusion<\/h2>\n<p>When creating a backend API server, oftentimes Authlib will be in use to help secure the application. If GridDB is already being used to store the application&#8217;s data, it can make sense to pool resources and use the same database to handle authentication as well. Following along with this blog, you can now do so.<\/p>\n<p>Full code for this project is available in our <a href=\"https:\/\/github.com\/griddbnet\/Blogs\/tree\/main\/Using%20Authlib%20with%20GridDB\">GridDBnet GitHub Repo<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction This blog will walk through the process of installing and using authlib with GridDB. Authlib is a Python library for installing OAuth (and others) to your server and applications. What is Authlib Open Authorization (OAuth) is an open standard predicated on using a token system for securing applications. The general flow of things is [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":27908,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[121],"tags":[],"class_list":["post-46672","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Using Authlib with GridDB | GridDB: Open Source Time Series Database for IoT<\/title>\n<meta name=\"description\" content=\"Introduction This blog will walk through the process of installing and using authlib with GridDB. Authlib is a Python library for installing OAuth (and\" \/>\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\/en\/blog\/using-authlib-with-griddb\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Authlib with GridDB | GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"og:description\" content=\"Introduction This blog will walk through the process of installing and using authlib with GridDB. Authlib is a Python library for installing OAuth (and\" \/>\n<meta property=\"og:url\" content=\"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/\" \/>\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=\"2021-11-16T08:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-13T20:55:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.griddb.net\/wp-content\/uploads\/2021\/11\/authlib-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1160\" \/>\n\t<meta property=\"og:image:height\" content=\"653\" \/>\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=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Israel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/\"},\"author\":{\"name\":\"Israel\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740\"},\"headline\":\"Using Authlib with GridDB\",\"datePublished\":\"2021-11-16T08:00:00+00:00\",\"dateModified\":\"2025-11-13T20:55:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/\"},\"wordCount\":939,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/griddb.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2021\/11\/authlib-1.png\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/\",\"url\":\"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/\",\"name\":\"Using Authlib with GridDB | GridDB: Open Source Time Series Database for IoT\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2021\/11\/authlib-1.png\",\"datePublished\":\"2021-11-16T08:00:00+00:00\",\"dateModified\":\"2025-11-13T20:55:38+00:00\",\"description\":\"Introduction This blog will walk through the process of installing and using authlib with GridDB. Authlib is a Python library for installing OAuth (and\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2021\/11\/authlib-1.png\",\"contentUrl\":\"\/wp-content\/uploads\/2021\/11\/authlib-1.png\",\"width\":1160,\"height\":653},{\"@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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/griddb.net\/en\/#organization\",\"name\":\"Fixstars\",\"url\":\"https:\/\/griddb.net\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\":\"en-US\",\"@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:\/\/www.griddb.net\/en\/author\/israel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Using Authlib with GridDB | GridDB: Open Source Time Series Database for IoT","description":"Introduction This blog will walk through the process of installing and using authlib with GridDB. Authlib is a Python library for installing OAuth (and","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\/en\/blog\/using-authlib-with-griddb\/","og_locale":"en_US","og_type":"article","og_title":"Using Authlib with GridDB | GridDB: Open Source Time Series Database for IoT","og_description":"Introduction This blog will walk through the process of installing and using authlib with GridDB. Authlib is a Python library for installing OAuth (and","og_url":"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2021-11-16T08:00:00+00:00","article_modified_time":"2025-11-13T20:55:38+00:00","og_image":[{"width":1160,"height":653,"url":"https:\/\/www.griddb.net\/wp-content\/uploads\/2021\/11\/authlib-1.png","type":"image\/png"}],"author":"Israel","twitter_card":"summary_large_image","twitter_creator":"@GridDBCommunity","twitter_site":"@GridDBCommunity","twitter_misc":{"Written by":"Israel","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/#article","isPartOf":{"@id":"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/"},"author":{"name":"Israel","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740"},"headline":"Using Authlib with GridDB","datePublished":"2021-11-16T08:00:00+00:00","dateModified":"2025-11-13T20:55:38+00:00","mainEntityOfPage":{"@id":"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/"},"wordCount":939,"commentCount":0,"publisher":{"@id":"https:\/\/griddb.net\/en\/#organization"},"image":{"@id":"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2021\/11\/authlib-1.png","articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/","url":"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/","name":"Using Authlib with GridDB | GridDB: Open Source Time Series Database for IoT","isPartOf":{"@id":"https:\/\/griddb.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/#primaryimage"},"image":{"@id":"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2021\/11\/authlib-1.png","datePublished":"2021-11-16T08:00:00+00:00","dateModified":"2025-11-13T20:55:38+00:00","description":"Introduction This blog will walk through the process of installing and using authlib with GridDB. Authlib is a Python library for installing OAuth (and","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb.net\/en\/blog\/using-authlib-with-griddb\/#primaryimage","url":"\/wp-content\/uploads\/2021\/11\/authlib-1.png","contentUrl":"\/wp-content\/uploads\/2021\/11\/authlib-1.png","width":1160,"height":653},{"@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":"en-US"},{"@type":"Organization","@id":"https:\/\/griddb.net\/en\/#organization","name":"Fixstars","url":"https:\/\/griddb.net\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@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":"en-US","@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:\/\/www.griddb.net\/en\/author\/israel\/"}]}},"_links":{"self":[{"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/posts\/46672","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/comments?post=46672"}],"version-history":[{"count":1,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/posts\/46672\/revisions"}],"predecessor-version":[{"id":51346,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/posts\/46672\/revisions\/51346"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/media\/27908"}],"wp:attachment":[{"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/media?parent=46672"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/categories?post=46672"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.griddb.net\/en\/wp-json\/wp\/v2\/tags?post=46672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}