{"id":20380,"date":"2023-04-30T03:44:47","date_gmt":"2023-04-30T00:14:47","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/"},"modified":"2023-04-30T03:44:47","modified_gmt":"2023-04-30T00:14:47","slug":"custom-api-gateway-authorizer-with-golang-3l25","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/","title":{"rendered":"\u0633\u0641\u0627\u0631\u0634\u06cc API Gateway Authorizer \u0628\u0627 Golang"},"content":{"rendered":"<div data-article-id=\"1452333\" id=\"article-body\">\n<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0686\u06cc\u0632\u0647\u0627\u06cc \u062e\u0648\u0628 \u062f\u0631 \u0645\u0648\u0631\u062f \u0633\u0627\u062e\u062a \u0628\u0627 \u0633\u0631\u0648\u0631 \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0686\u06cc\u0632\u0647\u0627 \u0631\u0627 \u0628\u0647 \u06af\u0648\u0646\u0647 \u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0642\u0637\u0639\u0627\u062a \u0642\u0627\u0628\u0644 \u062a\u0631\u06a9\u06cc\u0628 \u0628\u0627\u0634\u0646\u062f.  \u0627\u06cc\u0646 \u0628\u062f\u0627\u0646 \u0645\u0639\u0646\u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0646\u0637\u0642 \u0631\u0627 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0645\u0646\u0633\u062c\u0645 \u0628\u0627 \u062f\u06cc\u06af\u0631 \u0645\u0646\u0637\u0642\u200c\u0647\u0627\u06cc \u0647\u0645\u0641\u06a9\u0631 \u062e\u0648\u062f \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f \u0648 \u0633\u067e\u0633 \u0686\u06cc\u0632\u0647\u0627 \u0631\u0627 \u0628\u0647\u200c\u0637\u0648\u0631 \u0622\u0632\u0627\u062f\u0627\u0646\u0647 \u0628\u0627 \u0633\u0627\u06cc\u0631 \u0627\u062c\u0632\u0627\u0621 \u0645\u0631\u062a\u0628\u0637 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u062f \u062a\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0646 \u0686\u06cc\u0632\u0647\u0627 \u0622\u0633\u0627\u0646 \u0628\u0627\u0634\u062f \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u062e\u06cc\u0644\u06cc \u0634\u06a9\u0646\u0646\u062f\u0647 \u0628\u0627\u0634\u062f.  \u0647\u0646\u06af\u0627\u0645 \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 API\u060c \u0634\u0645\u0627 \u0627\u063a\u0644\u0628 \u0628\u0647 \u06cc\u06a9 \u0646\u0648\u0639 Autorizer \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f \u062a\u0627 \u062a\u0648\u06a9\u0646 \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u0631\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u062f.  \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0645\u0646 \u0642\u0635\u062f \u062f\u0627\u0631\u0645 \u062f\u0631 \u0633\u0627\u062e\u062a \u06cc\u06a9 API Gateway Authorizer \u0633\u0641\u0627\u0631\u0634\u06cc \u0628\u0627 Golang \u0642\u062f\u0645 \u0628\u06af\u0630\u0627\u0631\u0645.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#API_Gateway_Authorizer_%D8%A8%D8%A7_Golang\" >API Gateway Authorizer \u0628\u0627 Golang<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#%D9%82%D8%AF%D9%85_%D8%B2%D8%AF%D9%86_%D8%A7%D8%B2_%D8%B7%D8%B1%DB%8C%D9%82_%DA%A9%D8%AF\" >\u0642\u062f\u0645 \u0632\u062f\u0646 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06a9\u062f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#CDK_%D8%A8%D8%A7_Cognito_%D8%B4%D8%B1%D9%88%D8%B9_%DA%A9%D9%86%DB%8C%D8%AF\" >CDK \u0628\u0627 Cognito \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#Autorizer_%D8%B1%D8%A7_%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D8%AF\" >Autorizer \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%D8%AA%D8%A7%D8%A8%D8%B9_%D8%AF%D8%B1_CDK\" >\u062a\u0639\u0631\u06cc\u0641 \u062a\u0627\u0628\u0639 \u062f\u0631 CDK<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D8%AA%D8%A7%D8%A8%D8%B9_%D8%AF%D8%B1_Golang\" >\u0627\u062c\u0631\u0627\u06cc \u062a\u0627\u0628\u0639 \u062f\u0631 Golang<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#CDK_%D9%85%D9%86%D8%A8%D8%B9_%D9%85%D8%AD%D8%A7%D9%81%D8%B8%D8%AA_%D8%B4%D8%AF%D9%87\" >CDK \u0645\u0646\u0628\u0639 \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#%D9%87%D9%85%D9%87_%D8%A7%D8%B4_%D8%B1%D8%A7_%D8%A8%DA%AF%D8%B0%D8%A7%D8%B1_%DA%A9%D9%86%D8%A7%D8%B1_%D9%87%D9%85\" >\u0647\u0645\u0647 \u0627\u0634 \u0631\u0627 \u0628\u06af\u0630\u0627\u0631 \u06a9\u0646\u0627\u0631 \u0647\u0645<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#%D8%A7%D9%88%D9%84%DB%8C%D9%86_%DA%86%DB%8C%D8%B2\" >\u0627\u0648\u0644\u06cc\u0646 \u0686\u06cc\u0632<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#Create_a_Cognito_User\" >Create a Cognito User<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#%D8%A7%D8%B2_%D8%AF%D8%B1%D9%88%D8%A7%D8%B2%D9%87_API_%D8%A8%D8%A7%D8%B2%D8%AF%DB%8C%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0627\u0632 \u062f\u0631\u0648\u0627\u0632\u0647 API \u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA\" >\u0627\u062c\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%D8%B4%DA%A9%D8%B3%D8%AA\" >\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u06a9\u0633\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%D9%85%D9%88%D9%81%D9%82%DB%8C%D8%AA_%D8%A2%D9%85%DB%8C%D8%B2\" >\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0648\u0641\u0642\u06cc\u062a \u0622\u0645\u06cc\u0632<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4_%D8%A7%DB%8C%D9%86_%D8%A8%D9%87_%D8%B5%D9%88%D8%B1%D8%AA_%D9%85%D8%AD%D9%84%DB%8C_%D8%A8%D8%A7_%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%AF%D9%87%D8%A7%DB%8C_%D9%86%D9%85%D9%88%D9%86%D9%87\" >\u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u06cc\u0646 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0628\u0627 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u0646\u0645\u0648\u0646\u0647<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D9%81%D8%A7%DB%8C%D9%84_%D9%85%D8%AD%D9%84%DB%8C\" >\u0627\u062c\u0631\u0627\u06cc \u0641\u0627\u06cc\u0644 \u0645\u062d\u0644\u06cc<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/nabfollower.com\/blog\/custom-api-gateway-authorizer-with-golang-3l25\/#%D8%A8%D8%B3%D8%AA%D9%87_%D8%A8%D9%86%D8%AF%DB%8C\" >\u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"API_Gateway_Authorizer_%D8%A8%D8%A7_Golang\"><\/span>\n<p>  API Gateway Authorizer \u0628\u0627 Golang<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0645\u0631\u062c\u0639\u060c \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u0645\u0648\u062f\u0627\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u0645 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u0645.<\/p>\n<p><\/p>\n<p>\u0622\u0646\u0686\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u0628\u0647 \u062f\u0633\u062a \u0645\u06cc \u0622\u06cc\u062f \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0627\u0633\u062a<\/p>\n<ul>\n<li>    \u06cc\u06a9 \u062f\u0631\u0648\u0627\u0632\u0647 API \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0627\u0631\u0647\u0627\u06cc \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u0645\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>    \u0627\u0632 \u0644\u0627\u0645\u0627\u0628\u062f\u0627 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u062c\u0648\u0632 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>    \u062a\u0648\u06a9\u0646 \u0631\u0627 \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 \u0627\u0633\u062a\u062e\u0631 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 Cognito \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>    \u0628\u0631\u0627\u06cc \u0635\u0631\u0641\u0647 \u062c\u0648\u06cc\u06cc \u062f\u0631 \u0645\u062d\u0627\u0633\u0628\u0627\u062a\u060c \u0627\u0632 \u06cc\u06a9 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0628\u0627 \u06cc\u06a9 \u0645\u062c\u0645\u0648\u0639\u0647 \u0633\u0641\u0627\u0631\u0634\u06cc TTL \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>    \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0627\u06af\u0631 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u062e\u0648\u0628 \u0628\u0627\u0634\u062f\u060c \u0627\u0645\u06a9\u0627\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u0646\u0628\u0639 \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647 \u0631\u0627 \u0646\u06cc\u0632 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0645\u0648\u0627\u0631\u062f \u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u0631\u0627 \u062f\u0631 \u0632\u0645\u06cc\u0646\u0647 \u0627\u062f\u0639\u0627 \u0627\u0631\u0627\u0626\u0647 \u06a9\u0646\u062f.<\/li>\n<\/ul>\n<p>\u06cc\u06a9 \u0646\u06cc\u0645\u0647 \u0647\u0645\u0631\u0627\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0646\u06cc\u0632 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u0645\u0646 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 JWT \u0631\u0627 \u06a9\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Lambdas \u0648 DyanamoDB \u0628\u0627 \u0622\u0646 \u06a9\u0627\u0631 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u06af\u0633\u062a\u0631\u0634 \u062f\u0647\u06cc\u062f.  \u0627\u06af\u0631 \u062f\u0631 \u0645\u0648\u0631\u062f \u0622\u0646 \u06a9\u0646\u062c\u06a9\u0627\u0648 \u0647\u0633\u062a\u06cc\u062f\u060c \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u0642\u0627\u0644\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%82%D8%AF%D9%85_%D8%B2%D8%AF%D9%86_%D8%A7%D8%B2_%D8%B7%D8%B1%DB%8C%D9%82_%DA%A9%D8%AF\"><\/span>\n<p>  \u0642\u062f\u0645 \u0632\u062f\u0646 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06a9\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"CDK_%D8%A8%D8%A7_Cognito_%D8%B4%D8%B1%D9%88%D8%B9_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  CDK \u0628\u0627 Cognito \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u062f\u0627\u0634\u062a\u0646 \u06cc\u06a9 Cognito \u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631\u060c \u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 Cognito \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u06cc\u06a9 \u06a9\u0644\u0627\u06cc\u0646\u062a \u0628\u0633\u0627\u0632\u06cc\u0645 \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u06cc\u0645 \u0648\u0627\u0631\u062f \u0634\u0648\u06cc\u062f.<\/p>\n<p>\u062a\u0639\u0631\u06cc\u0641 UserPool \u0645\u0627\u0646\u0646\u062f \u0634\u06a9\u0644 \u0632\u06cc\u0631 \u0627\u0633\u062a.  \u0686\u06cc\u0632 \u0632\u06cc\u0627\u062f\u06cc \u0646\u06cc\u0627\u0632 \u0628\u0647 \u062a\u0648\u0636\u06cc\u062d \u0627\u0636\u0627\u0641\u06cc \u0646\u062f\u0627\u0631\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0628\u0647 \u0633\u0645\u062a \u0645\u0634\u062a\u0631\u06cc \u0628\u0631\u0648\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">_pool<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">cognito<\/span><span class=\"p\">.<\/span><span class=\"nx\">UserPool<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">SamplePool<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n    <span class=\"na\">userPoolName<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">SamplePool<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">selfSignUpEnabled<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">signInAliases<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">email<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">username<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">preferredUsername<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">},<\/span>\n    <span class=\"na\">autoVerify<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">email<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">},<\/span>\n    <span class=\"na\">standardAttributes<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">email<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n            <span class=\"na\">required<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n            <span class=\"na\">mutable<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">},<\/span>\n    <span class=\"p\">},<\/span>\n    <span class=\"na\">customAttributes<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">isAdmin<\/span><span class=\"p\">:<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">cognito<\/span><span class=\"p\">.<\/span><span class=\"nx\">StringAttribute<\/span><span class=\"p\">({<\/span> <span class=\"na\">mutable<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span> <span class=\"p\">}),<\/span>\n    <span class=\"p\">},<\/span>\n    <span class=\"na\">passwordPolicy<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">minLength<\/span><span class=\"p\">:<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">requireLowercase<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">requireDigits<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">requireUppercase<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">requireSymbols<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">},<\/span>\n    <span class=\"na\">accountRecovery<\/span><span class=\"p\">:<\/span> <span class=\"nx\">cognito<\/span><span class=\"p\">.<\/span><span class=\"nx\">AccountRecovery<\/span><span class=\"p\">.<\/span><span class=\"nx\">EMAIL_ONLY<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">removalPolicy<\/span><span class=\"p\">:<\/span> <span class=\"nx\">cdk<\/span><span class=\"p\">.<\/span><span class=\"nx\">RemovalPolicy<\/span><span class=\"p\">.<\/span><span class=\"nx\">DESTROY<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">});<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u0641\u0632\u0648\u062f\u0646 \u06a9\u0644\u0627\u06cc\u0646\u062a \u0628\u0647 UserPool \u0646\u06cc\u0632 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a.  \u06af\u0632\u06cc\u0646\u0647 \u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f\u060c \u0627\u0645\u0627 \u06af\u0632\u06cc\u0646\u0647 \u0645\u0646 \u062f\u0631 \u0632\u06cc\u0631 \u0648\u0627\u0646\u06cc\u0644\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0632\u06cc\u0628\u0627 \u0627\u0633\u062a.  \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u06a9\u0644\u0627\u06cc\u0646\u062a\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0628\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0648 \u0627\u0646\u062c\u0627\u0645 \u0633\u0627\u06cc\u0631 \u062a\u0648\u0633\u0639\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u062f\u0631 \u0645\u0642\u0627\u0628\u0644 \u0622\u0646 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.  \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u0645\u0642\u0627\u0644\u0647 \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u06cc\u062f\u060c \u0645\u0646 \u0641\u0642\u0637 \u0627\u0632 Postman \u0628\u0631\u0627\u06cc \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u0647\u0645\u0647 \u0627\u06cc\u0646\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">_pool<\/span><span class=\"p\">.<\/span><span class=\"nx\">addClient<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">sample-client<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n    <span class=\"na\">userPoolClientName<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">sample-client<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">authFlows<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">adminUserPassword<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">custom<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">userPassword<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">userSrp<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">},<\/span>\n    <span class=\"na\">idTokenValidity<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Duration<\/span><span class=\"p\">.<\/span><span class=\"nx\">minutes<\/span><span class=\"p\">(<\/span><span class=\"mi\">60<\/span><span class=\"p\">),<\/span>\n    <span class=\"na\">refreshTokenValidity<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Duration<\/span><span class=\"p\">.<\/span><span class=\"nx\">days<\/span><span class=\"p\">(<\/span><span class=\"mi\">30<\/span><span class=\"p\">),<\/span>\n    <span class=\"na\">accessTokenValidity<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Duration<\/span><span class=\"p\">.<\/span><span class=\"nx\">minutes<\/span><span class=\"p\">(<\/span><span class=\"mi\">60<\/span><span class=\"p\">),<\/span>\n<span class=\"p\">});<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"Autorizer_%D8%B1%D8%A7_%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D8%AF\"><\/span>\n<p>  Autorizer \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0628\u0631\u0627\u06cc &#8220;\u0633\u0641\u0627\u0631\u0634\u06cc&#8221; \u062f\u0631 \u0633\u0627\u062e\u062a \u06cc\u06a9 API Gateway Authorizer \u0633\u0641\u0627\u0631\u0634\u06cc \u0628\u0627 Golang.  Autorizer \u0686\u06cc\u0632\u06cc \u0628\u06cc\u0634 \u0627\u0632 \u06cc\u06a9 \u062a\u0627\u0628\u0639 Lambda \u0646\u06cc\u0633\u062a.  \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062f\u0631 \u0635\u0648\u0631\u062a \u062a\u0645\u0627\u06cc\u0644 \u0627\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0648\u0627\u0631\u062f\u0627\u062a\u06cc \u0627\u0632 \u067e\u0634\u062a\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0627\u0634\u062f.  \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0633\u0627\u062f\u06af\u06cc\u060c \u0645\u0646 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0631\u0627 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062c\u0645\u0648\u0639\u0647 \u0632\u06cc\u0631\u0633\u0627\u062e\u062a \u06af\u0646\u062c\u0627\u0646\u062f\u0647 \u0627\u0645.  \u0627\u06af\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u0631 CDK \u0648 GoFunction \u0639\u0645\u06cc\u0642\u200c\u062a\u0631 \u0634\u0648\u06cc\u062f\u060c \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u0642\u0627\u0644\u0647\u200c\u0627\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f<\/p>\n<h4><span class=\"ez-toc-section\" id=\"%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%D8%AA%D8%A7%D8%A8%D8%B9_%D8%AF%D8%B1_CDK\"><\/span>\n<p>  \u062a\u0639\u0631\u06cc\u0641 \u062a\u0627\u0628\u0639 \u062f\u0631 CDK<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nx\">AuthorizerFunction<\/span> <span class=\"kd\">extends<\/span> <span class=\"nx\">Construct<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">private<\/span> <span class=\"k\">readonly<\/span> <span class=\"nx\">_func<\/span><span class=\"p\">:<\/span> <span class=\"nx\">GoFunction<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"kd\">constructor<\/span><span class=\"p\">(<\/span><span class=\"nx\">scope<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Construct<\/span><span class=\"p\">,<\/span> <span class=\"nx\">id<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">,<\/span> <span class=\"nx\">poolId<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">super<\/span><span class=\"p\">(<\/span><span class=\"nx\">scope<\/span><span class=\"p\">,<\/span> <span class=\"nx\">id<\/span><span class=\"p\">);<\/span>\n\n        <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">_func<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">GoFunction<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">AuthorizerFunc<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n            <span class=\"na\">entry<\/span><span class=\"p\">:<\/span> <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nx\">join<\/span><span class=\"p\">(<\/span><span class=\"nx\">__dirname<\/span><span class=\"p\">,<\/span> <span class=\"s2\">`..\/..\/..\/src\/authorizer`<\/span><span class=\"p\">),<\/span>\n            <span class=\"na\">functionName<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">authorizer-func<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"na\">timeout<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Duration<\/span><span class=\"p\">.<\/span><span class=\"nx\">seconds<\/span><span class=\"p\">(<\/span><span class=\"mi\">30<\/span><span class=\"p\">),<\/span>\n            <span class=\"na\">environment<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n                <span class=\"na\">USER_POOL_ID<\/span><span class=\"p\">:<\/span> <span class=\"nx\">poolId<\/span><span class=\"p\">,<\/span>\n            <span class=\"p\">},<\/span>\n        <span class=\"p\">});<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"kd\">get<\/span> <span class=\"kd\">function<\/span><span class=\"p\">():<\/span> <span class=\"nx\">GoFunction<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">_func<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u0630\u06a9\u0631 \u06a9\u0631\u062f\u0645\u060c \u06cc\u06a9 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0633\u0627\u062f\u0647 GoFunction.  \u062a\u0646\u0647\u0627 \u0646\u06a9\u062a\u0647 \u062c\u0627\u0644\u0628 \u062a\u0648\u062c\u0647\u060c \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc \u0628\u0631\u0627\u06cc USER_POOL_ID \u0627\u0633\u062a.  \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u0645 \u06a9\u0647 \u0686\u0631\u0627 \u0627\u06cc\u0646 \u0645\u0647\u0645 \u0627\u0633\u062a.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D8%AA%D8%A7%D8%A8%D8%B9_%D8%AF%D8%B1_Golang\"><\/span>\n<p>  \u0627\u062c\u0631\u0627\u06cc \u062a\u0627\u0628\u0639 \u062f\u0631 Golang<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0627\u0632 \u0633\u0627\u062e\u062a \u06cc\u06a9 API Gateway Authorizer \u0633\u0641\u0627\u0631\u0634\u06cc \u0628\u0627 Golang\u060c \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u0645 JWT \u0631\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u0645 \u0648 \u0632\u0645\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc \u0627\u0636\u0627\u0641\u06cc \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u0645.  \u0627\u062c\u0631\u0627\u06cc \u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0633\u06cc\u0627\u0631 \u0645\u062a\u0641\u0627\u0648\u062a \u0628\u0627\u0634\u062f\u060c \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0627\u0633\u062a \u06a9\u0647 \u0645\u0646 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0631\u0627 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u0645.  \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0631 \u0627\u0633\u0627\u0633 \u0646\u06cc\u0627\u0632 \u0686\u0646\u062f\u06cc\u0646 \u0645\u062c\u0648\u0632\u062f\u0647\u0646\u062f\u0647 \u0645\u062e\u062a\u0644\u0641 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u0648 \u0645\u0646\u0627\u0628\u0639 \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647 \u0634\u0645\u0627 \u0627\u0632 \u0622\u0646\u0686\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627\u06cc \u0622\u0646\u0647\u0627 \u062f\u0631 \u067e\u0634\u062a\u0647 \u062a\u0645\u0627\u0633 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc\u200c\u0627\u0641\u062a\u062f \u0627\u0637\u0644\u0627\u0639\u06cc \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f.<\/p>\n<p>\u0627\u0648\u0644\u06cc\u0646 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u0645 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u0645 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u062c\u0645\u0648\u0639\u0647 \u06a9\u0644\u06cc\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0634\u0646\u0627\u062e\u062a\u0647 \u0634\u062f\u0647 Cognito \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.  \u0645\u0646 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u062f\u0631 <code>init()<\/code> \u062a\u0627\u0628\u0639 \u0686\u0648\u0646 \u0645\u06cc\u200c\u062f\u0627\u0646\u0645 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 Lambda \u0645\u0642\u062f\u0627\u0631 \u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u06cc\u06a9 \u0628\u0627\u0631 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u0633\u067e\u0633 \u062e\u0631\u0648\u062c\u06cc \u0631\u0627 \u062f\u0631 \u0645\u062a\u063a\u06cc\u0631\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0645 \u06a9\u0647 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u0633\u0631\u0627\u0633\u0631 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc\u200c\u0647\u0627\u06cc Lambda \u062d\u0641\u0638 \u0645\u06cc\u200c\u06a9\u0646\u062f.  \u0646\u0647 \u0634\u0631\u0648\u0639 \u0647\u0627\u06cc \u0633\u0631\u062f\u060c \u0628\u0644\u06a9\u0647 \u0641\u0631\u0627\u062e\u0648\u0627\u0646 \u0647\u0627.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">func<\/span> <span class=\"n\">init<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">SetFormatter<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">JSONFormatter<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">PrettyPrint<\/span><span class=\"o\">:<\/span> <span class=\"no\">false<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">})<\/span>\n\n    <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">SetLevel<\/span><span class=\"p\">(<\/span><span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">DebugLevel<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">region<\/span> <span class=\"o\">:=<\/span> <span class=\"s\">\"us-west-2\"<\/span>\n    <span class=\"n\">poolId<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">Getenv<\/span><span class=\"p\">(<\/span><span class=\"s\">\"USER_POOL_ID\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">var<\/span> <span class=\"n\">err<\/span> <span class=\"kt\">error<\/span>\n\n    <span class=\"n\">jwksUrl<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">fmt<\/span><span class=\"o\">.<\/span><span class=\"n\">Sprintf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"https:\/\/cognito-idp.%s.amazonaws.com\/%s\/.well-known\/jwks.json\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">region<\/span><span class=\"p\">,<\/span> <span class=\"n\">poolId<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">keySet<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">=<\/span> <span class=\"n\">jwk<\/span><span class=\"o\">.<\/span><span class=\"n\">Fetch<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"o\">.<\/span><span class=\"n\">TODO<\/span><span class=\"p\">(),<\/span> <span class=\"n\">jwksUrl<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">WithFields<\/span><span class=\"p\">(<\/span><span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Fields<\/span><span class=\"p\">{<\/span>\n            <span class=\"s\">\"error\"<\/span><span class=\"o\">:<\/span> <span class=\"n\">err<\/span><span class=\"p\">,<\/span>\n            <span class=\"s\">\"url\"<\/span><span class=\"o\">:<\/span>   <span class=\"n\">jwksUrl<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">})<\/span><span class=\"o\">.<\/span><span class=\"n\">Fatal<\/span><span class=\"p\">(<\/span><span class=\"s\">\"error getting keyset\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0631\u0627 <code>jwksUrl<\/code> \u0645\u062a\u063a\u06cc\u0631 \u0628\u0627\u0644\u0627 \u062f\u0631 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u0647 AWS \u0645\u0633\u062a\u0646\u062f \u0634\u062f\u0647 \u0627\u0633\u062a.  \u0648 \u0645\u0646 \u0627\u0632 <code>\"github.com\/lestrrat-go\/jwx\/jwt\"<\/code> \u0628\u0647 \u0646\u0645\u0627\u06cc\u0646\u062f\u06af\u06cc \u0627\u0632 <code>KeySet<\/code> \u06a9\u0647 \u0645\u0646 \u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u0648 \u0627\u0646\u0642\u0636\u0627\u06cc \u062a\u0648\u06a9\u0646 \u0628\u0627 \u0622\u0646\u0647\u0627 \u06a9\u0627\u0631 \u062e\u0648\u0627\u0647\u0645 \u06a9\u0631\u062f.  \u06cc\u0627\u062f\u062a \u0628\u0627\u0634\u062f <code>USER_POOL_ID<\/code> \u0645\u062a\u063a\u06cc\u0631 \u062f\u0631 CDK \u0628\u0627\u0644\u0627\u061f  \u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 \u0645\u0637\u0631\u062d \u0645\u06cc \u0634\u0648\u062f.  \u0633\u0627\u062e\u062a\u0646 \u0622\u0646 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0645\u0639\u0631\u0648\u0641 \u0628\u0647 UserPoolId \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f<\/p>\n<p>\u0628\u062e\u0634 \u0628\u0639\u062f\u06cc \u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u0646\u062c\u0627\u0645 \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u0627\u0633\u062a.  \u0645\u0646 \u0642\u0635\u062f \u0646\u062f\u0627\u0631\u0645 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0628\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0628\u067e\u0631\u062f\u0627\u0632\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u06cc\u0646 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc\u200c\u0627\u0641\u062a\u062f\u060c \u0627\u0645\u0627 \u0627\u0633\u0627\u0633\u0627\u064b \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u062f:<\/p>\n<ul>\n<li>    \u0633\u0627\u062e\u062a\u0627\u0631 \u062a\u0648\u06a9\u0646 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f<\/li>\n<li>    \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u06a9\u0644\u06cc\u062f \u0627\u0645\u0636\u0627 \u0628\u0627 \u0627\u0644\u06af\u0648\u0631\u06cc\u062a\u0645 \u06a9\u0644\u06cc\u062f \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0631\u062f<\/li>\n<li>    \u0627\u0646\u0642\u0636\u0627 \u0631\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f \u0648 \u0627\u06cc\u0646\u06a9\u0647 \u062a\u0648\u06a9\u0646 \u0645\u0646\u0642\u0636\u06cc \u0646\u0634\u062f\u0647 \u0628\u0627\u0634\u062f<\/li>\n<\/ul>\n<p>\u0627\u06cc\u0646 \u0686\u06cc\u0632 \u062e\u0648\u0628\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0627\u0633\u062a \ud83d\ude42 \u0648 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0622\u0646 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"n\">bounds<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">event<\/span><span class=\"o\">.<\/span><span class=\"n\">AuthorizationToken<\/span><span class=\"p\">)<\/span>\n<span class=\"n\">token<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">event<\/span><span class=\"o\">.<\/span><span class=\"n\">AuthorizationToken<\/span><span class=\"p\">[<\/span><span class=\"m\">7<\/span><span class=\"o\">:<\/span><span class=\"n\">bounds<\/span><span class=\"p\">]<\/span>\n<span class=\"n\">parsedToken<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">jwt<\/span><span class=\"o\">.<\/span><span class=\"n\">Parse<\/span><span class=\"p\">(<\/span>\n    <span class=\"p\">[]<\/span><span class=\"kt\">byte<\/span><span class=\"p\">(<\/span><span class=\"n\">token<\/span><span class=\"p\">),<\/span>\n    <span class=\"n\">jwt<\/span><span class=\"o\">.<\/span><span class=\"n\">WithKeySet<\/span><span class=\"p\">(<\/span><span class=\"n\">keySet<\/span><span class=\"p\">),<\/span>\n    <span class=\"n\">jwt<\/span><span class=\"o\">.<\/span><span class=\"n\">WithValidate<\/span><span class=\"p\">(<\/span><span class=\"no\">true<\/span><span class=\"p\">),<\/span>\n<span class=\"p\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062e\u0631\u0648\u062c\u06cc \u0627\u0632 <code>jwt.Parse<\/code> \u06cc\u06a9 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f <code>error<\/code> \u0627\u06af\u0631 \u0647\u0631 \u06cc\u06a9 \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u0628\u0627\u0644\u0627 \u0634\u06a9\u0633\u062a \u0628\u062e\u0648\u0631\u062f.  \u0627\u06cc\u0646 \u0628\u062f\u0627\u0646 \u0645\u0639\u0646\u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0635\u0648\u0631\u062a\u060c \u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0646\u06a9\u0627\u0631 \u06a9\u0646\u06cc\u062f.  \u0645\u062b\u0644 \u0627\u06cc\u0646:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">return<\/span> <span class=\"n\">events<\/span><span class=\"o\">.<\/span><span class=\"n\">APIGatewayCustomAuthorizerResponse<\/span><span class=\"p\">{<\/span>\n    <span class=\"n\">PrincipalID<\/span><span class=\"o\">:<\/span> <span class=\"s\">\"\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">PolicyDocument<\/span><span class=\"o\">:<\/span> <span class=\"n\">events<\/span><span class=\"o\">.<\/span><span class=\"n\">APIGatewayCustomAuthorizerPolicy<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">Version<\/span><span class=\"o\">:<\/span> <span class=\"s\">\"2012-10-17\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">Statement<\/span><span class=\"o\">:<\/span> <span class=\"p\">[]<\/span><span class=\"n\">events<\/span><span class=\"o\">.<\/span><span class=\"n\">IAMPolicyStatement<\/span><span class=\"p\">{<\/span>\n            <span class=\"p\">{<\/span>\n                <span class=\"n\">Action<\/span><span class=\"o\">:<\/span>   <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">{<\/span><span class=\"s\">\"execute-api:Invoke\"<\/span><span class=\"p\">},<\/span>\n                <span class=\"n\">Effect<\/span><span class=\"o\">:<\/span>   <span class=\"s\">\"Deny\"<\/span><span class=\"p\">,<\/span> <span class=\"c\">\/\/ Here is the rejection<\/span>\n                <span class=\"n\">Resource<\/span><span class=\"o\">:<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">{<\/span><span class=\"s\">\"*\"<\/span><span class=\"p\">},<\/span>\n            <span class=\"p\">},<\/span>\n        <span class=\"p\">},<\/span>\n    <span class=\"p\">},<\/span>\n    <span class=\"n\">UsageIdentifierKey<\/span><span class=\"o\">:<\/span> <span class=\"s\">\"\"<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">},<\/span> <span class=\"no\">nil<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0645\u0646 \u062e\u0637\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631 \u0646\u0645\u06cc \u06af\u0631\u062f\u0645.  \u0627\u06cc\u0646 \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0631\u0627 \u0631\u062f \u0645\u06cc \u06a9\u0646\u062f.  \u067e\u0627\u0633\u062e 403 \u062e\u0637\u0627 \u0646\u06cc\u0633\u062a\u060c \u067e\u0633 \u0686\u0631\u0627 \u06cc\u06a9\u06cc \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u062f\u061f<\/p>\n<p>\u0648 \u062f\u0631 \u0635\u0648\u0631\u062a \u062b\u0627\u0628\u062a \u0628\u0648\u062f\u0646 \u0647\u0645\u0647 \u0686\u06cc\u0632\u060c \u0641\u0642\u0637 \u0627\u062c\u0627\u0632\u0647 \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">return<\/span> <span class=\"n\">events<\/span><span class=\"o\">.<\/span><span class=\"n\">APIGatewayCustomAuthorizerResponse<\/span><span class=\"p\">{<\/span>\n    <span class=\"n\">PrincipalID<\/span><span class=\"o\">:<\/span> <span class=\"s\">\"\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">PolicyDocument<\/span><span class=\"o\">:<\/span> <span class=\"n\">events<\/span><span class=\"o\">.<\/span><span class=\"n\">APIGatewayCustomAuthorizerPolicy<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">Version<\/span><span class=\"o\">:<\/span> <span class=\"s\">\"2012-10-17\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">Statement<\/span><span class=\"o\">:<\/span> <span class=\"p\">[]<\/span><span class=\"n\">events<\/span><span class=\"o\">.<\/span><span class=\"n\">IAMPolicyStatement<\/span><span class=\"p\">{<\/span>\n            <span class=\"p\">{<\/span>\n                <span class=\"n\">Action<\/span><span class=\"o\">:<\/span>   <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">{<\/span><span class=\"s\">\"execute-api:Invoke\"<\/span><span class=\"p\">},<\/span>\n                <span class=\"n\">Effect<\/span><span class=\"o\">:<\/span>   <span class=\"s\">\"Allow\"<\/span><span class=\"p\">,<\/span> <span class=\"c\">\/\/ Return Allow<\/span>\n                <span class=\"n\">Resource<\/span><span class=\"o\">:<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">{<\/span><span class=\"s\">\"*\"<\/span><span class=\"p\">},<\/span>\n            <span class=\"p\">},<\/span>\n        <span class=\"p\">},<\/span>\n    <span class=\"p\">},<\/span>\n    <span class=\"n\">Context<\/span><span class=\"o\">:<\/span>            <span class=\"n\">DumpClaims<\/span><span class=\"p\">(<\/span><span class=\"n\">parsedToken<\/span><span class=\"p\">),<\/span>\n    <span class=\"n\">UsageIdentifierKey<\/span><span class=\"o\">:<\/span> <span class=\"s\">\"\"<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">},<\/span> <span class=\"no\">nil<\/span>\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0646 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc \u062e\u0648\u0627\u0647\u0645 \u0622\u0646 \u0631\u0627 \u0628\u0631\u062c\u0633\u062a\u0647 \u06a9\u0646\u0645 <code>DumpClaims<\/code> \u062a\u0627\u0628\u0639.  \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f\u061f<\/p>\n<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0686\u06cc\u0632\u0647\u0627\u06cc \u062c\u0627\u0644\u0628 \u062f\u0631 \u0645\u0648\u0631\u062f Lambda Authorizers \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646\u0686\u0647 \u0631\u0627 \u06a9\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 &#8220;\u0632\u0645\u06cc\u0646\u0647&#8221; \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f \u0628\u0647 \u0637\u0631\u0641 \u0647\u0627\u06cc \u067e\u0627\u06cc\u06cc\u0646 \u062f\u0633\u062a \u06af\u0633\u062a\u0631\u0634 \u062f\u0647\u06cc\u062f.  \u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u0647\u06cc\u062f \u0642\u0637\u0639\u0627\u062a\u06cc \u0627\u0632 \u062a\u0648\u06a9\u0646 \u0631\u0627 \u0628\u0647 \u0645\u0642\u0635\u062f \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u062d\u0645\u0644 \u06a9\u0646\u06cc\u062f\u060c \u0686\u0647\u061f  \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a\u06cc \u06a9\u0647 \u0639\u0645\u0648\u0645\u06cc \u0647\u0633\u062a\u0646\u062f \u0628\u0631\u0627\u06cc JWT \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0627\u0645\u0627 \u0627\u062f\u0639\u0627\u0647\u0627\u06cc \u062e\u0635\u0648\u0635\u06cc \u06cc\u0627 \u0645\u0648\u0627\u0631\u062f\u06cc \u06a9\u0647 \u0634\u0645\u0627 \u062a\u0645\u062f\u06cc\u062f \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u062f \u0627\u0631\u0633\u0627\u0644 \u0646\u0645\u06cc\u200c\u0634\u0648\u062f.  \u0634\u0627\u06cc\u062f \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u0634\u062a\u0631\u06cc\u061f  \u0634\u0627\u06cc\u062f \u0686\u0646\u062f \u0646\u0642\u0634\u061f<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">func<\/span> <span class=\"n\">DumpClaims<\/span><span class=\"p\">(<\/span><span class=\"n\">token<\/span> <span class=\"n\">jwt<\/span><span class=\"o\">.<\/span><span class=\"n\">Token<\/span><span class=\"p\">)<\/span> <span class=\"k\">map<\/span><span class=\"p\">[<\/span><span class=\"kt\">string<\/span><span class=\"p\">]<\/span><span class=\"k\">interface<\/span><span class=\"p\">{}<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">m<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">make<\/span><span class=\"p\">(<\/span><span class=\"k\">map<\/span><span class=\"p\">[<\/span><span class=\"kt\">string<\/span><span class=\"p\">]<\/span><span class=\"k\">interface<\/span><span class=\"p\">{})<\/span>\n\n    <span class=\"n\">m<\/span><span class=\"p\">[<\/span><span class=\"s\">\"customKey\"<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"SomeValueHere\"<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"n\">m<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0633\u0627\u062f\u0647 \u0627\u0633\u062a\u060c \u0645\u0646 \u0641\u0642\u0637 \u06cc\u06a9 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0645 <code>customKey<\/code> \u0628\u0647 \u0628\u0627\u0641\u062a.  \u0645\u0646 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0632\u0648\u062f\u06cc \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"CDK_%D9%85%D9%86%D8%A8%D8%B9_%D9%85%D8%AD%D8%A7%D9%81%D8%B8%D8%AA_%D8%B4%D8%AF%D9%87\"><\/span>\n<p>  CDK \u0645\u0646\u0628\u0639 \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0646\u06cc\u0645\u06cc \u0627\u0632 \u0644\u0630\u062a \u0633\u0627\u062e\u062a \u06cc\u06a9 API Gateway Authorizer \u0633\u0641\u0627\u0631\u0634\u06cc \u0628\u0627 Golang \u0628\u0647 \u067e\u0627\u06cc\u0627\u0646 \u0631\u0633\u06cc\u062f\u0647 \u0627\u0633\u062a.  \u0627\u06cc\u0646 \u0641\u0642\u0637 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0646\u06cc\u0645\u0647 \u062f\u06cc\u06af\u0631 \u0634\u0631\u0648\u0639 \u0645\u06cc \u0634\u0648\u062f!  \u062d\u0627\u0644\u0627 \u06a9\u0647 \u0635\u0627\u062d\u0628 \u0627\u062e\u062a\u06cc\u0627\u0631 \u062f\u0627\u0631\u06cc\u0645 \u0686\u0647 \u06a9\u0646\u06cc\u0645\u061f  \u0627\u0644\u0628\u062a\u0647 \u06cc\u06a9 \u0645\u0646\u0628\u0639 \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647 \u0631\u0627 \u067e\u0634\u062a \u0633\u0631 \u0628\u06af\u0630\u0627\u0631\u06cc\u062f!<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"kd\">constructor<\/span><span class=\"p\">(<\/span><span class=\"nx\">scope<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Construct<\/span><span class=\"p\">,<\/span> <span class=\"nx\">id<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">,<\/span> <span class=\"nx\">func<\/span><span class=\"p\">:<\/span> <span class=\"nx\">IFunction<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">super<\/span><span class=\"p\">(<\/span><span class=\"nx\">scope<\/span><span class=\"p\">,<\/span> <span class=\"nx\">id<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"kd\">const<\/span> <span class=\"nx\">authorizer<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">TokenAuthorizer<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">TokenAuthorizer<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">authorizerName<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">BearTokenAuthorizer<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">handler<\/span><span class=\"p\">:<\/span> <span class=\"nx\">func<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">});<\/span>\n\n    <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">_api<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">RestApi<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">RestApi<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Sample API<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">restApiName<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">Sample API<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">deployOptions<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n            <span class=\"na\">stageName<\/span><span class=\"p\">:<\/span> <span class=\"s2\">`main`<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">},<\/span>\n        <span class=\"na\">defaultMethodOptions<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n            <span class=\"na\">authorizer<\/span><span class=\"p\">:<\/span> <span class=\"nx\">authorizer<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">},<\/span>\n    <span class=\"p\">});<\/span>\n<span class=\"p\">}<\/span>\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u06a9\u062f CDK \u062f\u0631\u0648\u0627\u0632\u0647 API \u0627\u0633\u062a.  \u062a\u0648\u062c\u0647 \u06a9\u0646\u06cc\u062f \u062f\u0631 <code>defaultMethodOptions<\/code> \u06a9\u0647 \u0645\u0646 \u06cc\u06a9 &#8220;\u0645\u062c\u0648\u0632&#8221; \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0645.  \u0627\u06cc\u0646 \u0641\u0642\u0637 \u06cc\u06a9 \u0627\u0633\u062a <code>IFunction<\/code>.  \u06a9\u0647 \u0628\u0627\u0632 \u0647\u0645 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0648\u0627\u0631\u062f\u0627\u062a\u06cc \u0628\u0627\u0634\u062f \u06cc\u0627 \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0627\u060c Autorizer\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u0628\u0647 \u062a\u0627\u0632\u06af\u06cc \u0633\u0627\u062e\u062a\u0647 \u0627\u06cc\u0645.<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0628\u0627 \u06cc\u06a9 API\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u06cc\u06a9 \u0645\u0646\u0628\u0639 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"kd\">constructor<\/span><span class=\"p\">(<\/span><span class=\"nx\">scope<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Construct<\/span><span class=\"p\">,<\/span> <span class=\"nx\">id<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">,<\/span> <span class=\"nx\">api<\/span><span class=\"p\">:<\/span> <span class=\"nx\">RestApi<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">super<\/span><span class=\"p\">(<\/span><span class=\"nx\">scope<\/span><span class=\"p\">,<\/span> <span class=\"nx\">id<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">_func<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">GoFunction<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">,<\/span> <span class=\"s2\">`ProtectedResource`<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">entry<\/span><span class=\"p\">:<\/span> <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nx\">join<\/span><span class=\"p\">(<\/span><span class=\"nx\">__dirname<\/span><span class=\"p\">,<\/span> <span class=\"s2\">`..\/..\/..\/src\/protected-resource`<\/span><span class=\"p\">),<\/span>\n        <span class=\"na\">functionName<\/span><span class=\"p\">:<\/span> <span class=\"s2\">`protected-resource-func`<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">timeout<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Duration<\/span><span class=\"p\">.<\/span><span class=\"nx\">seconds<\/span><span class=\"p\">(<\/span><span class=\"mi\">30<\/span><span class=\"p\">),<\/span>\n    <span class=\"p\">});<\/span>\n\n    <span class=\"nx\">api<\/span><span class=\"p\">.<\/span><span class=\"nx\">root<\/span><span class=\"p\">.<\/span><span class=\"nx\">addMethod<\/span><span class=\"p\">(<\/span>\n        <span class=\"dl\">\"<\/span><span class=\"s2\">GET<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"k\">new<\/span> <span class=\"nx\">LambdaIntegration<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">_func<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n            <span class=\"na\">proxy<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">})<\/span>\n    <span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644\u060c \u0645\u0646 \u0627\u0632 \u06cc\u06a9 \u0627\u062f\u063a\u0627\u0645 \u067e\u0631\u0627\u06a9\u0633\u06cc Lambda \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645 \u0648 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u0633\u0637\u062d &#8220;\u0631\u06cc\u0634\u0647&#8221; \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u0645.  \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a GET \u0631\u0627 \u062f\u0631 \u0645\u0633\u06cc\u0631 &#8220;https:\/\/dev.to\/&#8221; \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645.<\/p>\n<p>\u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0648\u0627\u0642\u0639\u06cc \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u06cc\u06a9 \u0646\u0645\u0627\u06cc\u0634 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">func<\/span> <span class=\"n\">handler<\/span><span class=\"p\">(<\/span><span class=\"n\">ctx<\/span> <span class=\"n\">context<\/span><span class=\"o\">.<\/span><span class=\"n\">Context<\/span><span class=\"p\">,<\/span> <span class=\"n\">event<\/span> <span class=\"n\">events<\/span><span class=\"o\">.<\/span><span class=\"n\">APIGatewayProxyRequest<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"o\">*<\/span><span class=\"n\">events<\/span><span class=\"o\">.<\/span><span class=\"n\">APIGatewayProxyResponse<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n\n    <span class=\"n\">success<\/span> <span class=\"o\">:=<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">Response<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">Message<\/span><span class=\"o\">:<\/span>   <span class=\"s\">\"Congrats! A Payload\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">CustomKey<\/span><span class=\"o\">:<\/span> <span class=\"n\">event<\/span><span class=\"o\">.<\/span><span class=\"n\">RequestContext<\/span><span class=\"o\">.<\/span><span class=\"n\">Authorizer<\/span><span class=\"p\">[<\/span><span class=\"s\">\"customKey\"<\/span><span class=\"p\">]<\/span><span class=\"o\">.<\/span><span class=\"p\">(<\/span><span class=\"kt\">string<\/span><span class=\"p\">),<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">b<\/span><span class=\"p\">,<\/span> <span class=\"n\">_<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">Marshal<\/span><span class=\"p\">(<\/span><span class=\"n\">success<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">return<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">events<\/span><span class=\"o\">.<\/span><span class=\"n\">APIGatewayProxyResponse<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">Body<\/span><span class=\"o\">:<\/span>       <span class=\"kt\">string<\/span><span class=\"p\">(<\/span><span class=\"n\">b<\/span><span class=\"p\">),<\/span>\n        <span class=\"n\">StatusCode<\/span><span class=\"o\">:<\/span> <span class=\"m\">200<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">Headers<\/span><span class=\"o\">:<\/span> <span class=\"k\">map<\/span><span class=\"p\">[<\/span><span class=\"kt\">string<\/span><span class=\"p\">]<\/span><span class=\"kt\">string<\/span><span class=\"p\">{<\/span>\n            <span class=\"s\">\"Content-Type\"<\/span><span class=\"o\">:<\/span> <span class=\"s\">\"application\/json\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">},<\/span>\n    <span class=\"p\">},<\/span> <span class=\"no\">nil<\/span>\n\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>customKey<\/code> \u0648 <code>event.RequestContext.Authorizer[\"customKey\"].(string)<\/code>.  \u0627\u06cc\u0646 event.RequestContext.Authorizer \u06cc\u06a9 \u00ab\u0646\u0642\u0634\u0647\u00bb \u062f\u0627\u0631\u062f[string]\u0631\u0627\u0628\u0637{} \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u0646\u0641\u0639 \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u06cc \u067e\u0627\u06cc\u0627\u0646 \u0647\u0633\u062a\u0646\u062f\u060c \u0627\u0645\u0627 \u0645\u0646 \u0627\u0632 \u0622\u0646 \u0628\u0631\u0627\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u0634\u062a\u0631\u06cc \u0648 \u0646\u0642\u0634 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0648 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0646\u0645\u0627\u06cc\u0647 \u0627\u06cc \u06a9\u0647 \u06af\u0633\u062a\u0631\u0634 \u062f\u0627\u062f\u0647 \u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%87%D9%85%D9%87_%D8%A7%D8%B4_%D8%B1%D8%A7_%D8%A8%DA%AF%D8%B0%D8%A7%D8%B1_%DA%A9%D9%86%D8%A7%D8%B1_%D9%87%D9%85\"><\/span>\n<p>  \u0647\u0645\u0647 \u0627\u0634 \u0631\u0627 \u0628\u06af\u0630\u0627\u0631 \u06a9\u0646\u0627\u0631 \u0647\u0645<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u062e\u0631\u0648\u062c\u06cc \u06cc\u06a9 API Gateway Authorizer \u0633\u0641\u0627\u0631\u0634\u06cc \u0631\u0627 \u0628\u0627 Golang \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u06a9\u0646\u06cc\u0645.  \u0628\u0631\u0627\u06cc \u0622\u0646\u060c \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0633\u0646\u0627\u0631\u06cc\u0648\u06cc\u06cc \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u06cc\u0646 \u0647\u0645\u0647 \u0628\u0627 \u0647\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D9%88%D9%84%DB%8C%D9%86_%DA%86%DB%8C%D8%B2\"><\/span>\n<p>  \u0627\u0648\u0644\u06cc\u0646 \u0686\u06cc\u0632<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u0628\u0648\u062a \u0627\u0633\u062a\u0631\u067e:<\/p>\n<p><code\/><code>base<br \/>cdk deploy<br \/><\/code><code\/><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Create_a_Cognito_User\"><\/span>\n<p>  Create a Cognito User<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Once the infrastructure is deployed, you should have<\/p>\n<ul>\n<li>  2 Lambdas\n<ul>\n<li>  Authorizer<\/li>\n<li>  ProtectedResource<\/li>\n<\/ul>\n<\/li>\n<li>  API Gateway\n<ul>\n<li>  One endpoint to the ProtectedResource with the Authoirzer attached<\/li>\n<li>  An Authorizer<\/li>\n<li>  A Deployed Stage<\/li>\n<\/ul>\n<\/li>\n<li>  A Cognito UserPool<\/li>\n<\/ul>\n<p>Here is what your UserPool should look like<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/\u0633\u0641\u0627\u0631\u0634\u06cc-API-Gateway-Authorizer-\u0628\u0627-Golang.jpg\" alt=\"UserPool\" loading=\"lazy\" width=\"800\" height=\"249\" title=\"\">. Notice the User Pool ID (I&#8217;ve cleared mine for reasons). You&#8217;ll want to copy that ID as it&#8217;ll matter later.<\/p>\n<p>Now the Client List<br \/><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1682813687_534_\u0633\u0641\u0627\u0631\u0634\u06cc-API-Gateway-Authorizer-\u0628\u0627-Golang.jpg\" alt=\"ClientList\" loading=\"lazy\" width=\"800\" height=\"249\" title=\"\"><\/p>\n<p>ClientID \u062f\u0631 \u0622\u0646 \u062c\u062f\u0648\u0644 \u0646\u06cc\u0632 \u0645\u0647\u0645 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.  \u062f\u0648\u0628\u0627\u0631\u0647\u060c \u0645\u0627\u0644 \u0645\u0646 \u067e\u0627\u06a9 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0628\u0647 \u0634\u0645\u0627 \u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<p>\u062f\u0631 \u0622\u062e\u0631\u060c \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u0648 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062a\u0623\u06cc\u06cc\u062f \u0634\u062f\u0647 \u0639\u0644\u0627\u0645\u062a \u0628\u0632\u0646\u06cc\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1682813687_197_\u0633\u0641\u0627\u0631\u0634\u06cc-API-Gateway-Authorizer-\u0628\u0627-Golang.jpg\" alt=\"CreatedUser\" loading=\"lazy\" width=\"800\" height=\"225\" title=\"\"><\/p>\n<p>\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0639\u0644\u0627\u0645\u062a \u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f \u0632\u06cc\u0631\u0627 \u0645\u0627 \u062f\u0631 \u0639\u0631\u0636 \u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647 \u0627\u0632 Password Flow \u0628\u0631\u0627\u06cc \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B2_%D8%AF%D8%B1%D9%88%D8%A7%D8%B2%D9%87_API_%D8%A8%D8%A7%D8%B2%D8%AF%DB%8C%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0627\u0632 \u062f\u0631\u0648\u0627\u0632\u0647 API \u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u0645\u0646\u0628\u0639 \u0627\u0635\u0644\u06cc \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647 \u0645\u0627\u060c \u0627\u06cc\u0646\u06af\u0648\u0646\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1682813687_642_\u0633\u0641\u0627\u0631\u0634\u06cc-API-Gateway-Authorizer-\u0628\u0627-Golang.jpg\" alt=\"\u0645\u0646\u0628\u0639 \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647\" loading=\"lazy\" width=\"800\" height=\"453\" title=\"\"><\/p>\n<p>\u0642\u0633\u0645\u062a Authorization \u062f\u0631 BearerTokenAuthorizer \u06a9\u0647 \u062f\u0631 \u0627\u0628\u062a\u062f\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0631\u062f\u06cc\u0645\u060c \u0627\u0634\u0627\u0631\u0647 \u062f\u0627\u0631\u062f.<\/p>\n<p>\u0648 \u0633\u067e\u0633 \u0622\u0646 Authorizer \u062f\u0631 \u062f\u0631\u0648\u0627\u0632\u0647 API \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u0634\u0648\u062f.  \u0628\u0647 \u062e\u0627\u0637\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0627\u06af\u0631 \u0627\u0632 Base Path Mapping \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0627\u0633\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f \u0648 Autorizer \u0631\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0645\u06cc\u200c\u06af\u0630\u0627\u0631\u06cc\u062f\u060c \u0628\u0627\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u06cc\u06a9 \u0627\u0632 \u062f\u0631\u0648\u0627\u0632\u0647\u200c\u0647\u0627\u06cc API \u062e\u0648\u062f \u067e\u06cc\u0648\u0633\u062a \u06a9\u0646\u06cc\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1682813687_261_\u0633\u0641\u0627\u0631\u0634\u06cc-API-Gateway-Authorizer-\u0628\u0627-Golang.jpg\" alt=\"Autorizer API Gateway\" loading=\"lazy\" width=\"800\" height=\"571\" title=\"\"><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA\"><\/span>\n<p>  \u0627\u062c\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u0627 \u0628\u0627\u0644\u0627\u062e\u0631\u0647 \u0622\u0645\u0627\u062f\u0647 \u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0647\u0633\u062a\u06cc\u0645.<\/p>\n<p>\u0627\u0645\u0627 \u0627\u0648\u0644\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u0646\u0634\u0627\u0646\u0647 \u0631\u0627 \u06af\u06cc\u0631 \u0628\u06cc\u0627\u0648\u0631\u06cc\u0645.  \u06cc\u0627\u062f\u062a\u0627\u0646 \u0647\u0633\u062a \u06a9\u0647 \u06af\u0641\u062a\u0645 ClientID \u0631\u0627 \u062f\u0631 UserPool \u0636\u0628\u0637 \u06a9\u0646\u0645\u061f  \u0627\u06a9\u0646\u0648\u0646 \u0632\u0645\u0627\u0646 \u0622\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0622\u0646 \u0631\u0627 \u0622\u0634\u06a9\u0627\u0631 \u06a9\u0646\u06cc\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1682813687_455_\u0633\u0641\u0627\u0631\u0634\u06cc-API-Gateway-Authorizer-\u0628\u0627-Golang.jpg\" alt=\"\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0648\u06a9\u0646 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f\" loading=\"lazy\" width=\"800\" height=\"523\" title=\"\"><\/p>\n<p>\u062e\u0631\u0648\u062c\u06cc \u0627\u06cc\u0646 \u0633\u0647 \u062a\u0648\u06a9\u0646 \u0634\u0645\u0627 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.<\/p>\n<ul>\n<li>    \u0646\u0634\u0627\u0646\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc<\/li>\n<li>    \u0634\u0646\u0627\u0633\u0647 \u0634\u0646\u0627\u0633\u0647<\/li>\n<li>    Refresh Token<\/li>\n<\/ul>\n<p>\u062f\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0639\u062f\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 ID \u06cc\u0627 Access \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u0646\u062c\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0633\u0627\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%D8%B4%DA%A9%D8%B3%D8%AA\"><\/span>\n<p>  \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u06a9\u0633\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0627\u0628\u062a\u062f\u0627\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0628\u06cc\u0646\u06cc\u0645 \u0628\u0627 Bad Token \u0686\u0647 \u0627\u062a\u0641\u0627\u0642\u06cc \u0645\u06cc\u200c\u0627\u0641\u062a\u062f<\/p>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u067e\u0633\u062a\u0686\u06cc<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1682813687_920_\u0633\u0641\u0627\u0631\u0634\u06cc-API-Gateway-Authorizer-\u0628\u0627-Golang.jpg\" alt=\"\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u062f\" loading=\"lazy\" width=\"800\" height=\"394\" title=\"\"><\/p>\n<p>\u0648 Logs \u0634\u0645\u0627 \u062f\u0631 CloudWatch \u0628\u0627\u06cc\u062f \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0628\u0627\u0634\u062f<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1682813687_175_\u0633\u0641\u0627\u0631\u0634\u06cc-API-Gateway-Authorizer-\u0628\u0627-Golang.jpg\" alt=\"\u062e\u0631\u0627\u0628\u06cc Cloudwatch\" loading=\"lazy\" width=\"800\" height=\"150\" title=\"\"><\/p>\n<h4><span class=\"ez-toc-section\" id=\"%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA_%D9%85%D9%88%D9%81%D9%82%DB%8C%D8%AA_%D8%A2%D9%85%DB%8C%D8%B2\"><\/span>\n<p>  \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0648\u0641\u0642\u06cc\u062a \u0622\u0645\u06cc\u0632<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u062d\u0627\u0644\u0627 \u0628\u0631\u0627\u06cc \u0645\u0648\u0641\u0642\u06cc\u062a!<\/p>\n<p>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u067e\u0633\u062a\u0686\u06cc<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1682813687_166_\u0633\u0641\u0627\u0631\u0634\u06cc-API-Gateway-Authorizer-\u0628\u0627-Golang.jpg\" alt=\"\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062e\u0648\u0628\" loading=\"lazy\" width=\"800\" height=\"421\" title=\"\"><\/p>\n<p>\u0648 Logs \u0634\u0645\u0627 \u062f\u0631 CloudWatch \u0628\u0627\u06cc\u062f \u0634\u0628\u06cc\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u062f<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1682813687_376_\u0633\u0641\u0627\u0631\u0634\u06cc-API-Gateway-Authorizer-\u0628\u0627-Golang.jpg\" alt=\"\u062e\u0631\u0627\u0628\u06cc Cloudwatch\" loading=\"lazy\" width=\"800\" height=\"180\" title=\"\"><\/p>\n<p>\u0634\u0645\u0627 \u0622\u0646 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f\u0647 \u0627\u06cc\u062f!<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4_%D8%A7%DB%8C%D9%86_%D8%A8%D9%87_%D8%B5%D9%88%D8%B1%D8%AA_%D9%85%D8%AD%D9%84%DB%8C_%D8%A8%D8%A7_%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%AF%D9%87%D8%A7%DB%8C_%D9%86%D9%85%D9%88%D9%86%D9%87\"><\/span>\n<p>  \u0622\u0632\u0645\u0627\u06cc\u0634 \u0627\u06cc\u0646 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0628\u0627 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u0646\u0645\u0648\u0646\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06af\u0631 \u062f\u0631\u062c \u0646\u0645\u06cc \u06a9\u0646\u0645\u060c \u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0631\u062e\u06cc \u0627\u0632 \u0622\u0632\u0645\u0627\u06cc\u0634\u0627\u062a \u0645\u062d\u0644\u06cc \u0645\u062c\u0648\u0632 \u062f\u0647\u0646\u062f\u0647 \u0631\u0627 \u0646\u06cc\u0632 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f\u060c \u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc \u0634\u0648\u0645.  \u0627\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 2 \u0635\u0648\u0631\u062a \u0627\u062a\u0641\u0627\u0642 \u0628\u06cc\u0641\u062a\u062f<\/p>\n<ol>\n<li>  \u0628\u0631\u062e\u06cc \u0627\u0632 \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f<\/li>\n<li>  \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0641\u0627\u06cc\u0644 \u0631\u0648\u06cc\u062f\u0627\u062f \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc<\/li>\n<\/ol>\n<h4><span class=\"ez-toc-section\" id=\"%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D9%81%D8%A7%DB%8C%D9%84_%D9%85%D8%AD%D9%84%DB%8C\"><\/span>\n<p>  \u0627\u062c\u0631\u0627\u06cc \u0641\u0627\u06cc\u0644 \u0645\u062d\u0644\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0627\u06af\u0631 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f <code>\u0633\u06cc \u062f\u06cc \u06a9\u06cc \u0633\u06cc\u0646\u062a<\/code> \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u062f\u0631 \u0627\u06cc\u0646 \u067e\u0634\u062a\u0647\u060c \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0628\u0627 a \u0645\u0648\u0627\u062c\u0647 \u062e\u0648\u0627\u0647\u06cc\u062f \u0634\u062f <code>MainStack.template.json<\/code> \u062f\u0631 <code>cdk.out<\/code> \u0641\u0647\u0631\u0633\u062a \u0631\u0627\u0647\u0646\u0645\u0627.  \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0641\u0627\u06cc\u0644 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u0645\u062e\u0632\u0646 \u0631\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f<\/p>\n<p><code\/><code>bash<br \/>sam local invoke AuthorizerFunc -t cdk.out\/MainStack.template.json --event src\/authorizer\/test-events\/e-1.json --env-vars environment.json --skip-pull-image<br \/><\/code><code\/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B3%D8%AA%D9%87_%D8%A8%D9%86%D8%AF%DB%8C\"><\/span>\n<p>  \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0637\u0648\u0644\u0627\u0646\u06cc \u0628\u0627 \u062c\u0632\u0626\u06cc\u0627\u062a \u0632\u06cc\u0627\u062f \u0628\u0648\u062f\u060c \u0627\u0645\u0627 \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648 \u0647\u0646\u06af\u0627\u0645 \u0633\u0627\u062e\u062a\u0646 API\u0647\u0627\u06cc \u0627\u0645\u0646 \u0648 \u0645\u0642\u06cc\u0627\u0633\u200c\u067e\u0630\u06cc\u0631 \u0628\u0627 \u0641\u0646\u0627\u0648\u0631\u06cc\u200c\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0628\u0633\u06cc\u0627\u0631 \u0645\u0641\u06cc\u062f \u0627\u0633\u062a.  \u0628\u0627 \u0627\u0641\u0632\u0648\u062f\u0646 \u06cc\u06a9 API Gateway Authorizer \u0633\u0641\u0627\u0631\u0634\u06cc \u0628\u0627 Golang\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u06cc\u0646 \u0645\u0646\u0637\u0642 \u0645\u062c\u0648\u0632 \u0631\u0627 \u0628\u0627\u0644\u0627\u062a\u0631 \u0627\u0632 \u067e\u0634\u062a\u0647 \u0648 \u0645\u0646\u0627\u0628\u0639 \u067e\u0627\u06cc\u06cc\u0646\u200c\u062f\u0633\u062a\u06cc \u0631\u0627 \u0627\u0632 \u067e\u0631\u062f\u0627\u062e\u062a\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u06a9\u062f \u062a\u06a9\u0631\u0627\u0631\u06cc \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f.  \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0627\u0645\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0632\u0645\u06cc\u0646\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f \u062f\u0631 \u067e\u0627\u06cc\u06cc\u0646 \u062f\u0633\u062a Lambda \u062e\u0648\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 PrivateClaims \u06a9\u0647 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u06af\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u0647\u0645\u0647 \u0627\u06cc\u0646\u0647\u0627 \u0631\u0627 \u062e\u0648\u062f\u062a\u0627\u0646 \u0628\u0628\u06cc\u0646\u06cc\u062f \u062a\u0627 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f\u060c \u0627\u0632 \u0645\u062e\u0632\u0646 GitHub \u0645\u0646 \u062f\u06cc\u062f\u0646 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0645\u062b\u0644 \u0647\u0645\u06cc\u0634\u0647\u060c \u0627\u0632 \u062e\u0648\u0627\u0646\u062f\u0646 \u0645\u062a\u0634\u06a9\u0631\u06cc\u0645 \u0648 \u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u06cc\u0645 \u06a9\u0647 \u0627\u06cc\u0646 \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u06a9\u0646\u062f \u062a\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u062c\u0627\u0644\u0628 \u062a\u0631\u06cc \u0628\u0633\u0627\u0632\u06cc\u062f!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0686\u06cc\u0632\u0647\u0627\u06cc \u062e\u0648\u0628 \u062f\u0631 \u0645\u0648\u0631\u062f \u0633\u0627\u062e\u062a \u0628\u0627 \u0633\u0631\u0648\u0631 \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0686\u06cc\u0632\u0647\u0627 \u0631\u0627 \u0628\u0647 \u06af\u0648\u0646\u0647 \u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0642\u0637\u0639\u0627\u062a \u0642\u0627\u0628\u0644 \u062a\u0631\u06a9\u06cc\u0628 \u0628\u0627\u0634\u0646\u062f. \u0627\u06cc\u0646 \u0628\u062f\u0627\u0646 \u0645\u0639\u0646\u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0646\u0637\u0642 \u0631\u0627 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0645\u0646\u0633\u062c\u0645 \u0628\u0627 \u062f\u06cc\u06af\u0631 \u0645\u0646\u0637\u0642\u200c\u0647\u0627\u06cc \u0647\u0645\u0641\u06a9\u0631 \u062e\u0648\u062f \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f \u0648 \u0633\u067e\u0633 \u0686\u06cc\u0632\u0647\u0627 \u0631\u0627 \u0628\u0647\u200c\u0637\u0648\u0631 \u0622\u0632\u0627\u062f\u0627\u0646\u0647 \u0628\u0627 \u0633\u0627\u06cc\u0631 \u0627\u062c\u0632\u0627\u0621 \u0645\u0631\u062a\u0628\u0637 \u0646\u06af\u0647 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":20381,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-20380","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/20380","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=20380"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/20380\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/20381"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=20380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=20380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=20380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}