{"id":50643,"date":"2023-05-13T08:12:56","date_gmt":"2023-08-28T03:33:07","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/"},"modified":"2024-04-30T03:54:31","modified_gmt":"2024-04-29T19:54:31","slug":"%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/","title":{"rendered":"\u4f7f\u7528Keycloak\u5728API\u7f51\u5173\u4e2d\u9650\u5236\u5bf9API\u7684\u8bbf\u95ee"},"content":{"rendered":"<h1>\u4eca\u5929\u8981\u505a\u7684\u4e8b\u60c5<\/h1>\n<p>\u5728\u7b2c19\u5929\u7684\u5723\u8bde\u964d\u4e34\u6d3b\u52a8\u4e2d\uff0c\u5c06\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528API Gateway\u8fdb\u884c\u8bbf\u95ee\u9650\u5236\uff08\u6388\u6743\uff09\uff0c\u5e76\u8ba8\u8bba\u4fdd\u62a4\u624b\u673a\u5e94\u7528\u7a0b\u5e8f\u7684API\u670d\u52a1\u5668\u7684\u65b9\u6cd5\u3002\u7531\u4e8e\u5e0c\u671b\u5728\u4e00\u5929\u5185\u5b8c\u6210\uff0c\u56e0\u6b64\u6587\u7ae0\u53d8\u5f97\u76f8\u5f53\u5197\u957f\u3002<\/p>\n<div>\n<div class=\"post-table\"><img loading=\"lazy\" decoding=\"async\" class=\"emoji\" title=\":warning:\" src=\"https:\/\/cdn.qiita.com\/emoji\/twemoji\/unicode\/26a0-fe0f.png\" alt=\":warning:\" width=\"20\" height=\"20\" \/> AWS API Gateway\u306e\u8a71\u306f\u5168\u304f\u51fa\u3066\u304d\u307e\u305b\u3093\u3002&#8221;AWS&#8221;\u3067\u30b0\u30b0\u3063\u3066\u6765\u3066\u3057\u307e\u3063\u305f\u4eba\u306f\u3001\u7533\u3057\u8a33\u306a\u3044\u3067\u3059\u304c\u3001\u30d6\u30e9\u30a6\u30b6\u30d0\u30c3\u30af\u3092\u304a\u9858\u3044\u3057\u307e\u3059\u3002<\/div>\n<\/div>\n<h1>API Gateway\u662f\u4ec0\u4e48\uff1f<\/h1>\n<p>\u5047\u8bbe\u4f60\u8981\u5f00\u53d1\u5e76\u53d1\u5e03\u4e00\u4e2aWeb\u670d\u52a1\u3002\u4f60\u53ef\u4ee5\u9009\u62e9\u4f20\u7edf\u7684JSP\u6216\uff08\u6ca1\u6709x\u7684\uff09ASP\u7b49\u8001\u5f0fWeb\u5e94\u7528\u7a0b\u5e8f\uff0c\u4f46\u73b0\u4ee3\u5316\u7684\u670d\u52a1\u53ea\u9700\u8981\u63d0\u4f9bREST API\u3002\u90a3\u4e48\uff0c\u8fd9\u4e2aAPI\u662f\u4efb\u4f55\u4eba\u90fd\u80fd\u4f7f\u7528\u7684\u5417\uff1f\u663e\u7136\u4e0d\u662f\uff0c\u4f7f\u7528\u8005\u4f1a\u6709\u9650\u5236\u2026\u2026\u770b\u8d77\u6765\u9700\u8981\u8eab\u4efd\u9a8c\u8bc1\u3002\u7136\u800c\uff0c\u901a\u5e38API\u4e0d\u662f\u6240\u6709\u7ecf\u8fc7\u8eab\u4efd\u9a8c\u8bc1\u7684\u4eba\u90fd\u80fd\u5e73\u7b49\u4f7f\u7528\uff0c\u4e00\u822c\u7684\u505a\u6cd5\u662f\u25cb\u25cbAPI\u662f\u4efb\u4f55\u4eba\u53ef\u7528\uff0c\u4f46\u00d7\u00d7API\u53ea\u80fd\u7279\u5b9a\u7684\u4eba\u4f7f\u7528\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u9700\u8981\u6709\u8bbf\u95ee\u9650\u5236\uff08\u6388\u6743\uff09\u3002<\/p>\n<p>\u867d\u7136\u6211\u53ef\u4ee5\u6839\u636e\u6211\u7684\u65b9\u5f0f\u8fdb\u884c\u5ba1\u6279\uff0c\u4f46\u5982\u679c\u53ef\u4ee5\u7684\u8bdd\uff0c\u9075\u5faa\u5e38\u7528\u7684\u534f\u8bae\u624d\u7b26\u5408\u60c5\u7406\u3002\u5e38\u89c1\u7684\u534f\u8bae\u5e94\u8be5\u662f OAuth2.0\u3002<\/p>\n<p>\u5982\u679c\u662fOAuth2.0\uff0c\u53ef\u80fd\u6839\u672c\u4e0d\u9700\u8981\u81ea\u5df1\u958b\u767c\uff0c\u7db2\u4e0a\u53ef\u4ee5\u641c\u5c0b\u5230\u5f88\u591aOAuth2.0\u7684\u6a21\u584a\u548c\u51fd\u5f0f\u5eab\u3002\u4f46\u5f9eAPI\u7684\u89d2\u5ea6\u4f86\u770b\uff0c\u9019\u4e9b\u6a21\u584a\u548c\u51fd\u5f0f\u5eab\u4e2d\u9700\u8981\u7372\u53d6\u7684\u4fe1\u606f\u6709\u54ea\u4e9b\u5462\uff1f\u53ea\u6709\u7528\u6236\u4fe1\u606f\uff08\u2252ID\u4ee4\u724c\uff09\u3002\u5982\u679c\u53ea\u9700\u8981\u9019\u4e9b\u4fe1\u606f\uff0c\u771f\u7684\u9700\u8981\u5c07\u5b83\u5011\u4f5c\u70baWeb\u5bb9\u5668\u4e0a\u7684\u6a21\u584a\u55ce\uff1f\u5982\u679c\u5728\u8acb\u6c42\u4e4b\u524d\u9700\u8981\u901a\u904e\u6388\u6b0a\u9032\u884c\u8a2a\u554f\u9650\u5236\uff0c\u96e3\u9053\u53cd\u5411\u4ee3\u7406\u670d\u52d9\u5668\u5c31\u4e0d\u884c\u55ce\uff1f<\/p>\n<p>API Gateway\u662f\u4e00\u4e2a\u53cd\u5411\u4ee3\u7406\u670d\u52a1\u5668\uff0c\u5b83\u806a\u660e\u5730\u5904\u7406\u8bbf\u95ee\u9650\u5236\u3002\u5b9e\u9645\u4e0a\uff0c\u5b83\u4e0d\u4ec5\u9650\u5236\u8bbf\u95ee\uff0c\u8fd8\u6709\u6d41\u91cf\u9650\u5236\u3001\u8d1f\u8f7d\u5e73\u8861\u3001\u5ba1\u8ba1\u65e5\u5fd7\u8f93\u51fa\u4ee5\u53ca\u7c7b\u4f3cApache\u4e2d\u7684\u865a\u62df\u4e3b\u673a\u529f\u80fd\u7b49\u7b49\u3002\u5b83\u5c06\u8fd9\u4e9b\u529f\u80fd\u96c6\u4e2d\u53ef\u89c6\u5316\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u5355\u72ec\u7684\u72ec\u7acb\u670d\u52a1\u63d0\u4f9b\uff0c\u540c\u65f6\u8fd8\u5c06\u5176\u4e0eWeb\u5e94\u7528\u7a0b\u5e8f\u5206\u79bb\uff08\u89e3\u8026\uff09\uff0c\u4f5c\u4e3a\u4e00\u79cd&#8221;\u6388\u6743\u670d\u52a1&#8221;\u3002\u50b2\u6162\u4e00\u70b9\u7684\u8bf4\u6cd5\u662f\uff0c\u5728Web\u670d\u52a1\u5c42\u4e4b\u524d\u7684\u6388\u6743\u5c42\uff0c\u6216\u8005\u8bf4&#8221;\u8ba4\u53ef\u5c42&#8221;\u3002<\/p>\n<h1>API Gateway\u7684\u4e00\u822c\u914d\u7f6e<\/h1>\n<p>API\u7f51\u5173\u7684\u6838\u5fc3\u662f\u4e00\u4e2a\u53cd\u5411\u4ee3\u7406\u670d\u52a1\u5668\uff0c\u6240\u4ee5\u5b83\u88ab\u653e\u7f6e\u5728API\u670d\u52a1\u5668\u4e4b\u524d\u3002\u53e6\u5916\uff0c\u7528\u6237\uff08\u6216\u8005\u4f7f\u7528API\u7684\u5ba2\u6237\u7aef\uff09\u901a\u5e38\u5c06API\u7f51\u5173\u653e\u7f6e\u5728DMZ\u4e2d\uff0c\u800cAPI\u670d\u52a1\u5668\u5219\u5728\u5176\u540e\u9762\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/10-0.png\" alt=\"2017-11-22_105314.png\" \/><\/div>\n<p>\u5728\u8fd9\u91cc\u6700\u91cd\u8981\u7684\u70b9\u662f\u4e0d\u662fAPI\u670d\u52a1\u5668\uff0c\u800c\u662f&#8221;\u5e94\u7528\u7a0b\u5e8f\uff08\u5ba2\u6237\u7aef\uff09&#8221;\u7684\u90e8\u5206\u3002\u8fd9\u4e2a\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u662fWeb\u5e94\u7528\u7a0b\u5e8f\uff0c\u4f46\u8fd9\u6b21\u662f\u4e00\u4e2a\u624b\u673a\u5e94\u7528\u7a0b\u5e8f\uff08\u5728\u6587\u7ae0\u4e2d\u662fWindows\u5e94\u7528\u7a0b\u5e8f\uff09\u3002<\/p>\n<p>\u5728API\u4f7f\u7528\u573a\u666f\u4e2d\uff0c\u6d41\u7a0b\u53ef\u80fd\u4f1a\u5927\u81f4\u5982\u4e0b\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/13-0.png\" alt=\"2017-11-22_105538.png\" \/><\/div>\n<p>\u2460 \u7528\u6237\u64cd\u4f5c\u5e94\u7528\u7a0b\u5e8f<br \/>\n\u2461 \u5e94\u7528\u7a0b\u5e8f\u60f3\u8981\u4f7f\u7528API\uff0c\u56e0\u6b64\u8bbf\u95eeAPI\u7f51\u5173\u4f4d\u4e8eAPI\u670d\u52a1\u5668\u524d\u9762<br \/>\n\u2462 \u7531\u4e8e\u6743\u9650\u4e0d\u8db3\uff0c\u8fd4\u56de401\uff08\u672a\u6388\u6743\uff09<br \/>\n\u2463 \u5e94\u7528\u7a0b\u5e8f\u53d1\u9001\u8ba4\u8bc1\u548c\u6388\u6743\u8bf7\u6c42\u7ed9OP\uff0c\u4ee5\u83b7\u53d6\u5bf9API\u7684\u8bbf\u95ee\u6743\u9650<br \/>\n\u2464 OP\u5bf9\u7528\u6237\u8fdb\u884c\u8ba4\u8bc1\u548c\u540c\u610f\u5904\u7406<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/15-0.png\" alt=\"2017-11-22_105641.png\" \/><\/div>\n<p>\u2465 OP\u5c06\u6388\u6743\u7801\u4f20\u9012\u7ed9\u5e94\u7528\u7a0b\u5e8f<br \/>\n\u2466 \u5e94\u7528\u7a0b\u5e8f\u4ece\u6388\u6743\u7801\u83b7\u53d6\u8bbf\u95ee\u4ee4\u724c<br \/>\n\u2467 \u5e94\u7528\u7a0b\u5e8f\u518d\u6b21\u643a\u5e26\u8bbf\u95ee\u4ee4\u724c\u8bbf\u95eeAPI\u7f51\u5173<br \/>\n\u2468 API\u7f51\u5173\u8fdb\u884c\u4ee3\u7406\u8f6c\u53d1\uff0c\u56e0\u4e3a\u8fd9\u6b21\u662f\u5408\u6cd5\u7684<br \/>\n\u2469 API\u53ea\u662f\u7b80\u5355\u5730\u5bf9\u8bf7\u6c42\u8fd4\u56de\u54cd\u5e94\u3002\u5e94\u7528\u7a0b\u5e8f\u63a5\u6536API\u7684\u7ed3\u679c\u5e76\u5c06\u5185\u5bb9\u8fd4\u56de\u7ed9\u7528\u6237\u3002<\/p>\n<h1>\u5efa\u7acb\u73af\u5883<\/h1>\n<p>\u6211\u4eec\u7ecf\u8fc7\u4e86\u4e00\u756a\u957f\u7bc7\u7684\u94fa\u57ab\uff0c\u73b0\u5728\u8ba9\u6211\u4eec\u6765\u642d\u5efa\u73af\u5883\u5427\u3002\u6839\u636e\u6211\u4eec\u4e4b\u524d\u7ed8\u5236\u7684\u6d41\u7a0b\uff0c\u9664\u4e86\u4f5c\u4e3aOP\u7684Keycloak\u4e4b\u5916\uff0c\u6211\u4eec\u8fd8\u9700\u8981API\u3001API Gateway\u548cAPI\u7684\u5ba2\u6237\u7aef\u3002\u8ba9\u6211\u4eec\u4e00\u4e2a\u4e00\u4e2a\u5730\u521b\u5efa\u5b83\u4eec\u5427\uff08\u8fd9\u4e2a\u8fc7\u7a0b\u4f1a\u6bd4\u8f83\u5197\u957f\uff09\u3002<\/p>\n<h2>\u4f7f\u7528\u5de9\uff08\u5b89\u88c5\uff09<\/h2>\n<p>\u4f5c\u4e3a API Gateway\uff0c\u6211\u6253\u7b97\u4f7f\u7528\u5f00\u6e90\u7684 Kong\uff08\u5bf9\u4e8e\u5e0c\u671b\u4f7f\u7528 AWS \u7684 API Gateway \u7684\u4eba\uff0c\u62b1\u6b49\uff09\u3002<\/p>\n<h3>Kong\u7684\u7ed3\u6784<\/h3>\n<p>\u5728\u5b89\u88c5Kong\u4e4b\u524d\uff0c\u8ba9\u6211\u4eec\u7b80\u5355\u5730\u4ecb\u7ecd\u4e00\u4e0b\u5b83\u7684\u914d\u7f6e\u3002\u5982\u679c\u4e0d\u8fd9\u6837\u505a\uff0c\u6211\u4eec\u5c06\u4e0d\u77e5\u9053\u5e94\u8be5\u5b89\u88c5\u4ec0\u4e48\u3002Kong\u672c\u8eab\u662f\u4e00\u4e2a\u5e38\u89c1\u7684Web\u5bb9\u5668\uff0c\u6700\u8fd1\u5b83\u5df2\u7ecf\u96c6\u6210\u4e86Nginx\u3002Kong\u7684\u914d\u7f6e\u5b58\u50a8\u5728\u5916\u90e8\u6570\u636e\u5e93\u4e2d\uff08\u9700\u8981\u5355\u72ec\u5b89\u88c5\uff09\uff0c\u6839\u636e\u6587\u6863\u6240\u8bf4\uff0c\u652f\u6301\u7684\u6570\u636e\u5e93\u662f PostgreSQL 9.4\u6216\u66f4\u9ad8\u7248\u672c\uff0c\u6216\u8005Cassandra 3\u7cfb\uff08\u622a\u81f32017\u5e7412\u6708\uff09\u3002\u5728\u672c\u6587\u4e2d\uff0c\u6211\u4eec\u4e0d\u9700\u8981\u7279\u5b9a\u7684\u6587\u6863\u6570\u636e\u5e93\uff0c\u56e0\u6b64\u9009\u62e9\u4e86PostgreSQL\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/23-0.png\" alt=\"2017-11-22_105828.png\" \/><\/div>\n<p>Kong\u7684\u914d\u7f6e\u662f\u5c5e\u4e8e\u6700\u8fd1\u5e38\u89c1\u7684\u65b9\u5f0f\uff0c\u5176\u4e0e\u7528\u6237\uff08API\u5ba2\u6237\u7aef\uff09\u8bbf\u95ee\u7684\u6a21\u5757\u4f4d\u4e8e\u540c\u4e00\u5730\u65b9\uff0c\u53ea\u662f\u7aef\u53e3\u4e0d\u540c\u800c\u5df2\u3002\u8fd9\u6837\u505a\u4f1a\u6709\u56f0\u6270\u7684\u5730\u65b9\uff0c\u56e0\u4e3aKong\u662f\u88ab\u7528\u6237\uff08API\u5ba2\u6237\u7aef\uff09\u8bbf\u95ee\u7684\uff0c\u4e0d\u5f97\u4e0d\u653e\u7f6e\u4e8eDMZ\uff0c\u53ef\u80fd\u4f1a\u7ed9\u7f51\u7edc\u7ba1\u7406\u5458\u5e26\u6765\u56f0\u6270\u3002\u7531\u4e8e\u7aef\u53e3\u4e0d\u540c\uff0c\u6240\u4ee5\u9700\u8981\u52aa\u529b\u914d\u7f6e\u9632\u706b\u5899\uff0c\u4e0d\u8fc7Kong\u7684\u7ba1\u7406\u529f\u80fd\u53ef\u80fd\u4f1a\u66b4\u9732\u5728\u5916\u90e8\uff0c\u6709\u70b9\u4e0d\u8212\u670d\u3002\u4e0d\u8fc7\u5728\u672a\u6765\u7684Kong\u7248\u672c\u4e2d\u53ef\u80fd\u4f1a\u8fdb\u884c\u5206\u79bb\u3002<\/p>\n<p>\u9ed8\u8ba4\u7aef\u53e3\u662f\u7528\u6237\uff08API\u5ba2\u6237\u7aef\uff09\u4f7f\u7528\u7684\u53f7\u7801\u4e3a8000\uff08http\uff09\u548c8443\uff08https\uff09\uff0c\u7ba1\u7406\u5458\u4f7f\u7528\u7684\u53f7\u7801\u662f8001\uff08http\uff09\u548c8444\uff08https\uff09\u3002\u8fd9\u4e9b\u7aef\u53e3\u53f7\u53ef\u4ee5\u901a\u8fc7Kong\u7684\u8bbe\u7f6e\u8fdb\u884c\u66f4\u6539\uff0c\u4f46\u5728\u672c\u6587\u4e2d\u4e3a\u4e86\u65b9\u4fbf\u8d77\u89c1\uff0c\u6211\u4eec\u5c06\u7ee7\u7eed\u4f7f\u7528\u9ed8\u8ba4\u8bbe\u7f6e\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u7528\u6237\uff08API\u5ba2\u6237\u7aef\uff09\u7684\u8bf7\u6c42\u5c06\u901a\u8fc7\u7aef\u53e38000\u8bbf\u95eeAPI\u3002<\/p>\n<h3>Kong\u7684\u5b89\u88c5<\/h3>\n<p>\u5c3d\u7ba1\u524d\u9762\u7684\u8bdd\u6709\u70b9\u957f\uff08\u7b2c\u4e8c\u6b21\uff09\uff0c\u4f46\u7ec8\u4e8e\u53ef\u4ee5\u5f00\u59cb\u5b89\u88c5\u4e86\u3002\u5982\u679c\u60f3\u67e5\u770b\u5b98\u65b9\u7684\u5b89\u88c5\u6b65\u9aa4\uff0c\u8bf7\u70b9\u51fb\u8fd9\u91cc\u3002\u5bf9\u90a3\u4e9b\u60f3\u5feb\u901f\u642d\u5efa\u4e09\u884c\u5c31\u884c\u7684\u4eba\uff0c\u53ef\u4ee5\u4f7f\u7528Docker\u63d0\u4f9b\u7684\u65b9\u5f0f\u3002<\/p>\n<ul class=\"post-ul\">PostgreSQL\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/ul>\n<p>PostgreSQL\u7684\u5b89\u88c5\u672c\u8eab\u4e0e\u666e\u901a\u5b89\u88c5\u6ca1\u6709\u4efb\u4f55\u533a\u522b\u3002\u7531\u4e8e\u6211\u662fMySQL\u7528\u6237\uff0c\u6240\u4ee5\u5bf9\u4e8e\u8be6\u7ec6\u7684\u8bbe\u7f6e\uff08\u7279\u522b\u662f\u6743\u9650\u65b9\u9762\uff09\u5e76\u4e0d\u592a\u4e86\u89e3\uff0c\u6240\u4ee5\u53ef\u80fd\u4f1a\u6bd4\u8f83\u968f\u610f\u3002\u5982\u679c\u60a8\u719f\u6089PostgreSQL\uff0c\u90a3\u4e48\u8bf7\u5408\u7406\u5730\u8fdb\u884c\u8bbe\u7f6e\u5373\u53ef\u3002<\/p>\n<p>\u4ece\u8fd9\u4e2a\u94fe\u63a5\u4e0b\u8f7dRPM\u6765\u83b7\u53d6\u4e8c\u8fdb\u5236\u6587\u4ef6\u3002\u5728\u8fd9\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u9009\u62e9\u4e869.6\u7248\u672c\uff0c\u6ca1\u6709\u7279\u522b\u6df1\u5165\u7684\u539f\u56e0\u3002\u7531\u4e8e\u4e0d\u592a\u6e05\u695a\u5e94\u8be5\u5b89\u88c5\u54ea\u4e2aRPM\u6587\u4ef6\uff0c\u6240\u4ee5\u6211\u53ea\u5b89\u88c5\u4e86\u9664\u4e86-devel\u4ee5\u5916\u7684\u90e8\u5206\uff0c\u770b\u8d77\u6765\u53ea\u9700\u8981\u5b89\u88c5\u4e3b\u4f53\u548c\u670d\u52a1\u5668\u5c31\u8db3\u591f\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>yum <span class=\"nb\">install <\/span>pgdg-centos96-9.6-3.noarch.rpm\r\n<span class=\"nv\">$ <\/span>yum <span class=\"nb\">install <\/span>postgresql96 postgresql96-server postgresql96-libs postgresql96-contrib\r\n<span class=\"nv\">$ <\/span>\/usr\/pgsql-9.6\/bin\/postgresql96-setup initdb\r\n<\/code><\/pre>\n<p>\u6211\u4e5f\u4f1a\u8bbe\u7f6e\u6570\u636e\u5e93\u7684\u6743\u9650\u3002\u7531\u4e8ePostgreSQL\u53ea\u80fd\u4eceKong\u672c\u4f53\u8bbf\u95ee\uff0c\u6240\u4ee5\u53ea\u9700\u8981\u5728localhost(127.0.0.1)\u4e0a\u8fdb\u884c\u5373\u53ef\uff1b\u4f46\u662f\u4e3a\u4e86\u65b9\u4fbf\uff0c\u5728\u672c\u6587\u4e2d\u6211\u5c06\u65e0\u9650\u5236\u5730\u8ba9\u5176\u5b83\u4eba\u53ef\u4ee5\u67e5\u770b\u6570\u636e\u5e93\u5185\u5bb9\u3002\u6b64\u5916\uff0c\u6211\u5e0c\u671b\u8bbe\u7f6e\u4e00\u4e2a\u5e26\u5bc6\u7801\u7684\u8ba4\u8bc1\u65b9\u5f0f(md5)\uff0c\u4f46\u662f\u7531\u4e8e\u65e0\u6cd5\u505c\u6b62\u4e0e\u64cd\u4f5c\u7cfb\u7edf\u7528\u6237\u7684\u7ed1\u5b9a\uff0c\u6211\u653e\u5f03\u4e86\u8fd9\u4e2a\u60f3\u6cd5(trust)\u3002<\/p>\n<pre class=\"post-pre\"><code># IPv4 local connections:\r\n-host    all             all             127.0.0.1\/32            ident\r\n# IPv4 local connections:\r\n+host    all             all             0.0.0.0\/0               trust\r\n<\/code><\/pre>\n<p>\u6b64\u5916\uff0c\u5728PostgreSQL\u4e2d\uff0c\u9ed8\u8ba4\u53ea\u76d1\u542clocalhost\uff0c\u56e0\u6b64\u4e5f\u9700\u8981\u5c06\u5176\u66f4\u6539\u4e3a\u5176\u4ed6\u503c\u3002<\/p>\n<pre class=\"post-pre\"><code># - Connection Settings -\r\n-#listen_addresses = 'localhost'\r\n# - Connection Settings -\r\n+listen_addresses = '*'\r\n<\/code><\/pre>\n<p>\u4f60\u53ef\u4ee5\u7528\u8fd9\u4e2a\u6765\u542f\u52a8\u670d\u52a1\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>systemctl <span class=\"nb\">enable <\/span>postgresql-9.6\r\n<span class=\"nv\">$ <\/span>systemctl start postgresql-9.6\r\n<\/code><\/pre>\n<p>\u6211\u5c06\u521b\u5efa\u4e00\u4e2a\u4e0eKong\u8fde\u63a5\u7684PostgreSQL\u7528\u6237\uff1akong\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"err\">$<\/span> <span class=\"n\">psql<\/span> <span class=\"o\">-<\/span><span class=\"n\">U<\/span> <span class=\"n\">postgres<\/span>\r\n<span class=\"n\">postgres<\/span><span class=\"o\">=#<\/span> <span class=\"k\">CREATE<\/span> <span class=\"k\">USER<\/span> <span class=\"n\">kong<\/span><span class=\"p\">;<\/span> <span class=\"k\">CREATE<\/span> <span class=\"k\">DATABASE<\/span> <span class=\"n\">kong<\/span> <span class=\"k\">OWNER<\/span> <span class=\"n\">kong<\/span><span class=\"p\">;<\/span>\r\n<span class=\"n\">postgres<\/span><span class=\"o\">=#<\/span> <span class=\"err\">\\<\/span><span class=\"n\">l<\/span>\r\n   <span class=\"n\">Name<\/span>    <span class=\"o\">|<\/span>  <span class=\"k\">Owner<\/span>   <span class=\"o\">|<\/span> <span class=\"k\">Encoding<\/span> <span class=\"o\">|<\/span>   <span class=\"k\">Collate<\/span>   <span class=\"o\">|<\/span>    <span class=\"n\">Ctype<\/span>    <span class=\"o\">|<\/span>   <span class=\"k\">Access<\/span> <span class=\"k\">privileges<\/span>\r\n<span class=\"c1\">-----------+----------+----------+-------------+-------------+-----------------------<\/span>\r\n <span class=\"n\">kong<\/span>      <span class=\"o\">|<\/span> <span class=\"n\">kong<\/span>     <span class=\"o\">|<\/span> <span class=\"n\">UTF8<\/span>     <span class=\"o\">|<\/span> <span class=\"n\">en_US<\/span><span class=\"p\">.<\/span><span class=\"n\">UTF<\/span><span class=\"o\">-<\/span><span class=\"mi\">8<\/span> <span class=\"o\">|<\/span> <span class=\"n\">en_US<\/span><span class=\"p\">.<\/span><span class=\"n\">UTF<\/span><span class=\"o\">-<\/span><span class=\"mi\">8<\/span> <span class=\"o\">|<\/span>\r\n <span class=\"n\">postgres<\/span>  <span class=\"o\">|<\/span> <span class=\"n\">postgres<\/span> <span class=\"o\">|<\/span> <span class=\"n\">UTF8<\/span>     <span class=\"o\">|<\/span> <span class=\"n\">en_US<\/span><span class=\"p\">.<\/span><span class=\"n\">UTF<\/span><span class=\"o\">-<\/span><span class=\"mi\">8<\/span> <span class=\"o\">|<\/span> <span class=\"n\">en_US<\/span><span class=\"p\">.<\/span><span class=\"n\">UTF<\/span><span class=\"o\">-<\/span><span class=\"mi\">8<\/span> <span class=\"o\">|<\/span>\r\n <span class=\"n\">template0<\/span> <span class=\"o\">|<\/span> <span class=\"n\">postgres<\/span> <span class=\"o\">|<\/span> <span class=\"n\">UTF8<\/span>     <span class=\"o\">|<\/span> <span class=\"n\">en_US<\/span><span class=\"p\">.<\/span><span class=\"n\">UTF<\/span><span class=\"o\">-<\/span><span class=\"mi\">8<\/span> <span class=\"o\">|<\/span> <span class=\"n\">en_US<\/span><span class=\"p\">.<\/span><span class=\"n\">UTF<\/span><span class=\"o\">-<\/span><span class=\"mi\">8<\/span> <span class=\"o\">|<\/span> <span class=\"o\">=<\/span><span class=\"k\">c<\/span><span class=\"o\">\/<\/span><span class=\"n\">postgres<\/span>          <span class=\"o\">+<\/span>\r\n           <span class=\"o\">|<\/span>          <span class=\"o\">|<\/span>          <span class=\"o\">|<\/span>             <span class=\"o\">|<\/span>             <span class=\"o\">|<\/span> <span class=\"n\">postgres<\/span><span class=\"o\">=<\/span><span class=\"n\">CTc<\/span><span class=\"o\">\/<\/span><span class=\"n\">postgres<\/span>\r\n <span class=\"n\">template1<\/span> <span class=\"o\">|<\/span> <span class=\"n\">postgres<\/span> <span class=\"o\">|<\/span> <span class=\"n\">UTF8<\/span>     <span class=\"o\">|<\/span> <span class=\"n\">en_US<\/span><span class=\"p\">.<\/span><span class=\"n\">UTF<\/span><span class=\"o\">-<\/span><span class=\"mi\">8<\/span> <span class=\"o\">|<\/span> <span class=\"n\">en_US<\/span><span class=\"p\">.<\/span><span class=\"n\">UTF<\/span><span class=\"o\">-<\/span><span class=\"mi\">8<\/span> <span class=\"o\">|<\/span> <span class=\"o\">=<\/span><span class=\"k\">c<\/span><span class=\"o\">\/<\/span><span class=\"n\">postgres<\/span>          <span class=\"o\">+<\/span>\r\n           <span class=\"o\">|<\/span>          <span class=\"o\">|<\/span>          <span class=\"o\">|<\/span>             <span class=\"o\">|<\/span>             <span class=\"o\">|<\/span> <span class=\"n\">postgres<\/span><span class=\"o\">=<\/span><span class=\"n\">CTc<\/span><span class=\"o\">\/<\/span><span class=\"n\">postgres<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">Kong\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/ul>\n<p>\u4ece Kong \u5b89\u88c5\u9875\u9762\u4e0b\u8f7d RPM\u3002\u5728\u672c\u6587\u4e2d\uff0c\u6211\u4eec\u9009\u62e9\u4e86 CentOS7 \u7248\u672c\u3002\u622a\u81f32017\u5e7412\u6708\uff0cKong \u7684\u7248\u672c\u4e3a 0.11.1\u3002\u4e0b\u8f7d\u540e\u53ea\u9700\u6267\u884c yum \u5b89\u88c5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>yum <span class=\"nb\">install <\/span>kong-community-edition-0.11.1.el7.noarch.rpm\r\n<\/code><\/pre>\n<p>\u7531\u65bc\u5df2\u5c07\u6578\u64da\u5eab\u914d\u7f6e\u70ba\u4f7f\u7528Kong\u7684\u9ed8\u8a8d\u914d\u7f6e\uff0c\u56e0\u6b64\u60a8\u73fe\u5728\u53ef\u4ee5\u555f\u52d5Kong\uff0c\u4f46\u5982\u679c\u66f4\u6539\u4e86PostgreSQL\u7684\u7528\u6236\u540d\u6216\u8a2d\u7f6e\u4e86\u5bc6\u78bc\uff0c\u5247\u9700\u8981\u4fee\u6539Kong\u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<p>Kong \u7684\u914d\u7f6e\u6587\u4ef6\u5b9e\u9645\u4e0a\u4e0d\u662f\u9ed8\u8ba4\u7684\uff0c\u56e0\u6b64\u5b83\u5c06\u4f7f\u7528\u6240\u6709\u9ed8\u8ba4\u503c\uff08\u800c\u4e0d\u662f\u9519\u8bef\uff09\u3002\u56e0\u6b64\uff0c\u5982\u679c\u8981\u66f4\u6539\u914d\u7f6e\uff0c\u8bf7\u590d\u5236\u6a21\u677f\u6587\u4ef6\uff08\/etc\/kong\/kong.conf.default\uff09\u3002\u914d\u7f6e\u6587\u4ef6\u5e94\u8be5\u653e\u5728 \/etc\/kong\/kong.conf \u4e2d\uff08\u5728 Kong \u7684\u542f\u52a8\u9009\u9879\u4e2d\uff0c\u53ef\u4ee5\u6307\u5b9a\u8def\u5f84\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">cp<\/span> \/etc\/kong\/kong.conf.default \/etc\/kong\/kong.conf\r\n<\/code><\/pre>\n<p>\u8bf7\u67e5\u770b\u6587\u6863\u4ee5\u4e86\u89e3Kong\u914d\u7f6e\u6587\u4ef6\u7684\u8bf4\u660e\u3002\u5173\u4e8e\u8fde\u63a5\u5230PostgreSQL\u7684\u914d\u7f6e\uff0c\u8bf7\u8bbe\u7f6e\u4ee5\u4e0b\u503c\u5373\u53ef\u3002<\/p>\n<pre class=\"post-pre\"><code>database = postgres\r\npg_host = ...\r\npg_port = ...\r\npg_user = ...\r\npg_password = ...\r\npg_database = ...\r\n<\/code><\/pre>\n<p>\u8fc1\u79fb\u5b8c\u6210\u540e\uff0c\u542f\u52a8\u670d\u52a1\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>kong migrations up\r\n<span class=\"nv\">$ <\/span>kong start\r\n<\/code><\/pre>\n<p>\u5982\u679c\u8981\u6307\u5b9aKong\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u5219\u9700\u8981\u5728\u9009\u9879\u4e2d\u52a0\u5165 -c (\u914d\u7f6e\u6587\u4ef6\u7684\u8def\u5f84)\u3002\u987a\u4fbf\u63d0\u4e00\u4e0b\uff0c\u4f7f\u7528kong stop\u547d\u4ee4\u53ef\u4ee5\u505c\u6b62Kong\uff0c\u4f7f\u7528kong restart\u547d\u4ee4\u53ef\u4ee5\u91cd\u65b0\u542f\u52a8\u3002<\/p>\n<ul class=\"post-ul\">Kong\u306e\u8d77\u52d5\u3092\u78ba\u8a8d\u3092\u3059\u308b<\/ul>\n<p>\u6211\u5c06\u4f7f\u7528curl\u6765\u6d4b\u8bd5\u3002\u7aef\u53e3\u7528\u4e8e\u7ba1\u7406\uff0c\u6240\u4ee5\u662f8001\u3002\u4f1a\u51fa\u73b0\u4e00\u4e9b\u8f83\u957f\u7684JSON\u683c\u5f0f\u7684\u5185\u5bb9\uff08\u662fKong\u7684\u914d\u7f6e\u4fe1\u606f\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>curl <span class=\"nt\">-X<\/span> GET http:\/\/127.0.0.1:8001\r\n<span class=\"o\">{<\/span><span class=\"s2\">\"version\"<\/span>:<span class=\"s2\">\"0.11.1\"<\/span>,<span class=\"s2\">\"plugins\"<\/span>: ...<span class=\"o\">(<\/span>\u8d85\u9577\u3044<span class=\"o\">)<\/span>...\r\n<\/code><\/pre>\n<p>Kong\u5b89\u88c5\u5b8c\u6210\u4e86\u3002<\/p>\n<h2>\u5e94\u7528\u7a0b\u5e8f\u7f16\u7a0b\u63a5\u53e3\u670d\u52a1\u5668\u3002<\/h2>\n<p>\u6211\u4eec\u4e5f\u51c6\u5907\u4e86\u4e00\u4e2a\u5728Kong\u4e0a\u8fdb\u884c\u9632\u5fa1\u7684API\u3002\u6211\u4eec\u671f\u671b\u8fd9\u4e2aAPI\u80fd\u591f\u5728API Gateway\u4e0a\u8fdb\u884c\u9632\u5fa1\uff0c\u5e76\u4e14\u5728\u6ca1\u6709\u4efb\u4f55\u8bbf\u95ee\u9650\u5236\u7684\u865a\u5047\u5e94\u7528\u7a0b\u5e8f\u4e2d\u4f7f\u7528\u3002\u8fd9\u4e2aAPI\u7684\u5185\u5bb9\u53ea\u662f\u4e00\u4e2a\u5728Apache\u670d\u52a1\u5668\u4e0a\u8fd0\u884c\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u4ec5\u4ec5\u8fd4\u56de\u4e00\u4e2a\u7b80\u5355\u7684JSON\u5bf9\u8c61\uff0c\u751a\u81f3\u53ea\u662f\u7b80\u5355\u7684\u9759\u6001\u5185\u5bb9\uff08plain\/text\uff09\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/57-0.png\" alt=\"2017-11-15_123957.png\" \/><\/div>\n<p>\u6211\u8bbe\u7f6e\u4e86\u4ee5\u4e0b\u7ec8\u7aef\u70b9\u3002\u5178\u578b\u7684\u7684API\u901a\u5e38\u8fdb\u884cCRUD\u64cd\u4f5c\uff0c\u56e0\u6b64\u6211\u51c6\u5907\u4e86\u56db\u4e2a\u7ec8\u7aef\u70b9\u3002\u5176\u4e2d\u7684\u201c\u5141\u8bb8\u7684\u65b9\u6cd5\u201d\u8868\u793a\u4f5c\u4e3aAPI\uff0c\u53ea\u5141\u8bb8\u4f7f\u7528\u8be5\u65b9\u6cd5\uff0c\u5373\u4f7f\u6743\u9650\u53d7\u9650\uff0c\u4ec0\u4e48\u4e5f\u4e0d\u505a\uff08\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cApache\u4e0d\u5141\u8bb8\u4f7f\u7528PUT\u548cDELETE\u65b9\u6cd5\uff09\u3002<\/p>\n<div>\n<div class=\"post-table\">\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8URL\u8a31\u53ef\u3059\u308b\u4e88\u5b9a\u306e\u30e1\u30bd\u30c3\u30c9\u8aac\u660e<a class=\"autolink\" href=\"http:\/\/172.26.22.66\/r\/\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/172.26.22.66\/r\/<\/a>GET\u4f55\u304b\u3092READ\u3059\u308b\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8<a class=\"autolink\" href=\"http:\/\/172.26.22.66\/c\/\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/172.26.22.66\/c\/<\/a>POST\u4f55\u304b\u3092CREATE\u3059\u308b\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8<a class=\"autolink\" href=\"http:\/\/172.26.22.66\/u\/\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/172.26.22.66\/u\/<\/a>PUT\u4f55\u304b\u3092UPDATE\u3059\u308b\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8<a class=\"autolink\" href=\"http:\/\/172.26.22.66\/d\/\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/172.26.22.66\/d\/<\/a>DELETE\u4f55\u304b\u3092DELETE\u3059\u308b\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8<\/div>\n<\/div>\n<p>\u6211\u4eec\u8bd5\u8bd5\u770b\uff0c\u5373\u4f7f\u662f\u8fd9\u6837\u7684API\uff0cKong\u662f\u5426\u80fd\u591f\u6b63\u786e\u5730\u8fdb\u884c\u8bbf\u95ee\u9650\u5236\u3002<\/p>\n<h2>API\u5ba2\u6237\u7aef<\/h2>\n<p>\u6839\u636e\u4e4b\u524d\u63cf\u8ff0\u7684\u4e00\u822c\u7ed3\u6784\uff0cAPI\u5ba2\u6237\u7aef\u53ef\u4ee5\u662fWeb\u5e94\u7528\u7a0b\u5e8f\uff0c\u4f46\u5728\u8fd9\u7bc7\u6587\u7ae0\u4e2d\u9009\u62e9\u4e86Windows\u5e94\u7528\u7a0b\u5e8f\u3002\u5728OAuth2.0\u7684\u80cc\u666f\u4e0b\uff0c\u667a\u80fd\u624b\u673a\u5e94\u7528\u7a0b\u5e8f\u4e5f\u662f\u672c\u5730\u5e94\u7528\u7a0b\u5e8f\uff0c\u56e0\u6b64\u5728Windows\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\u65b9\u6cd5\u548c\u601d\u8def\u4e0e\u667a\u80fd\u624b\u673a\u5e94\u7528\u7a0b\u5e8f\u5b8c\u5168\u76f8\u540c\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/63-0.png\" alt=\"2017-11-15_163614.png\" \/><\/div>\n<p>\u8fd9\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u5de6\u4fa7\u8868\u5355\uff0c\u5c06API\u7684\u7aef\u70b9URL\u6307\u5b9a\u5728\u9876\u90e8\uff0c\u5f53\u6309\u4e0b\u201c\u53d1\u9001\u201d\u6309\u94ae\u65f6\uff0c\u5b83\u4f1a\u8bbf\u95ee\u8be5\u7aef\u70b9\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u6587\u672c\u6846\uff0c\u76f4\u63a5\u8f93\u51faAPI\u7684\u54cd\u5e94\u3002\u8bf7\u5c06\u5176\u60f3\u8c61\u6210\u4e00\u4e2a\u624b\u673a\u5e94\u7528\u7a0b\u5e8f\u7684\u5c4f\u5e55\u3002\u53f3\u4fa7\u7684\u65e0\u6a21\u6001\u5bf9\u8bdd\u6846\u662f\u7528\u4e8e\u8f93\u5165OP\uff08=Keycloak\uff09\u914d\u7f6e\u7684\u5c4f\u5e55\uff0c\u5b9e\u9645\u4e0a\u4e0d\u662f\u8981\u6c42\u7528\u6237\u8f93\u5165\u7684\u9879\u76ee\u3002\u56e0\u6b64\uff0c\u5b83\u88ab\u79fb\u81f3\u53f3\u4fa7\u663e\u793a\u3002\u8fd9\u4e2a\u5e94\u7528\u7a0b\u5e8f\u662f\u4e3a\u4e86\u6d4b\u8bd5\u800c\u53ef\u8f93\u5165\u7684\uff08\u5c3d\u7ba1\u8f93\u5165\u9879\u76ee\u4e0d\u591a\uff09\uff0c\u5b9e\u9645\u4e0a\u7684\u8bbe\u7f6e\u662f\u5728\u5b89\u88c5\u65f6\u6216\u8005\u5e94\u7528\u7a0b\u5e8f\u4e2d\u786c\u7f16\u7801\u7684\uff0c\u7136\u540e\u5e94\u7528\u5230\u5e94\u7528\u7a0b\u5e8f\u4e2d\u3002<\/p>\n<p>\u7b80\u8981\u89e3\u91ca\u4e86\u8fd9\u4e2a\u81ea\u5236\u5e94\u7528\u7a0b\u5e8f\u7684\u64cd\u4f5c\u65b9\u5f0f\u3002\u5f53\u8bbf\u95eeAPI\u65f6\u8fd4\u56de401\uff08\u672a\u6388\u6743\uff09\u65f6\uff0c\u5b83\u5c06\u5f00\u59cb\u5411OP\u8bf7\u6c42\u6388\u6743\u7801\u6d41\u7a0b\u3002\u4e00\u65e6\u4eceOP\u83b7\u53d6\u5230\u6388\u6743\u7801\u5e76\u83b7\u5f97\u8bbf\u95ee\u4ee4\u724c\uff0c\u5b83\u5c06\u518d\u6b21\u9644\u52a0\u8bbf\u95ee\u4ee4\u724c\u5e76\u8bbf\u95eeAPI\u3002\u5982\u679c\u4e0d\u662f401\uff08\u672a\u6388\u6743\uff09\uff0c\u5b83\u53ea\u4f1a\u5c06API\u7684\u54cd\u5e94\u663e\u793a\u5728\u663e\u793a\u533a\u57df\uff08\u8868\u5355\u4e0b\u65b9\u7684\u6587\u672c\u6846\uff09\u4e2d\u3002\u7531\u4e8e\u65e0\u6cd5\u5728\u8fd9\u7bc7\u6587\u7ae0\u4e2d\u5b8c\u6574\u89e3\u91ca\u6388\u6743\u7801\u6d41\u7a0b\uff0c\u8bf7\u53c2\u9605\u4e24\u5929\u524d\u7684\u67d0\u7bc7\u6587\u7ae0\u3002<\/p>\n<p>\u4f5c\u4e3a\u6b64\u5e94\u7528\u7a0b\u5e8f\u7684\u529f\u80fd\u9a8c\u8bc1\uff0c\u6211\u4eec\u5c06\u76f4\u63a5\u8bbf\u95eeAPI\uff08http:\/\/172.26.22.66\/r\/\uff09\u3002\u76ee\u524d\u6682\u65f6\u7701\u7565\u53f3\u4fa7\u7a97\u53e3\u7684\u76f8\u5173\u5185\u5bb9\u3002\u4ece\u4e0b\u9762\u6211\u4eec\u53ef\u4ee5\u770b\u5230\uff0c\u7b2c\u4e00\u884c\u663e\u793a\u72b6\u6001\u7801\uff0c\u7b2c\u4e8c\u884c\u53ca\u4e4b\u540e\u663e\u793a\u54cd\u5e94\u4e3b\u4f53\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/67-0.png\" alt=\"2017-11-15_175046.png\" \/><\/div>\n<p>\u6211\u4e5f\u4f1a\u5c1d\u8bd5\u901a\u8fc7POST\u8bf7\u6c42\u3002\u7531\u4e8eAPI\u6ca1\u6709\u8fdb\u884c\u4efb\u4f55\u9632\u5fa1\u63aa\u65bd\uff0c\u6240\u4ee5\u8fd4\u56de\u7684\u5185\u5bb9\u4e0eGET\u8bf7\u6c42\u5b8c\u5168\u76f8\u540c\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/69-0.png\" alt=\"2017-11-15_175403.png\" \/><\/div>\n<h2>Keycloak\uff08OP\uff09\u7684\u914d\u7f6e<\/h2>\n<p>\u7531\u4e8eAPI\u5ba2\u6237\u7aef\u4e5f\u662fOAuth2.0\u5ba2\u6237\u7aef\uff0c\u56e0\u6b64\u9700\u8981\u5728Keycloak\u4e2d\u8fdb\u884c\u914d\u7f6e\u3002\u5df2\u521b\u5efa\u5ba2\u6237\u7aefID\u4e3a&#8221;kong&#8221;\u3002\u5176\u4ed6\u53c2\u6570\u8bbe\u7f6e\u5982\u4e0b\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/72-1.png\" alt=\"2017-11-16_104039.png\" \/><\/div>\n<p>\u6709\u4e00\u70b9\u9700\u8981\u6ce8\u610f\uff0c\u91cd\u5b9a\u5411URI\u5df2\u8bbe\u7f6e\u4e3ahttp:\/\/localhost\u3002\u5f53\u7136\uff0c\u7531\u4e8e\u6ca1\u6709\u5c06Web\u670d\u52a1\u5668\u5b89\u88c5\u5728\u6267\u884cAPI\u5ba2\u6237\u7aef\u7684Windows PC\u4e0a\uff0c\u56e0\u6b64\u4e0d\u5b58\u5728\u91cd\u5b9a\u5411\u76ee\u6807\u3002\u7a0d\u540e\u5c06\u5bf9\u6b64\u8fdb\u884c\u8bf4\u660e\u3002<\/p>\n<h2>\u6574\u7406\u73af\u5883<\/h2>\n<p>\u73af\u5883\u5df2\u7ecf\u8bbe\u7f6e\u5b8c\u6210\uff0c\u4f46\u7531\u4e8e\u6d89\u53ca\u5230\u56db\u4e2a\u89d2\u8272\u7684\u590d\u6742\u6027\uff0c\u6211\u4f1a\u6574\u7406\u4e00\u4e0b\u670d\u52a1\u5668\u4fe1\u606f\u3002<\/p>\n<div>\n<div class=\"post-table\">\u30b5\u30fc\u30d0\u30fc\u540d\u5f79\u5272\u63a5\u7d9a\u5148URLAPI\u30b5\u30fc\u30d0\u30fcAPI\u63d0\u4f9b<a class=\"autolink\" href=\"http:\/\/172.26.22.66\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/172.26.22.66<\/a>KongAPI Gateway<a class=\"autolink\" href=\"http:\/\/127.26.22.29:8000\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/127.26.22.29:8000<\/a>KeycloakOP<a class=\"autolink\" href=\"http:\/\/172.26.22.5\/auth\/realms\/master\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/172.26.22.5\/auth\/realms\/master<\/a>Windows\u30a2\u30d7\u30eaAPI\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u81ea\u5206\u306ePC<\/div>\n<\/div>\n<h1>\u6211\u5728Kong\u4e0a\u5c1d\u8bd5\u8fdb\u884c\u9632\u5fa1<\/h1>\n<h2>\u53ea\u6709\u7b80\u5355\u7684\u4ee3\u7406\uff08\u5c1a\u65e0\u9632\u5fa1\uff09<\/h2>\n<p>\u7ec8\u4e8e\u5230\u8fbe\u4e86Kong\u7684\u914d\u7f6e\u3002\u9996\u5148\uff0c\u53ea\u5c1d\u8bd5\u8bbe\u7f6eAPI\u4ee3\u7406\u3002\u7531\u4e8eKong\u6ca1\u6709\u7ba1\u7406\u754c\u9762\uff0c\u53ea\u80fd\u901a\u8fc7curl\u76f4\u63a5\u8c03\u7528REST API\u3002\u7ba1\u7406\u754c\u9762\u5c06\u6765\u53ef\u80fd\u4f1a\u88ab\u5b9e\u73b0\uff08\u4f01\u4e1a\u7248\u4e2d\u6709\uff09\u3002<\/p>\n<p>\u6211\u8981\u5728Kong\u4e0a\u6ce8\u518cAPI\u3002\u6211\u60f3\u8981\u7684\u8bbe\u7f6e\u662f\u4f7f\u7528\u4ee3\u7406\u5c06http:\/\/172.26.22.29:8000\/r\/\u91cd\u5b9a\u5411\u5230http:\/\/172.26.22.66\/r\/\uff0c\u5e76\u4e14\u53ea\u5141\u8bb8\u4f7f\u7528GET\u65b9\u6cd5\u3002\uff08\u203b\u6211\u5df2\u7ecf\u5bf9\u54cd\u5e94\u4f53\u7684JSON\u8fdb\u884c\u4e86\u683c\u5f0f\u5316\uff0c\u4ee5\u4fbf\u4e8e\u9605\u8bfb\uff09<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>curl <span class=\"nt\">-i<\/span> <span class=\"nt\">-X<\/span> POST <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--data<\/span> <span class=\"s2\">\"name=myapi-read\"<\/span> <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--data<\/span> <span class=\"s2\">\"hosts=172.26.22.29\"<\/span>\r\n  <span class=\"nt\">--data<\/span> <span class=\"s2\">\"upstream_url=http:\/\/172.26.22.66\/r\"<\/span> <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--data<\/span> <span class=\"s2\">\"uris=\/r\"<\/span> <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--data<\/span> <span class=\"s2\">\"methods=GET\"<\/span> <span class=\"se\">\\<\/span>\r\n  http:\/\/172.26.22.29:8001\/apis\r\n\r\nHTTP\/1.1 201 Created\r\nDate: Wed, 15 Nov 2017 09:07:24 GMT\r\nContent-Type: application\/json<span class=\"p\">;<\/span> <span class=\"nv\">charset<\/span><span class=\"o\">=<\/span>utf-8\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nAccess-Control-Allow-Origin: <span class=\"k\">*<\/span>\r\nServer: kong\/0.11.1\r\n\r\n<span class=\"o\">{<\/span>\r\n    <span class=\"s2\">\"created_at\"<\/span>: 1510736844046,\r\n    <span class=\"s2\">\"strip_uri\"<\/span>: <span class=\"nb\">true<\/span>,\r\n    <span class=\"s2\">\"id\"<\/span>: <span class=\"s2\">\"3d4772a4-9826-4691-8809-ccbc9f62a831\"<\/span>,\r\n    <span class=\"s2\">\"hosts\"<\/span>: <span class=\"o\">[<\/span>\r\n        <span class=\"s2\">\"172.26.22.29\"<\/span>\r\n    <span class=\"o\">]<\/span>,\r\n    <span class=\"s2\">\"name\"<\/span>: <span class=\"s2\">\"myapi-read\"<\/span>,\r\n    <span class=\"s2\">\"methods\"<\/span>: <span class=\"o\">[<\/span>\r\n        <span class=\"s2\">\"GET\"<\/span>\r\n    <span class=\"o\">]<\/span>,\r\n    <span class=\"s2\">\"http_if_terminated\"<\/span>: <span class=\"nb\">false<\/span>,\r\n    <span class=\"s2\">\"preserve_host\"<\/span>: <span class=\"nb\">false<\/span>,\r\n    <span class=\"s2\">\"upstream_url\"<\/span>: <span class=\"s2\">\"http:\/\/172.26.22.66\/r\"<\/span>,\r\n    <span class=\"s2\">\"uris\"<\/span>: <span class=\"o\">[<\/span>\r\n        <span class=\"s2\">\"\/r\"<\/span>\r\n    <span class=\"o\">]<\/span>,\r\n    <span class=\"s2\">\"upstream_send_timeout\"<\/span>: 60000,\r\n    <span class=\"s2\">\"upstream_connect_timeout\"<\/span>: 60000,\r\n    <span class=\"s2\">\"upstream_read_timeout\"<\/span>: 60000,\r\n    <span class=\"s2\">\"retries\"<\/span>: 5,\r\n    <span class=\"s2\">\"https_only\"<\/span>: <span class=\"nb\">false<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u89c9\u5f97Kong\u7684\u7ba1\u7406\u5458\u8ba4\u8bc1\u5c1a\u672a\u5b9e\u73b0\uff0c\u4f46\u8fdf\u65e9\u4f1a\u6709\u7684\u3002\u53c2\u6570\u6709\u70b9\u513f\u7279\u6b8a\u3002<\/p>\n<div>\n<div class=\"post-table\">\u30ea\u30af\u30a8\u30b9\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u540d\u8aac\u660enameAPI\u306e\u540d\u524d\uff08\u4f55\u3067\u3082\u826f\u3044\uff09upstream_url\u30d7\u30ed\u30ad\u30b7\u30fc\u5148\u306eURLhostsKong\u304c\u53d7\u3051\u3064\u3051\u308b\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u306eHost\u30d8\u30c3\u30c0\u306e\u5024\u3002\u8907\u6570\u3042\u308b\u5834\u5408\u306f\u30ab\u30f3\u30de\u533a\u5207\u308aurisKong\u304c\u53d7\u3051\u53d6\u308b\u30d1\u30b9methods\u8a31\u53ef\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u3002\u8907\u6570\u3042\u308b\u5834\u5408\u306f\u30ab\u30f3\u30de\u533a\u5207\u308a<\/div>\n<\/div>\n<p>\u7531\u65bcuris\u70ba\u201c\/ r\u201d\uff0c\u56e0\u6b64Kong\u5c07\u5728http:\/\/172.26.22.29:8000\/r\u4e0a\u63a5\u6536\u4e26\u4ee3\u7406\u5230upstream_uri\u7684http:\/\/172.26.22.66\/r\u3002\u6211\u5011\u53ef\u80fd\u6703\u89ba\u5f97\u5947\u602a\u7684\u662fhosts\u7684\u5b58\u5728\u3002\u56e0\u70ba\u6211\u5011\u662f\u767c\u9001\u8acb\u6c42\u7d66Kong\uff0c\u6240\u4ee5Kong\u7684FQDN\u61c9\u8a72\u7b49\u65bcHost\u6a19\u982d\u7684\u503c\uff0c\u9019\u500b\u503c\u7684\u5b58\u5728\u610f\u7fa9\u53ef\u80fd\u4e0d\u592a\u6e05\u695a\u3002\u9019\u53ef\u80fd\u662f\u6307\u985e\u4f3c\u65bcApache\u4e2d\u7684\u865b\u64ec\u4e3b\u6a5f(ServerName)\u7684\u8a2d\u7f6e\u3002<\/p>\n<p>\u73b0\u5728\u6211\u4eec\u6765\u628a\u53e6\u5916\u4e09\u4e2a\u7aef\u70b9\uff08\/c\uff0c\/u\uff0c\/d\uff09\u4e5f\u6ce8\u518c\u5230Kong\u4e2d\u5427\u3002\u5176\u5b9e\u6211\u672c\u6765\u662f\u5e0c\u671b\u5c06Kong\u4e0a\u7684\u8bbe\u7f6e\u90fd\u653e\u5728\u4e00\u4e2aAPI\u4e2d\u7684\uff0c\u4f46\u662f\u5982\u679cURL\u548c\u65b9\u6cd5\u90fd\u4e0d\u540c\u7684\u8bdd\uff0c\u6211\u60f3\u4e0d\u5230\u5982\u4f55\u5c06\u5b83\u4eec\u5408\u5e76\u6210\u4e00\u4e2a\u8bbe\u7f6e\u3002\u4e0d\u8fc7\u5f88\u5feb\u5c31\u4f1a\u6709API\u7ec4\u7684\u5b9e\u73b0\u4e86\u3002\u5c06\u4e09\u4e2acurl\u547d\u4ee4\u6392\u5217\u5728\u4e00\u8d77\u53ea\u4f1a\u8ba9\u4ee3\u7801\u770b\u8d77\u6765\u6df7\u4e71\uff0c\u6240\u4ee5\u6211\u4f1a\u5c06\u8bbe\u7f6e\u653e\u5728\u8868\u683c\u4e2d\u3002<\/p>\n<div>\n<div class=\"post-table\">namehostsurismethodsupstreammyapi-read172.26.22.29\/rGET<a class=\"autolink\" href=\"http:\/\/172.26.22.66\/r\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/172.26.22.66\/r<\/a>myapi-create172.26.22.29\/cPOST<a class=\"autolink\" href=\"http:\/\/172.26.22.66\/c\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/172.26.22.66\/c<\/a>myapi-update172.26.22.29\/uPUT<a class=\"autolink\" href=\"http:\/\/172.26.22.66\/u\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/172.26.22.66\/u<\/a>myapi-delete172.26.22.29\/dDELETE<a class=\"autolink\" href=\"http:\/\/172.26.22.66\/d\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/172.26.22.66\/d<\/a><\/div>\n<\/div>\n<p>\u90a3\u6211\u4eec\u6765\u8bd5\u4e00\u8bd5\u5427\u3002 \u6211\u4eec\u4e0d\u9700\u8981\u53f3\u7a97\u6237\uff0c\u6240\u4ee5\u7701\u7565\u6389\u5b83\u3002<\/p>\n<ul class=\"post-ul\">GET<\/ul>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/89-0.png\" alt=\"2017-11-16_105645.png\" \/><\/div>\n<ul class=\"post-ul\">POST<\/ul>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/91-0.png\" alt=\"2017-11-16_105730.png\" \/><\/div>\n<p>POST\u8bf7\u6c42\u5df2\u7ecf\u88ab\u5f88\u597d\u5730\u9632\u5fa1\u4e86\u3002\u503c\u5f97\u4e00\u63d0\u7684\u662f\uff0c\u72b6\u6001\u7801\u4e3a404\uff08\u672a\u627e\u5230\uff09\u5e76\u4e14\u6b63\u6587\u5185\u5bb9\u4e3a&#8221;no API&#8230;&#8221;\uff0c\u8fd9\u662fKong\u7684\u8bbe\u8ba1\u89c4\u8303\u3002<\/p>\n<p>\u4e3a\u4e86\u90a3\u4e9b\u4e0d\u76f8\u4fe1\u4f60\u5f00\u53d1\u7684\u5e94\u7528\u7a0b\u5e8f\u7684\u4eba\uff0c\u6211\u5c06\u9644\u4e0acurl\u7684\u7ed3\u679c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>curl <span class=\"nt\">-i<\/span> <span class=\"nt\">-X<\/span> GET http:\/\/172.26.22.29:8000\/r\/\r\nHTTP\/1.1 200 OK\r\nContent-Type: text\/html<span class=\"p\">;<\/span> <span class=\"nv\">charset<\/span><span class=\"o\">=<\/span>UTF-8\r\nContent-Length: 15\r\nConnection: keep-alive\r\nDate: Thu, 16 Nov 2017 02:03:34 GMT\r\nServer: Apache\/2.4.25 <span class=\"o\">(<\/span>Unix<span class=\"o\">)<\/span> OpenSSL\/1.0.2k-fips\r\nLast-Modified: Mon, 13 Nov 2017 08:55:41 GMT\r\nETag: <span class=\"s2\">\"f-55dd96f59dd40\"<\/span>\r\nAccept-Ranges: bytes\r\nX-Kong-Upstream-Latency: 2\r\nX-Kong-Proxy-Latency: 0\r\nVia: kong\/0.11.1\r\n\r\n<span class=\"o\">{<\/span><span class=\"s2\">\"hoge\"<\/span>,<span class=\"s2\">\"READ\"<\/span><span class=\"o\">}<\/span>\r\n\r\n\r\n<span class=\"nv\">$ <\/span>curl <span class=\"nt\">-i<\/span> <span class=\"nt\">-X<\/span> POST http:\/\/172.26.22.29:8000\/r\/\r\nHTTP\/1.1 404 Not Found\r\nDate: Thu, 16 Nov 2017 02:03:39 GMT\r\nContent-Type: application\/json<span class=\"p\">;<\/span> <span class=\"nv\">charset<\/span><span class=\"o\">=<\/span>utf-8\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nServer: kong\/0.11.1\r\n\r\n<span class=\"o\">{<\/span><span class=\"s2\">\"message\"<\/span>:<span class=\"s2\">\"no API found with those values\"<\/span><span class=\"o\">}<\/span>\r\n\r\n\r\n<span class=\"nv\">$ <\/span>curl <span class=\"nt\">-i<\/span> <span class=\"nt\">-X<\/span> PUT http:\/\/172.26.22.29:8000\/r\/\r\nHTTP\/1.1 404 Not Found\r\nDate: Thu, 16 Nov 2017 02:03:43 GMT\r\nContent-Type: application\/json<span class=\"p\">;<\/span> <span class=\"nv\">charset<\/span><span class=\"o\">=<\/span>utf-8\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nServer: kong\/0.11.1\r\n\r\n<span class=\"o\">{<\/span><span class=\"s2\">\"message\"<\/span>:<span class=\"s2\">\"no API found with those values\"<\/span><span class=\"o\">}<\/span>\r\n\r\n\r\n<span class=\"nv\">$ <\/span>curl <span class=\"nt\">-i<\/span> <span class=\"nt\">-X<\/span> DELETE http:\/\/172.26.22.29:8000\/r\/\r\nHTTP\/1.1 404 Not Found\r\nDate: Thu, 16 Nov 2017 02:03:50 GMT\r\nContent-Type: application\/json<span class=\"p\">;<\/span> <span class=\"nv\">charset<\/span><span class=\"o\">=<\/span>utf-8\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nServer: kong\/0.11.1\r\n\r\n<span class=\"o\">{<\/span><span class=\"s2\">\"message\"<\/span>:<span class=\"s2\">\"no API found with those values\"<\/span><span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h2>\u4fdd\u62a4API<\/h2>\n<p>\u63a5\u4e0b\u6765\uff0c\u8ba9\u6211\u4eec\u5bf9API\u8fdb\u884c\u9632\u5fa1\u8bbe\u7f6e\u3002<\/p>\n<ul class=\"post-ul\">plugin:jwt\u3092\u8a2d\u5b9a\u3059\u308b<\/ul>\n<p>\u4e3a\u4e86\u4fdd\u62a4API\uff0c\u6211\u4eec\u4f1a\u5728\u5176\u4e0a\u5b89\u88c5JWT\u63d2\u4ef6\u3002\u4f46\u662fJWT\u4e0d\u662f\u8bbf\u95ee\u4ee4\u724c\u554a\uff01\u597d\u5427\uff0cKeycloak\u7684\u8bbf\u95ee\u4ee4\u724c\u662fJWT\uff0c\u6240\u4ee5\u5e94\u8be5\u6ca1\u6709\u95ee\u9898\u3002\u901a\u5e38\u7684OP\u4e0d\u4f7f\u7528JWT\u4f5c\u4e3a\u8bbf\u95ee\u4ee4\u724c\uff0c\u53ef\u80fd\u4f1a\u9009\u62e9\u4f7f\u7528ID\u4ee4\u724c\u3002\uff08*\u5bf9\u54cd\u5e94\u7684JSON\u8fdb\u884c\u683c\u5f0f\u5316\uff09<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>curl <span class=\"nt\">-X<\/span> POST http:\/\/172.26.22.29:8001\/apis\/myapi-read\/plugins <span class=\"nt\">--data<\/span> <span class=\"s2\">\"name=jwt\"<\/span>\r\n<span class=\"o\">{<\/span>\r\n    <span class=\"s2\">\"created_at\"<\/span>: 1510798731000,\r\n    <span class=\"s2\">\"config\"<\/span>: <span class=\"o\">{<\/span>\r\n        <span class=\"s2\">\"secret_is_base64\"<\/span>: <span class=\"nb\">false<\/span>,\r\n        <span class=\"s2\">\"key_claim_name\"<\/span>: <span class=\"s2\">\"iss\"<\/span>,\r\n        <span class=\"s2\">\"anonymous\"<\/span>: <span class=\"s2\">\"\"<\/span>,\r\n        <span class=\"s2\">\"run_on_preflight\"<\/span>: <span class=\"nb\">true<\/span>,\r\n        <span class=\"s2\">\"uri_param_names\"<\/span>: <span class=\"o\">[<\/span>\r\n            <span class=\"s2\">\"jwt\"<\/span>\r\n        <span class=\"o\">]<\/span>\r\n    <span class=\"o\">}<\/span>,\r\n    <span class=\"s2\">\"id\"<\/span>: <span class=\"s2\">\"bb3cae8b-0bf9-44f4-bf3b-9ea27f418f8c\"<\/span>,\r\n    <span class=\"s2\">\"name\"<\/span>: <span class=\"s2\">\"jwt\"<\/span>,\r\n    <span class=\"s2\">\"api_id\"<\/span>: <span class=\"s2\">\"8478b314-f0aa-49b7-804f-ce0320d4461c\"<\/span>,\r\n    <span class=\"s2\">\"enabled\"<\/span>: <span class=\"nb\">true<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5bf9\u4e8eAPI\u540d\u79f0\u4e3amyapi-read\u7684API\uff0c\u542f\u7528plugin:jwt\u3002name=jwt\u662f\u56fa\u5b9a\u503c\u3002\u867d\u7136\u5df2\u7ecf\u4f7f\u7528\u4e86\u8be5\u65b9\u5f0f\u8fdb\u884c\u4e86\u4fdd\u62a4\uff0c\u4f46\u6ca1\u6709\u8bbe\u7f6e\u6388\u6743\u6761\u4ef6\uff0c\u6240\u4ee5\u59cb\u7ec8\u4f1a\u8fd4\u56de401\uff08\u672a\u6388\u6743\uff09\u3002<\/p>\n<ul class=\"post-ul\">consumer\u3092\u8a2d\u5b9a\u3059\u308b<\/ul>\n<p>\u7531\u4e8e\u6587\u6863\u4e2d\u6ca1\u6709\u4efb\u4f55\u89e3\u91ca\uff0c&#8221;consumer&#8221;\u8fd9\u4e2a\u8bcd\u7684\u610f\u4e49\u4e0d\u660e\u786e\uff0c\u4f46\u5b83\u8868\u793a\u4f7f\u7528API\u7684\u4eba\uff08\u6d88\u8d39\u8005\uff09\u3002\u6211\u5c06\u5728Kong\u7684API\u53c2\u8003\u6307\u5357\u4e2d\u7528\u4e09\u884c\u6765\u89e3\u91ca\u4e00\u4e0b\u3002<\/p>\n<blockquote><p>Consumer\u5bf9\u8c61\u8868\u793aAPI\u7684\u6d88\u8d39\u8005\u6216\u7528\u6237\u3002\u60a8\u53ef\u4ee5\u9009\u62e9\u5c06Kong\u4f5c\u4e3a\u4e3b\u8981\u6570\u636e\u5b58\u50a8\uff0c\u6216\u8005\u5c06\u6d88\u8d39\u8005\u5217\u8868\u4e0e\u60a8\u7684\u6570\u636e\u5e93\u8fdb\u884c\u6620\u5c04\uff0c\u4ee5\u5b9e\u73b0Kong\u548c\u60a8\u73b0\u6709\u7684\u4e3b\u8981\u6570\u636e\u5b58\u50a8\u4e4b\u95f4\u7684\u4e00\u81f4\u6027\u3002<\/p><\/blockquote>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>curl <span class=\"nt\">-X<\/span> POST http:\/\/172.26.22.29:8001\/consumers <span class=\"nt\">--data<\/span> <span class=\"s2\">\"username=myapi\"<\/span>\r\n<span class=\"o\">{<\/span><span class=\"s2\">\"created_at\"<\/span>:1510800004000,<span class=\"s2\">\"username\"<\/span>:<span class=\"s2\">\"myapi\"<\/span>,<span class=\"s2\">\"id\"<\/span>:<span class=\"s2\">\"087f5be4-cff5-4e40-b8a0-9b2925712834\"<\/span><span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5bf9\u4e8e\u53c2\u6570\u201cusername\u201d\uff0c\u53ef\u4ee5\u4f7f\u7528\u4efb\u4f55\u6d88\u8d39\u8005\u7684\u540d\u79f0\u4f5c\u4e3a\u503c\u3002<\/p>\n<ul class=\"post-ul\">JWT\u306e\u7f72\u540d\u3092\u691c\u8a3c\u3059\u308b\u516c\u958b\u9375\u3092\u8a2d\u5b9a\u3059\u308b<\/ul>\n<p>\u9996\u5148\uff0c\u8ba9\u6211\u4eec\u4eceKeycloak\u83b7\u53d6\u516c\u94a5\u3002\u7531\u4e8e\u8fd9\u662f\u7528\u4e8e\u5bf9Keycloak\u53d1\u653e\u7684\u4ee4\u724c\u8fdb\u884c\u7b7e\u540d\uff0c\u56e0\u6b64\u5e94\u8be5\u4f7f\u7528\u4f4d\u4e8e\u5ba2\u6237\u7aef\u4e4b\u5916\u7684\u9886\u57df\u8bbe\u7f6e\u7684\u516c\u94a5\u3002\u4ece\u83dc\u5355\u4e2d\u9009\u62e9&#8221;\u9886\u57df\u8bbe\u7f6e&#8221; &gt; &#8220;\u5bc6\u94a5&#8221;\u9009\u9879\u5361\uff0c\u7136\u540e\u70b9\u51fb&#8221;RSA&#8221;\u7c7b\u578b\u7684&#8221;\u516c\u94a5&#8221;\u6309\u94ae\uff0c\u5c06\u516c\u94a5\u7684\u503c\u590d\u5236\u4e0b\u6765\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/108-0.png\" alt=\"2017-11-16_115916.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/109-0.png\" alt=\"2017-11-16_120001.png\" \/><\/div>\n<p>\u83b7\u5f97\u516c\u94a5\u540e\uff0c\u53ef\u4ee5\u4f7f\u7528curl\u8fdb\u884c\u6ce8\u518c\uff0c\u64cd\u4f5c\u548c\u5f80\u5e38\u4e00\u6837\u3002\u7531\u4e8e\u516c\u94a5\u683c\u5f0f\u8981\u6c42\u4f7f\u7528PEM\u5f62\u5f0f\uff0c\u6240\u4ee5\u9700\u8981\u7a0d\u5fae\u52a0\u5de5\u4e00\u4e0b\u3002\u5c06\u521a\u521a\u590d\u5236\u7684\u516c\u94a5\u7c98\u8d34\u5230\u6587\u672c\u4e2d\uff0c\u5e76\u6dfb\u52a0\u6807\u9898\u548c\u5c3e\u90e8\u3002<\/p>\n<pre class=\"post-pre\"><code>-----BEGIN PUBLIC KEY-----\r\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1iSFWp3kfdxipF9TtHnB0ZQPUDGCpC7KKpPDq9Rp7TEkMfqpVw7Sq\/3iMSsNJtpx1jusmqaMoz8KD7hffVm5UGv7gbsOAAlEp6jYFfZT2kk1iEEBgCW5d67PZQqPbx63rcxAE1wWD42v+3gzKzzVPx+7uqBzfTIXPi1a9eWMmyITYMfYamLnXM8x0NYW8ME4ggrHqEyoHn71xPOkl4KKMOSdKyMg0NnG5YIWq13F0CR\/YuPHxbK9FF2ssNkfOwWxpfYBl\/oKmjs7BOTgXJnF9cHCs8fRspjJTVOfNdZ3ZH6fHZnBpbh+OxJUGLR1ShG34hZdkjHaRliRxDpddJ8NiQIDAQAB\r\n-----END PUBLIC KEY-----\r\n<\/code><\/pre>\n<p>\u63d0\u4f9b\u7ed9\u90a3\u4e9b\u5bf9 PEM \u6709\u75f4\u8ff7\u4e4b\u60c5\u7684\u4eba\u7684\u8865\u5145\u8bf4\u660e\u662f\uff0cPEM \u662f MIME \u683c\u5f0f\uff0c\u6240\u4ee5\u6bcf\u884c\u9700\u8981\u6362\u884c\u7b26\uff0c\u9650\u5236\u4e3a 76 \u5b57\u8282\u3002\u4f46\u8bf7\u6ce8\u610f\uff0c\u5b9e\u9645\u4e0a\u8fd9\u662f\u4e0d\u5fc5\u8981\u7684\u3002\u56e0\u4e3a\u6211\u4eec\u5c06\u5934\u90e8\u548c\u5c3e\u90e8\u8fde\u63a5\u5728\u4e00\u8d77\u540e\uff0c\u4f1a\u901a\u8fc7 curl \u53d1\u9001\uff0c\u5e76\u8fdb\u884c URL \u7f16\u7801\u3002<\/p>\n<pre class=\"post-pre\"><code>-----BEGIN+PUBLIC+KEY-----%0D%0AMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1iSFWp3kfdxipF9TtHnB0ZQPUDGCpC7KKpPDq9Rp7TEkMfqpVw7Sq%2F3iMSsNJtpx1jusmqaMoz8KD7hffVm5UGv7gbsOAAlEp6jYFfZT2kk1iEEBgCW5d67PZQqPbx63rcxAE1wWD42v%2B3gzKzzVPx%2B7uqBzfTIXPi1a9eWMmyITYMfYamLnXM8x0NYW8ME4ggrHqEyoHn71xPOkl4KKMOSdKyMg0NnG5YIWq13F0CR%2FYuPHxbK9FF2ssNkfOwWxpfYBl%2FoKmjs7BOTgXJnF9cHCs8fRspjJTVOfNdZ3ZH6fHZnBpbh%2BOxJUGLR1ShG34hZdkjHaRliRxDpddJ8NiQIDAQAB%0D%0A-----END+PUBLIC+KEY-----\r\n<\/code><\/pre>\n<p>\u73b0\u5728\u4f60\u7ec8\u4e8e\u53ef\u4ee5\u4f7f\u7528curl\u53d1\u9001\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code>curl <span class=\"nt\">-X<\/span> POST http:\/\/172.26.22.29:8001\/consumers\/myapi\/jwt <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--data<\/span> <span class=\"s2\">\"key=http:\/\/172.26.22.5\/auth\/realms\/master\"<\/span> <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--data<\/span> <span class=\"s2\">\"algorithm=RS256\"<\/span> <span class=\"se\">\\<\/span>\r\n  <span class=\"nt\">--data<\/span> <span class=\"s2\">\"rsa_public_key=-----BEGIN+PUBLIC+KEY-----%0D%0AMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1iSFWp3kfdxipF9TtHnB0ZQPUDGCpC7KKpPDq9Rp7TEkMfqpVw7Sq%2F3iMSsNJtpx1jusmqaMoz8KD7hffVm5UGv7gbsOAAlEp6jYFfZT2kk1iEEBgCW5d67PZQqPbx63rcxAE1wWD42v%2B3gzKzzVPx%2B7uqBzfTIXPi1a9eWMmyITYMfYamLnXM8x0NYW8ME4ggrHqEyoHn71xPOkl4KKMOSdKyMg0NnG5YIWq13F0CR%2FYuPHxbK9FF2ssNkfOwWxpfYBl%2FoKmjs7BOTgXJnF9cHCs8fRspjJTVOfNdZ3ZH6fHZnBpbh%2BOxJUGLR1ShG34hZdkjHaRliRxDpddJ8NiQIDAQAB%0D%0A-----END+PUBLIC+KEY-----\"<\/span>\r\n\r\n<span class=\"o\">{<\/span>\r\n  <span class=\"s2\">\"rsa_public_key\"<\/span>: <span class=\"s2\">\"-----BEGIN PUBLIC KEY-----<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1iSFWp3kfdxipF9TtHnB0ZQPUDGCpC7KKpPDq9Rp7TEkMfqpVw7Sq\/3iMSsNJtpx1jusmqaMoz8KD7hffVm5UGv7gbsOAAlEp6jYFfZT2kk1iEEBgCW5d67PZQqPbx63rcxAE1wWD42v+3gzKzzVPx+7uqBzfTIXPi1a9eWMmyITYMfYamLnXM8x0NYW8ME4ggrHqEyoHn71xPOkl4KKMOSdKyMg0NnG5YIWq13F0CR\/YuPHxbK9FF2ssNkfOwWxpfYBl\/oKmjs7BOTgXJnF9cHCs8fRspjJTVOfNdZ3ZH6fHZnBpbh+OxJUGLR1ShG34hZdkjHaRliRxDpddJ8NiQIDAQAB<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">-----END PUBLIC KEY-----\"<\/span>,\r\n  <span class=\"s2\">\"created_at\"<\/span>: 1510801636000,\r\n  <span class=\"s2\">\"id\"<\/span>: <span class=\"s2\">\"45cc56d0-660f-41dd-a5ab-6a833ecdfbd4\"<\/span>,\r\n  <span class=\"s2\">\"algorithm\"<\/span>: <span class=\"s2\">\"RS256\"<\/span>,\r\n  <span class=\"s2\">\"key\"<\/span>: <span class=\"s2\">\"http:\/\/172.26.22.5\/auth\/realms\/master\"<\/span>,\r\n  <span class=\"s2\">\"secret\"<\/span>: <span class=\"s2\">\"cOjsJz2daBE73YapxhHmde7YMchU4uK1\"<\/span>,\r\n  <span class=\"s2\">\"consumer_id\"<\/span>: <span class=\"s2\">\"087f5be4-cff5-4e40-b8a0-9b2925712834\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u53c2\u6570\u7684\u610f\u601d\u5982\u4e0b\u3002<\/p>\n<div>\n<div class=\"post-table\">\u30d1\u30e9\u30e1\u30fc\u30bf\u540d\u8aac\u660ekey\u691c\u8a3c\u3059\u308bJWT\u306e\u5c5e\u6027\u5024algorithm\u7f72\u540d\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u540drsa_public_key\u7f72\u540d\u3092\u691c\u8a3c\u3059\u308bRSA\u516c\u958b\u9375<\/div>\n<\/div>\n<p>\u5728\u8fd9\u4e9b\u53c2\u6570\u4e2d\uff0c\u6700\u91cd\u8981\u7684\u53c2\u6570\u662fkey\uff0c\u4f60\u9700\u8981\u5c06\u8bbe\u5b9a\u7684\u503c\u548cJWT\u7684\u503c\u8fdb\u884c\u6bd4\u8f83\uff0c\u6765\u5224\u65ad\u662f\u5426\u5141\u8bb8\u6216\u62d2\u7edd\u3002JWT\u7684\u5c5e\u6027\u662f\u4ec0\u4e48\uff1f\u5b83\u662f\u5728plugin:jwt\u4e2d\u8bbe\u5b9a\u7684&#8221;key_claim_name&#8221;\uff0c\u9ed8\u8ba4\u503c\u662fiss\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u5c06\u4f1a\u901a\u8fc7\u5b57\u7b26\u4e32\u7684\u5b8c\u5168\u5339\u914d\uff0c\u6765\u6bd4\u8f83JWT\u7684iss\u503c\u548c\u5728\u8fd9\u91cc\u8bbe\u5b9a\u7684key\u503c\u3002Keycloak\u9881\u53d1\u7684\u8bbf\u95ee\u4ee4\u724cJWT\u7684iss\u503c\u662f&#8221;http:\/\/172.26.22.5\/auth\/realms\/master&#8221;\uff0c\u56e0\u6b64\u5c06\u5176\u8bbe\u5b9a\u4e3a\u8fd9\u4e2a\u503c\u3002<\/p>\n<div>\n<div class=\"post-table\"><img loading=\"lazy\" decoding=\"async\" class=\"emoji\" title=\":information_source:\" src=\"https:\/\/cdn.qiita.com\/emoji\/twemoji\/unicode\/2139-fe0f.png\" alt=\":information_source:\" width=\"20\" height=\"20\" \/> JWT\u306e\u691c\u8a3c\u306f\u3001<\/p>\n<ul>\n<li>&#8220;key_claim_name&#8221;\u3067\u6307\u5b9a\u3057\u305f\u5c5e\u6027\u5024\u306e\u5b8c\u5168\u306b\u4e00\u81f4<\/li>\n<li>JWT\u306e\u7f72\u540d\u306e\u691c\u8a3c<\/li>\n<\/ul>\n<p>\u304c\u884c\u308f\u308c\u307e\u3059\u3002<strong>JWT\u306e\u6709\u52b9\u671f\u9650(&#8220;exp&#8221;)\u306f\u691c\u8a3c\u3055\u308c\u307e\u305b\u3093\u3002<\/strong><\/p>\n<\/div>\n<\/div>\n<ul class=\"post-ul\">\u8a66\u3057\u3066\u307f\u308b<\/ul>\n<p>\u8a2d\u5b9a\u5df2\u7d93\u5b8c\u6210\uff0c\u73fe\u5728\u8a66\u8a66\u770b\u5427\u3002\u70ba\u4e86\u66f4\u52a0\u6e05\u695a\u5730\u4e86\u89e3\u61c9\u7528\u7a0b\u5f0f\u7684\u64cd\u4f5c\uff0c\u6211\u5011\u518d\u6b21\u9644\u4e0a\u6d41\u7a0b\u5716\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/122-0.png\" alt=\"2017-11-22_105538.png\" \/><\/div>\n<p>\u8fd9\u6b21\u5728\u53f3\u7a97\u53e3\u4e2d\u8f93\u5165OP\u7684\u8bbe\u7f6e\uff0c\u5e76\u4ece\u5e94\u7528\u7a0b\u5e8f\u8bbf\u95eeKong(http:\/\/172.26.22.29:8000\/r\/) \uff08\u2460\u2461\uff09\u3002\u7531\u4e8eKong\u6ca1\u6709\u8bbf\u95ee\u4ee4\u724c\uff0c\u56e0\u6b64\u4f1a\u8fd4\u56de401\uff08\u672a\u7ecf\u6388\u6743\uff09\uff08\u2462\uff09\u3002\u5e94\u7528\u7a0b\u5e8f\u4f1a\u5411Keycloak\u53d1\u9001\u6388\u6743\u8bf7\u6c42\u4ee5\u83b7\u53d6\u8bbf\u95ee\u4ee4\u724c\uff08\u2463\uff09\u3002\u7531\u4e8eKeycloak\u672a\u7ecf\u8ba4\u8bc1\uff0c\u56e0\u6b64\u4f1a\u8fd4\u56de\u767b\u5f55\u9875\u9762\uff08\u2464\uff09\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/124-0.png\" alt=\"2017-11-16_161733.png\" \/><\/div>\n<p>\u5728\u8fd9\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4e2d\uff0c\u6211\u4eec\u5c06Keycloak\u7684\u754c\u9762\u663e\u793a\u5728\u5e94\u7528\u7a0b\u5e8f\u5185\u90e8\uff08\u901a\u8fc7\u5c06\u5185\u90e8\u8f6c\u6362\u4e3aTextBox\u63a7\u4ef6\u7684WebBrowser\u63a7\u4ef6\uff09\u3002\u767b\u5f55\u754c\u9762\u6ca1\u6709\u5f88\u597d\u5730\u9002\u5e94\u54cd\u5e94\u5f0f\u8bbe\u8ba1\uff0c\u4f46\u6211\u4eec\u9009\u62e9\u4e0d\u4e88\u7406\u4f1a\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/126-0.png\" alt=\"2017-11-22_105641.png\" \/><\/div>\n<p>\u5f53\u5728\u767b\u5f55\u9875\u9762\u8f93\u5165\u7528\u6237\u540d\u548c\u5bc6\u7801\u8fdb\u884c\u767b\u5f55\u540e\uff0c\u7531\u4e8e\u76ee\u524d\u5728Keycloak\u4e0a\u7684\u8bbe\u5b9a\u4e0d\u4f1a\u663e\u793a\u540c\u610f\u753b\u9762\uff0c\u6388\u6743\u7801\u5c06\u4f1a\u88ab\u53d1\u9001\u5230\u91cd\u5b9a\u5411URI\u4e0a\uff08\u2465\uff09\u3002\u63a5\u6536\u6388\u6743\u7801\u7684\u91cd\u5b9a\u5411URI\u662f&#8230;http:\/\/localhost\u3002\u4e5f\u5c31\u662f\u8bf4\uff0cWebBrowser\u63a7\u4ef6\u8bd5\u56fe\u8bbf\u95eehttp:\/\/localhost\uff0c\u5374\u4f1a\u663e\u793a&#8221;\u65e0\u6cd5\u663e\u793a\u8be5\u9875\u9762&#8221;\u7684\u63d0\u793a\uff0c\u4f46\u5e94\u7528\u7a0b\u5e8f\u5b9e\u9645\u9700\u8981\u7684\u662f\u6388\u6743\u7801\uff0c\u5b83\u53ef\u4ee5\u901a\u8fc7\u67e5\u8be2\u53c2\u6570\u4eceWebBrowser\u63a7\u4ef6\u7684Uri\u5c5e\u6027\u4e2d\u83b7\u53d6\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u8ba9\u5e94\u7528\u7a0b\u5e8f\u663e\u793a\u5185\u5d4c\u6d4f\u89c8\u5668\uff0c\u5c06\u53ef\u80fd\u7ed5\u8fc7\u91cd\u5b9a\u5411URI\uff08\u8fd9\u4e5f\u662f\u5185\u5d4c\u6d4f\u89c8\u5668\u5b58\u5728\u5b89\u5168\u95ee\u9898\u7684\u539f\u56e0\u4e4b\u4e00\uff09\u3002<\/p>\n<p>\u5728\u5b89\u5168\u65b9\u9762\u6682\u4e14\u4e0d\u8c08\uff0c\u53ef\u4ee5\u901a\u8fc7\u7ed5\u8fc7\u91cd\u5b9a\u5411URI\u6765\u7a83\u53d6\u6388\u6743\u4ee3\u7801\uff0c\u4ece\u800c\u83b7\u53d6\u8bbf\u95ee\u4ee4\u724c(\u2466)\u3002\u4e00\u65e6\u83b7\u5f97\u8bbf\u95ee\u4ee4\u724c\uff0c\u518d\u6b21\u8bbf\u95eeKong(\u2467)\u3002\u8fd9\u6b21Kong\u5c06\u8fdb\u884c\u6388\u6743\uff0c\u7136\u540e\u5c06API\u4f5c\u4e3a\u4ee3\u7406(\u2468)\uff0c\u8fd9\u6837\u5c31\u80fd\u591f\u6210\u529f\u4eceAPI\u83b7\u5f97\u54cd\u5e94(\u2469)\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/129-0.png\" alt=\"2017-11-16_163607.png\" \/><\/div>\n<div>\n<div class=\"post-table\"><img loading=\"lazy\" decoding=\"async\" class=\"emoji\" title=\":warning:\" src=\"https:\/\/cdn.qiita.com\/emoji\/twemoji\/unicode\/26a0-fe0f.png\" alt=\":warning:\" width=\"20\" height=\"20\" \/> \u3053\u306e\u8a18\u4e8b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\u30c6\u30b9\u30c8\u7528\u3067\u3042\u308b\u305f\u3081\u3001\u96d1\u306a\u4f5c\u308a\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u304c\u3001\u672c\u6765\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u4e0a\u306bHTML\u3092\u8868\u793a\u3057\u3066\u3057\u307e\u3046OAuth2.0\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4e0a\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\u7406\u7531\u306f\u3001<\/p>\n<ul>\n<li><code>client_secret<\/code> \u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u57cb\u3081\u8fbc\u3093\u3067\u3057\u307e\u3046\uff08\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u89e3\u6790\u3059\u308b\u3053\u3068\u3067<code>client_secret<\/code>\u304c\u3070\u308c\u3066\u3057\u307e\u3046\u3002<\/li>\n<li>\u30ea\u30c0\u30a4\u30ec\u30af\u30c8URI\u3092\u8e0f\u307f\u5012\u3057\u3066\u3044\u308b\u3002\uff08\u30a2\u30d7\u30ea\u306e\u958b\u767a\u8005\u306f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8URI\u304c\u4f55\u306e\u691c\u8a3c\u306b\u3082\u5f79\u306b\u7acb\u3063\u3066\u3044\u306a\u3044\u3053\u3068\u3092\u77e5\u3063\u3066\u3044\u308b\uff09<\/li>\n<li>\u30e6\u30fc\u30b6\u30fc\u306b\u3069\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u3044\u308b\u304b\u304c\u5206\u304b\u3089\u306a\u3044\u3002\uff08URL\u30d0\u30fc\u3092\u30a2\u30d7\u30ea\u306b\u4ed8\u3051\u3066\u3082\u3001\u30a2\u30d7\u30ea\u304c\u52dd\u624b\u306b\u8868\u793a\u3057\u3066\u3044\u308b\u3060\u3051\u306a\u306e\u3067\u3001\u3044\u304f\u3089\u3067\u3082\u8a50\u79f0\u3067\u304d\u308b\uff09<\/li>\n<\/ul>\n<p>\u3068\u3044\u3063\u305f\u3082\u306e\u304c\u3042\u308a\u307e\u3059\u3002\u30bb\u30ad\u30e5\u30a2\u306b\u3084\u308b\u306b\u306f\u3001\u5916\u90e8\u30d6\u30e9\u30a6\u30b6\uff08http(s):\/\/\uff5e\u3067\u8d77\u52d5\u3059\u308b\u30a2\u30d7\u30ea\uff09\u3092\u8d77\u52d5\u3057\u3066\u8a8d\u8a3c\u30fb\u8a8d\u53ef\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u6295\u3052\u307e\u3059\u3002<span style=\"text-decoration: line-through;\">\u30ea\u30c0\u30a4\u30ec\u30af\u30c8URI\u306b\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u53d7\u3051\u53d6\u308c\u308b\u3088\u3046\u306b\u30ab\u30b9\u30bf\u30e0\u30b9\u30ad\u30fc\u30de\u3092OS\u306b\u767b\u9332\u3057\u307e\u3059\u3002\u30ab\u30b9\u30bf\u30e0\u30b9\u30ad\u30fc\u30de\u3068\u306f\u3001\u4f8b\u3048\u3070\u30d6\u30e9\u30a6\u30b6\u306eURL\u306b hoge:\/\/\uff5e \u3068\u5165\u529b\u3059\u308b\u3068\u3001\u30a2\u30d7\u30ea\u304c\u8d77\u52d5\u3059\u308b\u3088\u3046\u306b\u95a2\u9023\u3065\u3051\u3066\u304a\u304f\u3053\u3068\u3067\u3059\u3002<\/span> \u30ea\u30c0\u30a4\u30ec\u30af\u30c8URI\u306b\u306f\u3001\u30b9\u30de\u30db\u30a2\u30d7\u30ea\u306e\u5834\u5408<a href=\"https:\/\/developer.apple.com\/library\/content\/documentation\/General\/Conceptual\/AppSearch\/UniversalLinks.html\" target=\"_blank\" rel=\"nofollow noopener\">iOS Universal Links<\/a>\u3084<a href=\"https:\/\/developer.android.com\/training\/app-links\/index.html\" target=\"_blank\" rel=\"nofollow noopener\">Android App Links<\/a>\u306a\u3069\u3001\u7279\u5b9a\u306eURL\u3092\u30a2\u30d7\u30ea\u306b\u7d10\u4ed8\u3051\u308b\u4ed5\u7d44\u307f\u3092\u5229\u7528\u3057\u307e\u3059\u3002Windows\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5834\u5408\u306f\u3001WebBrowser\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u3092\u4f7f\u3048\u3070URL\u3092\u76f4\u63a5\u53d6\u5f97\u3067\u304d\u308b\u306e\u3067\u3001\u305d\u306e\u307e\u307e\u5229\u7528\u3057\u307e\u3059\u3002\u307e\u305f\u3001<code>client_secret<\/code>\u304c\u79d8\u5bc6\u306b\u4fdd\u3066\u306a\u3044\u306e\u3067\u3001\u3053\u306eOAuth2.0\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f public\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u3057\u3066\u6271\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b9\u30de\u30db\u30a2\u30d7\u30ea\u3067\u30bb\u30ad\u30e5\u30a2\u306bOAuth2.0 \/ OpenID Connect\u3067\u9023\u643a\u3059\u308b\u65b9\u6cd5\u306f\u3001\u3053\u308c\u3060\u3051\u3067\u5927\u304d\u306a\u30c6\u30fc\u30de\u3067\u3042\u308b\u305f\u3081\u3001\u3053\u306e\u8a18\u4e8b\u3067\u306f\u5272\u611b\u3055\u305b\u3066\u3044\u3060\u305f\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n<\/div>\n<ul class=\"post-ul\">\u8a8d\u53ef\u5468\u308a\u306e\u8a2d\u5b9a\u306e\u95a2\u9023\uff08Kong\u306e\u30c7\u30fc\u30bf\u30e2\u30c7\u30eb\uff09<\/ul>\n<p>\u5173\u4e8eGET\u8bf7\u6c42\u7684\u7aef\u70b9\uff08http:\/\/172.26.22.29:8000\/r\/\uff09\uff0c\u73b0\u5728\u8fd9\u6837\u5c31\u53ef\u4ee5\u4e86\uff0c\u4f46\u662fPOST\u8bf7\u6c42\uff08http:\/\/172.26.22.29:8000\/c\/\uff09\u3001PUT\u8bf7\u6c42\uff08http:\/\/172.26.22.29:8000\/u\/\uff09\u548cDELETE\u8bf7\u6c42\uff08http:\/\/172.26.22.29:8000\/d\/\uff09\u7684\u7aef\u70b9\u8fd8\u6ca1\u6709\u8bbe\u7f6e\u3002\u9488\u5bf9API\uff1amyapi-create\u3001myapi-update\u548cmyapi-delete\uff0c\u9700\u8981\u5206\u522b\u6dfb\u52a0\u201cplugin:jwt\u201d\u7684\u914d\u7f6e\u3002\u5173\u4e8e\u201cconsumer\u201d\u548c\u201c\u516c\u5f00\u5bc6\u94a5\u7684\u914d\u7f6e\u201d\uff0c\u53ef\u4ee5\u4f7f\u7528\u4e0eGET\u76f8\u540c\u7684\u914d\u7f6e\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u4e3a\u6bcf\u4e2aAPI\u6dfb\u52a0\u989d\u5916\u7684\u914d\u7f6e\u3002<\/p>\n<p>\u7531\u4e8e\u6d89\u53ca\u5230\u8bb8\u591a\u89d2\u8272\uff0c\u56e0\u6b64\u5728\u8fd9\u91cc\u53ea\u7b80\u5355\u5730\u63cf\u8ff0\u76f8\u5173\u7684\u8bbe\u7f6e\u3002\u5728\u672c\u7bc7\u6587\u7ae0\u7684\u793a\u4f8b\u4e2d\uff0c\u6211\u4eec\u5bf9apis\u8fdb\u884c\u4e86\u56db\u9879API\u8bbe\u7f6e\u4ee5\u5bf9\u5e94\u5230\u56db\u4e2a\u7aef\u70b9\u3002plugins\u901a\u8fc7apis:plugins = 1:1\u7684\u5173\u7cfb\u8fdb\u884c\u8bbe\u7f6e\uff0c\u603b\u5171\u56db\u4e2a\u8bbe\u7f6e\u3002consumers\u4e0eplugins\u6ca1\u6709\u8054\u7cfb\uff0c\u53ea\u8fdb\u884c\u4e86\u4e00\u6b21\u8bbe\u7f6e\u3002jwt_secrets\u901a\u8fc7consumers:jwt_secrets = 1:1\u7684\u5173\u7cfb\u8fdb\u884c\u4e86\u4e00\u6b21\u8bbe\u7f6e\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/134-0.png\" alt=\"2017-11-22_111124.png\" \/><\/div>\n<p>\u63d2\u4ef6\u53ef\u4ee5\u4e0e\u6d88\u8d39\u8005\u5efa\u7acb\u4e00\u5bf9\u4e00\u7684\u5173\u7cfb\uff0c\u4e5f\u53ef\u4ee5\u65e0\u5173\u3002\u5728\u672c\u6587\u7684\u4f8b\u5b50\u4e2d\uff0c\u6d88\u8d39\u8005\u7406\u8bba\u4e0a\u4e0d\u5e94\u8be5\u662f\u5fc5\u8981\u7684\uff0c\u4f46\u662f\u7531\u4e8ejwt_secret\u7684\u8bbe\u7f6e\u9700\u8981\u6d88\u8d39\u8005\uff0c\u56e0\u6b64\u6211\u4eec\u8bbe\u7f6e\u4e86\u6d88\u8d39\u8005\u3002\u5728\u5c06\u6765\u7684Kong\u7248\u672c\u4e2d\u53ef\u80fd\u4f1a\u8fdb\u884c\u66f4\u6539\u3002<\/p>\n<h2>\u4ee5\u7528\u6237\u4e3a\u5355\u4f4d\u8fdb\u884c\u9632\u5fa1<\/h2>\n<p>Keycloak\u53ef\u4ee5\u901a\u8fc7\u53d1\u884c\u7684\u8bbf\u95ee\u4ee4\u724c\uff08\u5373JWT\uff09\u6765\u8fdb\u884cAPI\u9632\u5fa1\u3002\u7136\u800c\uff0c\u8fd9\u4e2a\u5224\u65ad\u65b9\u6cd5\u662f\u901a\u8fc7JWT\u7684iss\u503c\u5b9e\u73b0\u7684\uff0c\u8fd9\u4e2a\u503c\u662fKeycloak\u7279\u5b9a\u7684\u503c\uff0c\u56e0\u6b64\u59cb\u7ec8\u76f8\u540c\uff08\u51c6\u786e\u5730\u8bf4\uff0c\u5728\u6bcf\u4e2a\u9886\u57df\u4e2d\u7684\u503c\u662f\u4e0d\u540c\u7684\uff09\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u53ea\u8981\u6709Keycloak\u5206\u53d1\u7684\u8bbf\u95ee\u4ee4\u724c\uff0c\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u8bbf\u95eeAPI\u3002\u867d\u7136\u5728\u6b64\u7ea7\u522b\u7684\u9632\u5fa1\u5df2\u7ecf\u8db3\u591f\uff0c\u4f46\u65e2\u7136\u6211\u4eec\u5df2\u7ecf\u8fdb\u884c\u4e86\u6388\u6743\uff0c\u90a3\u5c31\u518d\u52aa\u529b\u4e00\u70b9\u5427\u3002\u8ba9\u7528\u6237\u51b3\u5b9a\u662f\u5426\u5141\u8bb8\u8bbf\u95eeAPI\u3002<\/p>\n<ul class=\"post-ul\">JWT\u306e\u6307\u5b9a\u3057\u305f\u5c5e\u6027\u3092\u898b\u308b\u3088\u3046\u306b\u3059\u308b(plugin)<\/ul>\n<p>\u7528\u6237\u65e0\u6cd5\u4ee5\u5355\u4e2a\u7528\u6237\u4e3a\u5355\u4f4d\u8fdb\u884c\u8bbf\u95ee\u9650\u5236\u63a7\u5236\uff0c\u662f\u56e0\u4e3a\u5b83\u662f\u6839\u636eJWT\u7684iss\u503c\u8fdb\u884c\u5224\u65ad\u7684\uff0c\u5982\u679c\u6539\u4e3a\u6839\u636e\u7528\u6237\u540d\u6216\u7528\u6237ID\u8fdb\u884c\u5224\u65ad\u5c31\u53ef\u4ee5\u4e86\u3002\u63d2\u4ef6\u4e2d\u6709\u4e00\u4e2a\u8bbe\u7f6e\u6765\u67e5\u770biss\u503c\uff0c\u6240\u4ee5\u6211\u4eec\u5c06\u5bf9\u6b64\u8fdb\u884c\u66f4\u6539\u3002\u6b64\u5916\uff0cKeycloak\u8bbf\u95ee\u4ee4\u724c\u4e2d\u5305\u542b\u7528\u6237\u540d\u7684\u5c5e\u6027\u5f88\u91cd\u8981\uff0cpreferred_username\u770b\u8d77\u6765\u662f\u4e2a\u4e0d\u9519\u7684\u9009\u62e9\u3002<\/p>\n<p>\u7167\u5e38\u4f7f\u7528curl\u8fdb\u884c\u8bbe\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>curl <span class=\"nt\">-i<\/span> <span class=\"nt\">-X<\/span> PATCH <span class=\"nt\">--data<\/span> <span class=\"s2\">\"config.key_claim_name=preferred_username\"<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"s2\">\"http:\/\/172.26.22.29:8001\/apis\/myapi-read\/plugins\/bb3cae8b-0bf9-44f4-bf3b-9ea27f418f8c\"<\/span>\r\nHTTP\/1.1 200 OK\r\nDate: Fri, 17 Nov 2017 02:35:25 GMT\r\nContent-Type: application\/json<span class=\"p\">;<\/span> <span class=\"nv\">charset<\/span><span class=\"o\">=<\/span>utf-8\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nAccess-Control-Allow-Origin: <span class=\"k\">*<\/span>\r\nServer: kong\/0.11.1\r\n\r\n<span class=\"o\">{<\/span>\r\n    <span class=\"s2\">\"created_at\"<\/span>: 1510798731000,\r\n    <span class=\"s2\">\"config\"<\/span>: <span class=\"o\">{<\/span>\r\n        <span class=\"s2\">\"key_claim_name\"<\/span>: <span class=\"s2\">\"preferred_username\"<\/span>,\r\n        <span class=\"s2\">\"secret_is_base64\"<\/span>: <span class=\"nb\">false<\/span>,\r\n        <span class=\"s2\">\"anonymous\"<\/span>: <span class=\"s2\">\"\"<\/span>,\r\n        <span class=\"s2\">\"run_on_preflight\"<\/span>: <span class=\"nb\">true<\/span>,\r\n        <span class=\"s2\">\"uri_param_names\"<\/span>: <span class=\"o\">[<\/span>\r\n            <span class=\"s2\">\"jwt\"<\/span>\r\n        <span class=\"o\">]<\/span>\r\n    <span class=\"o\">}<\/span>,\r\n    <span class=\"s2\">\"id\"<\/span>: <span class=\"s2\">\"bb3cae8b-0bf9-44f4-bf3b-9ea27f418f8c\"<\/span>,\r\n    <span class=\"s2\">\"name\"<\/span>: <span class=\"s2\">\"jwt\"<\/span>,\r\n    <span class=\"s2\">\"api_id\"<\/span>: <span class=\"s2\">\"8478b314-f0aa-49b7-804f-ce0320d4461c\"<\/span>,\r\n    <span class=\"s2\">\"enabled\"<\/span>: <span class=\"nb\">true<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u53c2\u6570\u6709\u70b9\u590d\u6742\uff0c\u4f46\u662fURL\u91cc\u7684myapi-read\u662fAPI\u7684\u540d\u79f0\uff0c&#8230;\/plugins\/\u540e\u9762\u7684bb3c&#8230;\u662f\u63d2\u4ef6\u7684ID\u3002\u7531\u4e8e\u67d0\u79cd\u539f\u56e0\u65e0\u6cd5\u6307\u5b9a\u63d2\u4ef6\u540d\u79f0(jwt)\uff0c\u6240\u4ee5\u6211\u901a\u8fc7ID\u8fdb\u884c\u6307\u5b9a\u3002\u914d\u7f6e\u503c\u672c\u8eab\u662f\u901a\u8fc7\u8bf7\u6c42\u4f53\u4e2d\u7684config.(\u5c5e\u6027\u540d)\u8fdb\u884c\u6307\u5b9a\u7684\u3002\u8fd9\u6b21\u6211\u60f3\u628akey_claim_name\u8bbe\u7f6e\u4e3aiss\u2192preferred_username\uff0c\u6240\u4ee5\u6307\u5b9aconfig.key_claim_name=preferred_username\u3002\u987a\u4fbf\u4e00\u63d0\uff0cHTTP\u65b9\u6cd5\u662fPATCH\u800c\u4e0d\u662fPUT\u3002Kong\u7684\u66f4\u65b0API\u4e2d\u6df7\u5408\u4e86PATCH\u548cPUT\uff0c\u6709\u70b9\u6742\u4e71\u65e0\u7ae0\u3002<\/p>\n<p>\u5982\u679c\u4e00\u4e2a\u4eba\u60f3\u8981\u5f7b\u5e95\u5220\u9664\u5e76\u91cd\u65b0\u521b\u5efa\uff0c\u4ed6\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u201cDELETE\u201d\u6765\u5b9e\u73b0\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>curl <span class=\"nt\">-i<\/span> <span class=\"nt\">-X<\/span> DELETE http:\/\/172.26.22.29:8001\/apis\/myapi-read\/plugins\/bb3cae8b-0bf9-44f4-bf3b-9ea27f418f8c\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u6bd4\u8f03\u3059\u308b\u5024\u3092\u5909\u66f4\u3059\u308b(jwt_secret)<\/ul>\n<p>\u7531\u4e8e\u66f4\u6539\u4e86\u8981\u6bd4\u8f83\u7684\u5c5e\u6027\u540d\u79f0\uff0c\u56e0\u6b64\u9700\u8981\u66f4\u6539\u5c5e\u6027\u503c\u672c\u8eab\u3002\u8fd9\u662f\u5728\u8bbe\u7f6e\u4e86\u516c\u94a5\u7684\u5730\u65b9\uff0c\u901a\u8fc7key\u7684\u503c\u6765\u8fdb\u884c\u8bbe\u7f6e\u3002\u6211\u4eec\u5c06\u53ea\u5141\u8bb8\u7528\u6237u001\u8bbf\u95ee\uff08\u8bf7\u5728Keycloak\u4e0a\u521b\u5efa\u8be5\u7528\u6237\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>curl <span class=\"nt\">-i<\/span> <span class=\"nt\">-X<\/span> PUT <span class=\"nt\">--data<\/span> <span class=\"s2\">\"key=u001\"<\/span> http:\/\/172.26.22.29:8001\/consumers\/myapi\/jwt\r\n\r\n<span class=\"o\">{<\/span>\r\n    <span class=\"s2\">\"created_at\"<\/span>: 1510887959000,\r\n    <span class=\"s2\">\"id\"<\/span>: <span class=\"s2\">\"7c493182-f49d-4cd8-8cf1-a197f4763cce\"<\/span>,\r\n    <span class=\"s2\">\"algorithm\"<\/span>: <span class=\"s2\">\"RS256\"<\/span>,\r\n    <span class=\"s2\">\"key\"<\/span>: <span class=\"s2\">\"u001\"<\/span>,\r\n    <span class=\"s2\">\"secret\"<\/span>: <span class=\"s2\">\"QLgb9vQK0r9YbSD0b0MP0U6IPBFEzCpl\"<\/span>,\r\n    <span class=\"s2\">\"consumer_id\"<\/span>: <span class=\"s2\">\"087f5be4-cff5-4e40-b8a0-9b2925712834\"<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u8a66\u3057\u3066\u307f\u308b<\/ul>\n<p>\u8ba9\u6211\u4eec\u8bd5\u8bd5\u770b\u3002\u9996\u5148\uff0c\u6211\u4eec\u5c06\u5c1d\u8bd5\u4f7f\u7528\u7528\u6237u001\u8fdb\u884cKong\u8ba4\u8bc1\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/150-0.png\" alt=\"2017-11-17_121349.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/151-0.png\" alt=\"2017-11-17_121413.png\" \/><\/div>\n<p>\u6211\u5df2\u7ecf\u987a\u5229\u5730\u83b7\u5f97\u4e86\u6279\u51c6\u3002\u63a5\u4e0b\u6765\u6211\u5c06\u4ee5\u6ca1\u6709\u6743\u9650\u7684\u7528\u6237u111\u8fdb\u884c\u5c1d\u8bd5\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/153-0.png\" alt=\"2017-11-17_121654.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/154-0.png\" alt=\"2017-11-17_121711.png\" \/><\/div>\n<p>\u6ca1\u6709\u901a\u8fc7\u8ba4\u8bc1\uff0c\u51fa\u73b0\u4e86403\uff08\u7981\u6b62\u8bbf\u95ee\uff09\u3002<\/p>\n<h1>\u603b\u7ed3<\/h1>\n<p>\u7531\u4e8e\u8fd9\u7bc7\u6587\u7ae0\u53d8\u5f97\u5f88\u957f\uff0c\u6240\u4ee5\u6211\u60f3\u628a\u5b83\u5206\u6210\u51e0\u4e2a\u8981\u70b9\u603b\u7ed3\u4e00\u4e0b\u3002<\/p>\n<ul class=\"post-ul\">Kong\u306e\u8a8d\u53ef\u306b\u3064\u3044\u3066\uff08JWT\u691c\u8a3c\uff09<\/ul>\n<p>\u8fd9\u6b21\u8fdb\u884c\u7684\u8ba4\u8bc1\u53ea\u662f\u7b80\u5355\u5730\u5339\u914d\u4e86JWT\u4e2d\u7684\u5c5e\u6027\u503c\uff0c\u800c\u4e0d\u662fOAuth2.0\u3002\u5c5e\u6027\u503c\u7684\u9a8c\u8bc1\u6761\u4ef6\u5c06\u6765\u4f1a\u5b9e\u73b0\u66f4\u7075\u6d3b\u7684\u8bbe\u7f6e\uff0c\u4e0d\u4ec5\u4ec5\u662f\u5339\u914d\uff0c\u53ef\u80fd\u4f1a\u5305\u62ec\u6b63\u5219\u8868\u8fbe\u5f0f\u7b49\u3002\u7136\u800c\uff0c\u6211\u4eec\u6700\u60f3\u8981\u7684\u9a8c\u8bc1\u662fscope\u7684\u503c\uff0cscope=foo bar\u548cscope=bar foo\u8868\u793a\u76f8\u540c\u7684\u6743\u9650\uff0c\u4f46\u76ee\u524d\u65e0\u6cd5\u5c06\u8fd9\u4e24\u8005\u89c6\u4e3a\u76f8\u540c\u7684\u8bbe\u7f6e\uff0c\u800c\u4e14\u6b63\u5219\u8868\u8fbe\u5f0f\u4e5f\u65e0\u6cd5\u5b9e\u73b0\uff08\u6216\u8005\u8bf4\u975e\u5e38\u56f0\u96be\uff09\uff0c\u5bf9\u6b64\u6211\u4eec\u5173\u6ce8\u7684\u662f\u5c06\u6765\u7684\u7248\u672c\u662f\u5426\u4f1a\u5b9e\u73b0\u5230\u8fd9\u4e2a\u7a0b\u5ea6\u3002<\/p>\n<p>\u53e6\u5916\uff0c\u4f7f\u7528JWT\u8fdb\u884c\u9a8c\u8bc1\u4e5f\u6709\u4e9b\u4e0d\u4fbf\uff0c\u56e0\u4e3a\u8bbf\u95ee\u4ee4\u724c\u901a\u5e38\u53ea\u662f\u4e00\u4e2a\u666e\u901a\u7684\u5b57\u7b26\u4e32\uff0c\u800c\u4e0d\u662fJWT\u3002\u7531\u4e8eKeycloak\u89c4\u5b9a\u8bbf\u95ee\u4ee4\u724c\u5fc5\u987b\u662fJWT\u683c\u5f0f\uff0c\u6240\u4ee5\u5728Kong\u4e0a\u8fdb\u884c\u6388\u6743\u65f6\u65e0\u9700\u8003\u8651\u592a\u591a\uff0c\u4f46\u5927\u591a\u6570OP\u6216OP\u4ea7\u54c1\u53ef\u80fd\u4e0d\u4f1a\u90a3\u4e48\u7b80\u5355\u3002\u867d\u7136ID\u4ee4\u724c\u662fJWT\u683c\u5f0f\uff0c\u4f46\u8003\u8651\u5230ID\u4ee4\u724c\u7684\u76ee\u7684\uff08\u7528\u4e8e\u8ba4\u8bc1\uff09\u548c\u4ee4\u724c\u7684\u6709\u6548\u671f\u9650\uff08\u6ca1\u6709\u5237\u65b0\u673a\u5236\uff09\uff0c\u6211\u89c9\u5f97\u6709\u70b9\u4e0d\u592a\u65b9\u4fbf\u3002<\/p>\n<ul class=\"post-ul\">Kong\u306e\u8a8d\u53ef\u306b\u3064\u3044\u3066\uff08\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\uff09<\/ul>\n<p>\u5728OAuth2.0\u8ba4\u8bc1\u4e2d\uff0c\u6388\u6743\u4ecd\u7136\u662f\u4f7f\u7528\u8bbf\u95ee\u4ee4\u724c\u7684\u65b9\u5f0f\uff0c\u6240\u4ee5\u6211\u5e0c\u671bKong\u80fd\u591f\u5c06\u4eceRP\u83b7\u53d6\u7684\u8bbf\u95ee\u4ee4\u724c\u53d1\u9001\u5230OP\u7684\u4ee4\u724c\u68c0\u67e5\u7aef\u70b9\uff0c\u4ee5\u83b7\u53d6\u6743\u9650\u4fe1\u606f\u3002\u5b9e\u9645\u4e0a\uff0c\u5728\u6570\u636e\u5e93\u4e2d\u6211\u53d1\u73b0\u4e86\u4e00\u4e2a\u540d\u4e3aoauth2_xxx\u7684\u8868\uff0c\u56e0\u6b64\u53ef\u80fd\u5df2\u7ecf\u5b9e\u73b0\u4e86\u6b64\u529f\u80fd\uff0c\u4f46\u7531\u4e8e\u6587\u6863\u4e2d\u5c1a\u672a\u63d0\u5230\uff0c\u6211\u4e0d\u6e05\u695a\u8be5\u5982\u4f55\u8fdb\u884c\u8bbe\u7f6e\u548c\u4f7f\u7528\u3002\u6211\u76f8\u4fe1\u5728\u4e0d\u4e45\u7684\u5c06\u6765\u4f1a\u6709\u6587\u6863\u5bf9\u6b64\u8fdb\u884c\u8bf4\u660e\uff0c\u5c4a\u65f6\u6211\u518d\u8bd5\u4e00\u8bd5\u5e94\u8be5\u4f1a\u597d\u4e00\u4e9b\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d92fd913a08637a6e4fcf\/163-0.png\" alt=\"2017-11-22_112756.png\" \/><\/div>\n<ul class=\"post-ul\">Kong\u672c\u4f53\u306b\u3064\u3044\u3066<\/ul>\n<p>\u622a\u81f32017\u5e7412\u6708\uff0c\u7248\u672c\u53f7\u4e3a0.11.1\uff0c\u4f46\u4ecd\u7136\u611f\u89c9\u4e3a\u65f6\u8fc7\u65e9\u3002\u6587\u6863\u5199\u5f97\u8fd8\u53ef\u4ee5\uff0c\u4f46\u53ea\u6709API\u53c2\u8003\u6587\u6863\u662f\u5b8c\u6574\u7684\uff0c\u7f3a\u5c11\u793a\u4f8b\u4f7f\u4e8b\u60c5\u76f8\u5f53\u8270\u96be\u3002\u6b64\u5916\uff0c\u7f3a\u4e4f\u7ba1\u7406\u754c\u9762(GUI)\u5728\u8003\u8651\u5b9e\u9645\u8fd0\u8425\u65f6\u76f8\u5f53\u56f0\u96be\uff0c\u8fd9\u786e\u5b9e\u662f\u6211\u4eec\u8feb\u5207\u9700\u8981\u7684\u90e8\u5206\u3002\u5c31\u50cf\u672c\u6b21\u4f7f\u7528curl\u8f93\u5165\u7684\u6700\u7b80\u5355\u7684\u4f8b\u5b50\u4e00\u6837\uff0c\u53ef\u80fd\u76f8\u5f53\u56f0\u96be\u3002\u987a\u4fbf\u63d0\u4e00\u4e0b\uff0c\u6211\u76f4\u63a5\u66f4\u65b0\u4e86\u6570\u636e\u5e93\u3002<\/p>\n<ul class=\"post-ul\">\u5168\u4f53\u3068\u3057\u3066<\/ul>\n<p>\u8fd9\u7bc7\u6587\u7ae0\u53ea\u8ba8\u8bba\u4e86\u6700\u7b80\u5355\u7684\u8ba4\u53ef\u793a\u4f8b\uff0c\u5e76\u4e14\u4ec5\u5173\u6ce8\u8ba4\u53ef\u529f\u80fd\uff0c\u5374\u53d8\u6210\u4e86\u4e00\u7bc7\u5f88\u957f\u7684\u6587\u7ae0\u3002\u867d\u7136\u5176\u4e2d\u5927\u7ea6\u4e00\u534a\u662f\u5e9f\u8bdd\u3002\u5176\u5b9e\u6211\u4e5f\u60f3\u770b\u770b\u65e5\u5fd7\u548c\u8d1f\u8f7d\u5747\u8861\u7b49\u65b9\u9762\u7684\u5185\u5bb9\uff0c\u4f46\u5e0c\u671b\u5728\u53e6\u4e00\u4e2a\u673a\u4f1a\u518d\u8ba8\u8bba\u3002<\/p>\n<p>\u53ef\u80fd\u7684\u4e2d\u56fd\u7ffb\u8bd1\uff1a<\/p>\n<p>\u4e5f\u8bb8Kong\u7684\u76f4\u63a5\u7ade\u4e89\u5bf9\u624b\u76ee\u524d\u662fAWS API Gateway\uff0c\u5c3d\u7ba1\u529f\u80fd\u65b9\u9762\u53ef\u80fd\u6709\u6240\u4e0d\u540c\uff08\u4e00\u5e74\u540e\uff0cKong\u5f88\u53ef\u80fd\u4f1a\u5b9e\u73b0\u76f8\u5f53\u591a\u7684\u529f\u80fd\uff0c\u5e76\u4e14\u53ef\u80fd\u4e0eAPI Gateway\u7684\u529f\u80fd\u5dee\u522b\u4e0d\u5927\uff09\uff0c\u6613\u4e8e\u914d\u7f6e\u548c\u4f7f\u7528\u6027\u5c06\u662f\u6bd4\u8f83\u7684\u91cd\u70b9\u3002\u6211\u8ba4\u4e3a\u80fd\u5426\u8fdb\u884c\u975e\u7f16\u7a0b\u8bbe\u7f6e\uff0c\u5305\u62ec\u811a\u672c\u5728\u5185\uff0c\u53ef\u80fd\u662f\u5173\u952e\u3002\u5bf9\u4e8e\u7cfb\u7edf\u5f00\u53d1\u4eba\u5458\u6765\u8bf4\uff0c\u7f16\u5199\u4e00\u4e24\u4e2a\u811a\u672c\u53ef\u80fd\u662f\u8f7b\u800c\u6613\u4e3e\u7684\uff0c\u4f46\u5b9e\u9645\u4e0a\u6700\u5e38\u4f7f\u7528\u7684\u4eba\u662f\u8fd0\u8425\u4eba\u5458\uff0c\u4e0d\u80fd\u5ffd\u89c6\u8fd9\u4e00\u70b9\u3002<\/p>\n<p>\u53e6\u5916\uff0c\u6211\u8ba4\u4e3a\u6709\u4e9b\u60c5\u51b5\u4e0b\u53ef\u80fd\u6ca1\u6709\u9009\u62e9\u7684\u4f59\u5730\uff0c\u4ec5\u4ec5\u662f\u56e0\u4e3a\u4e0d\u80fd\u4f7f\u7528AWS\u8fd9\u4e2a\u8981\u6c42\u3002\u5bf9\u4e8e\u8fd9\u4e9b\u4eba\uff0c\u6211\u5e0c\u671bKong 1.0\u7248\u672c\u80fd\u591f\u5c3d\u5feb\u53d1\u5e03\u3002<\/p>\n<h1>\u8bf7\u63d0\u4f9b\u53c2\u8003\u8d44\u6599\u3002<\/h1>\n<ul class=\"post-ul\">Qiita\u306b\u3042\u308bKong\u306e\u8a18\u4e8b<\/ul>\n<p>\u5728Qiita\u4e0a\u5df2\u7ecf\u6709\u4eba\u8bd5\u8fc7Kong\u3002\u7531\u4e8eKong\u7684\u6587\u6863\u6ca1\u6709\u63d0\u4f9b\u793a\u4f8b\uff0c\u53ea\u7ed9\u51fa\u4e86API\u53c2\u8003\u6307\u5357\uff0c\u6240\u4ee5\u8fd9\u5bf9\u6211\u975e\u5e38\u6709\u5e2e\u52a9\u3002<\/p>\n<ul class=\"post-ul\">Kong\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/ul>\n<p>\u6211\u4e0d\u80fd\u4e0d\u770b\u3002<\/p>\n<ul class=\"post-ul\">Keycloak\u3067Kong\u3068\u9023\u643a\u3059\u308b<\/ul>\n<p>\u4f60\u77e5\u9053\u9700\u8981\u4f7f\u7528\u4ec0\u4e48\u6837\u7684API\u3002<\/p>\n<ul class=\"post-ul\">NRI OpenStandia Keycloak\u65e5\u672c\u8a9e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u4eca\u5929\u8981\u505a\u7684\u4e8b\u60c5 \u5728\u7b2c19\u5929\u7684\u5723\u8bde\u964d\u4e34\u6d3b\u52a8\u4e2d\uff0c\u5c06\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528API Gateway\u8fdb\u884c\u8bbf\u95ee\u9650\u5236\uff08\u6388\u6743\uff09\uff0c\u5e76\u8ba8\u8bba\u4fdd [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-50643","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528Keycloak\u5728API\u7f51\u5173\u4e2d\u9650\u5236\u5bf9API\u7684\u8bbf\u95ee - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528keycloak\u5728api\u7f51\u5173\u4e2d\u9650\u5236\u5bf9api\u7684\u8bbf\u95ee\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Keycloak\u5728API\u7f51\u5173\u4e2d\u9650\u5236\u5bf9API\u7684\u8bbf\u95ee\" \/>\n<meta property=\"og:description\" content=\"\u4eca\u5929\u8981\u505a\u7684\u4e8b\u60c5 \u5728\u7b2c19\u5929\u7684\u5723\u8bde\u964d\u4e34\u6d3b\u52a8\u4e2d\uff0c\u5c06\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528API Gateway\u8fdb\u884c\u8bbf\u95ee\u9650\u5236\uff08\u6388\u6743\uff09\uff0c\u5e76\u8ba8\u8bba\u4fdd [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528keycloak\u5728api\u7f51\u5173\u4e2d\u9650\u5236\u5bf9api\u7684\u8bbf\u95ee\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-28T03:33:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T19:54:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.qiita.com\/emoji\/twemoji\/unicode\/26a0-fe0f.png\" \/>\n<meta name=\"author\" content=\"\u65b0, \u97f5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u65b0, \u97f5\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/\",\"name\":\"\u4f7f\u7528Keycloak\u5728API\u7f51\u5173\u4e2d\u9650\u5236\u5bf9API\u7684\u8bbf\u95ee - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-08-28T03:33:07+00:00\",\"dateModified\":\"2024-04-29T19:54:31+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Keycloak\u5728API\u7f51\u5173\u4e2d\u9650\u5236\u5bf9API\u7684\u8bbf\u95ee\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9\",\"name\":\"\u65b0, \u97f5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g\",\"caption\":\"\u65b0, \u97f5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Keycloak\u5728API\u7f51\u5173\u4e2d\u9650\u5236\u5bf9API\u7684\u8bbf\u95ee - Blog - Silicon Cloud","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:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528keycloak\u5728api\u7f51\u5173\u4e2d\u9650\u5236\u5bf9api\u7684\u8bbf\u95ee\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Keycloak\u5728API\u7f51\u5173\u4e2d\u9650\u5236\u5bf9API\u7684\u8bbf\u95ee","og_description":"\u4eca\u5929\u8981\u505a\u7684\u4e8b\u60c5 \u5728\u7b2c19\u5929\u7684\u5723\u8bde\u964d\u4e34\u6d3b\u52a8\u4e2d\uff0c\u5c06\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528API Gateway\u8fdb\u884c\u8bbf\u95ee\u9650\u5236\uff08\u6388\u6743\uff09\uff0c\u5e76\u8ba8\u8bba\u4fdd [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528keycloak\u5728api\u7f51\u5173\u4e2d\u9650\u5236\u5bf9api\u7684\u8bbf\u95ee\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-08-28T03:33:07+00:00","article_modified_time":"2024-04-29T19:54:31+00:00","og_image":[{"url":"https:\/\/cdn.qiita.com\/emoji\/twemoji\/unicode\/26a0-fe0f.png"}],"author":"\u65b0, \u97f5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u65b0, \u97f5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"8 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/","name":"\u4f7f\u7528Keycloak\u5728API\u7f51\u5173\u4e2d\u9650\u5236\u5bf9API\u7684\u8bbf\u95ee - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-08-28T03:33:07+00:00","dateModified":"2024-04-29T19:54:31+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Keycloak\u5728API\u7f51\u5173\u4e2d\u9650\u5236\u5bf9API\u7684\u8bbf\u95ee"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/4ba4019495123db3038fd0809e6959c9","name":"\u65b0, \u97f5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d484b6c6e4ae82e8a9efea989e1d2af46d9b6ef128101e63b18f559fca0ae627?s=96&d=mm&r=g","caption":"\u65b0, \u97f5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunxin\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8keycloak%e5%9c%a8api%e7%bd%91%e5%85%b3%e4%b8%ad%e9%99%90%e5%88%b6%e5%af%b9api%e7%9a%84%e8%ae%bf%e9%97%ae\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50643","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=50643"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50643\/revisions"}],"predecessor-version":[{"id":89526,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50643\/revisions\/89526"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=50643"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=50643"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=50643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}