{"id":6884,"date":"2026-08-23T11:00:42","date_gmt":"2026-08-23T07:30:42","guid":{"rendered":"https:\/\/parmin.cloud\/blog\/?p=6884"},"modified":"2026-08-23T11:00:42","modified_gmt":"2026-08-23T07:30:42","slug":"%d8%a2%d8%b4%d9%86%d8%a7%db%8c%db%8c-%d8%a8%d8%a7-oauth-2-%d9%85%d8%b9%d8%b1%d9%81%db%8c-%d8%ac%d8%a7%d9%85%d8%b9","status":"publish","type":"post","link":"https:\/\/parmin.cloud\/blog\/%d8%a2%d8%b4%d9%86%d8%a7%db%8c%db%8c-%d8%a8%d8%a7-oauth-2-%d9%85%d8%b9%d8%b1%d9%81%db%8c-%d8%ac%d8%a7%d9%85%d8%b9\/","title":{"rendered":"\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 OAuth 2 (\u0645\u0639\u0631\u0641\u06cc \u062c\u0627\u0645\u0639)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>\u0645\u0642\u062f\u0645\u0647<\/strong><br>\u067e\u0631\u0648\u062a\u06a9\u0644 OAuth 2 \u0628\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0634\u062e\u0635 \u062b\u0627\u0644\u062b \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u062a\u0627 \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0631\u0645\u0632\u0647\u0627\u06cc \u0639\u0628\u0648\u0631 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646\u060c \u0628\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0622\u0646\u200c\u0647\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0646\u062f. \u0628\u0647 \u062c\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647 (\u0646\u0627\u0645 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631) \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u060c OAuth 2 \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0627 \u0628\u0647 \u0627\u0631\u0627\u0626\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0633\u0631\u0648\u06cc\u0633 (\u0645\u0627\u0646\u0646\u062f \u06af\u0648\u06af\u0644 \u06cc\u0627 \u06af\u06cc\u062a\u200c\u0647\u0627\u0628) \u0648\u0627\u06af\u0630\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u062a\u0648\u06a9\u0646\u200c\u0647\u0627\u06cc\u06cc (Tokens) \u0635\u0627\u062f\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0646\u0645\u0627\u06cc\u0627\u0646\u06af\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc\u200c\u0647\u0627\u06cc \u062e\u0627\u0635\u06cc \u0647\u0633\u062a\u0646\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0646\u06a9\u062a\u0647 \u0645\u0647\u0645\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0628\u062f\u0627\u0646\u06cc\u062f \u0627\u06cc\u0646 \u0627\u0633\u062a: OAuth 2 \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0645\u062c\u0648\u0632\u062f\u0647\u06cc (Authorization) \u0627\u0633\u062a\u060c \u0646\u0647 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a (Authentication). \u0627\u06cc\u0646 \u067e\u0631\u0648\u062a\u06a9\u0644 \u0628\u0647 \u0627\u06cc\u0646 \u0633\u0648\u0627\u0644 \u067e\u0627\u0633\u062e \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u00ab\u0627\u06cc\u0646 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f\u061f\u00bb \u0646\u0647 \u0627\u06cc\u0646\u06a9\u0647 \u00ab\u0627\u06cc\u0646 \u06a9\u0627\u0631\u0628\u0631 \u06a9\u06cc\u0633\u062a\u061f\u00bb. \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u062f\u0631 \u06cc\u06a9 \u0648\u0628\u200c\u0633\u0627\u06cc\u062a \u0631\u0648\u06cc \u062f\u06a9\u0645\u0647 \u00ab\u0648\u0631\u0648\u062f \u0628\u0627 \u06af\u0648\u06af\u0644\u00bb (Sign in with Google) \u06a9\u0644\u06cc\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0632 \u067e\u0631\u0648\u062a\u06a9\u0644 OpenID Connect (\u06a9\u0647 \u0644\u0627\u06cc\u0647 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f) \u062f\u0631 \u0628\u0627\u0644\u0627\u06cc OAuth 2 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0686\u0631\u0627 OAuth 2 \u0628\u0647 \u0648\u062c\u0648\u062f \u0622\u0645\u062f\u061f<\/strong> \u067e\u06cc\u0634 \u0627\u0632 OAuth 2\u060c \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627 \u06cc\u0627 \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u0633\u062a\u0646\u062f (\u06a9\u0647 \u06cc\u06a9 \u0631\u06cc\u0633\u06a9 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0628\u0632\u0631\u06af \u0627\u0633\u062a) \u0648 \u06cc\u0627 \u0627\u0632 \u0622\u0646\u200c\u0647\u0627 \u0645\u06cc\u200c\u062e\u0648\u0627\u0633\u062a\u0646\u062f \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc API \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0628\u06af\u0630\u0627\u0631\u0646\u062f (\u06a9\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc\u200c\u0647\u0627\u06cc \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u0648 \u062e\u0637\u0631\u0646\u0627\u06a9\u06cc \u0645\u06cc\u200c\u062f\u0627\u062f). OAuth 2 \u0627\u06cc\u0646 \u0645\u0634\u06a9\u0644 \u0631\u0627 \u0628\u0627 \u0627\u062c\u0627\u0632\u0647 \u062f\u0627\u062f\u0646 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0628\u0631\u0627\u06cc \u0627\u0639\u0637\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc\u200c\u0647\u0627\u06cc \u0645\u062d\u062f\u0648\u062f \u0648 \u0642\u0627\u0628\u0644 \u0644\u063a\u0648 \u062d\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u06cc\u06a9 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0628\u06a9\u200c\u0622\u067e \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u06af\u0648\u06af\u0644 \u0634\u0645\u0627\u060c \u0628\u0647 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u06af\u0648\u06af\u0644 \u062f\u0631\u0627\u06cc\u0648 \u0634\u0645\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0646\u062f \u0648 \u0634\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u06cc\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0631\u0627 \u062f\u0631 \u0647\u0631 \u0632\u0645\u0627\u0646 \u0644\u063a\u0648 \u06a9\u0646\u06cc\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 OAuth 2 \u0686\u06af\u0648\u0646\u0647 \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0628\u0631\u0627\u06cc \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0627\u0632 \u06a9\u062f\u0627\u0645 \u0646\u0648\u0639 \u0627\u0639\u0637\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc (Grant Type) \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u062c\u0631\u06cc\u0627\u0646\u200c\u0647\u0627\u06cc \u0627\u0645\u0646 OAuth 2 \u0631\u0627 \u062f\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u062e\u0648\u062f \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u0646\u06a9\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u06cc\u0634 \u0627\u0632 \u0648\u0631\u0648\u062f \u0628\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0641\u0646\u06cc\u060c \u0627\u06cc\u0646 \u0646\u06a9\u0627\u062a \u0636\u0631\u0648\u0631\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 OAuth 2 \u0631\u0627 \u062f\u0631 \u0646\u0638\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>OAuth 2 \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0646\u0647 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a.<\/strong> \u0627\u06cc\u0646 \u067e\u0631\u0648\u062a\u06a9\u0644 \u0628\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u0645\u062c\u0648\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0646\u062f\u060c \u0627\u0645\u0627 \u0628\u0647 \u062a\u0646\u0647\u0627\u06cc\u06cc \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u062a\u0627\u06cc\u06cc\u062f \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u062c\u0631\u06cc\u0627\u0646 OAuth 2 \u062a\u0648\u0633\u0637 \u0686\u0647\u0627\u0631 \u0646\u0642\u0634 \u0627\u0635\u0644\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u0634\u0648\u062f:<\/strong> \u0645\u0627\u0644\u06a9 \u0645\u0646\u0628\u0639 (Resource Owner)\u060c \u06a9\u0644\u0627\u06cc\u0646\u062a (Client)\u060c \u0633\u0631\u0648\u0631 \u0645\u062c\u0648\u0632\u062f\u0647\u06cc (Authorization Server) \u0648 \u0633\u0631\u0648\u0631 \u0645\u0646\u0628\u0639 (Resource Server).<\/li>\n\n\n\n<li><strong>\u0627\u0639\u0637\u0627\u06cc \u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc (Authorization Code)<\/strong> \u0631\u0648\u06cc\u06a9\u0631\u062f \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0628\u0631\u0627\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0633\u0645\u062a \u0633\u0631\u0648\u0631 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0622\u0646\u200c\u0647\u0627 \u0631\u0627\u0632 \u06a9\u0644\u0627\u06cc\u0646\u062a (Client Secret) \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0645\u062d\u0631\u0645\u0627\u0646\u0647 \u0628\u0645\u0627\u0646\u062f.<\/li>\n\n\n\n<li><strong>PKCE<\/strong> (Proof Key for Code Exchange) \u0628\u0631\u0627\u06cc \u06a9\u0644\u0627\u06cc\u0646\u062a\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc (\u0645\u0627\u0646\u0646\u062f \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 SPA\u0647\u0627) \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a\u060c \u0632\u06cc\u0631\u0627 \u0627\u0632 \u062d\u0645\u0644\u0627\u062a \u0631\u0628\u0648\u062f\u0647 \u0634\u062f\u0646 \u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n\n\n\n<li>\u062a\u0648\u06a9\u0646\u200c\u0647\u0627\u06cc \u0635\u0627\u062f\u0631 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 OAuth 2 \u0639\u0645\u0631 \u0645\u062d\u062f\u0648\u062f\u06cc \u062f\u0627\u0631\u0646\u062f\u061b \u062a\u0648\u06a9\u0646\u200c\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc (Access Tokens) \u0645\u0646\u0642\u0636\u06cc \u0645\u06cc\u200c\u0634\u0648\u0646\u062f \u0648 \u062a\u0648\u06a9\u0646\u200c\u0647\u0627\u06cc \u0628\u0627\u0632\u0646\u0634\u0627\u0646\u06cc (Refresh Tokens) \u0628\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u0628\u062f\u0648\u0646 \u062f\u062e\u0627\u0644\u062a \u06a9\u0627\u0631\u0628\u0631\u060c \u062a\u0648\u06a9\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u062c\u062f\u06cc\u062f\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u0627\u0633\u06a9\u0648\u067e\u200c\u0647\u0627 (Scopes)<\/strong> \u062f\u0631 OAuth 2 \u062f\u0633\u062a\u0631\u0633\u06cc\u200c\u0647\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u062f\u0647 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f.<\/li>\n\n\n\n<li><strong>OAuth 1 \u0627\u06a9\u0646\u0648\u0646 \u0645\u0646\u0633\u0648\u062e \u0634\u062f\u0647 \u0627\u0633\u062a.<\/strong> OAuth 2 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0627\u0645\u0646\u06cc\u062a \u0628\u0647\u0628\u0648\u062f \u06cc\u0627\u0641\u062a\u0647 \u0648 \u0641\u0631\u0622\u06cc\u0646\u062f \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0633\u0627\u062f\u0647\u200c\u062a\u0631\u060c \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 OAuth 1.0 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">OAuth 2 \u0686\u06cc\u0633\u062a\u061f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">OAuth 2 \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0627\u0633\u062a (\u062f\u0631 RFC 6749 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0627\u0633\u062a) \u06a9\u0647 \u0628\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0634\u062e\u0635 \u062b\u0627\u0644\u062b \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u062d\u062f\u0648\u062f\u06cc \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u06cc \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 HTTP \u0628\u0647 \u062f\u0633\u062a \u0622\u0648\u0631\u0646\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0628\u0647 OAuth 2 \u0645\u0627\u0646\u0646\u062f \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u067e\u0627\u0631\u06a9\u0628\u0627\u0646 (Valet Key) \u0628\u0631\u0627\u06cc \u0645\u0627\u0634\u06cc\u0646 \u062e\u0648\u062f \u0641\u06a9\u0631 \u06a9\u0646\u06cc\u062f: \u0634\u0645\u0627 \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062d\u062f\u0648\u062f \u0628\u0647 \u067e\u0627\u0631\u06a9\u0628\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u06cc\u062f \u06a9\u0647 \u0641\u0642\u0637 \u062f\u0631\u0647\u0627 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0631\u062f\u0647 \u0648 \u0645\u0627\u0634\u06cc\u0646 \u0631\u0627 \u0631\u0648\u0634\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0627\u0645\u0627 \u0635\u0646\u062f\u0648\u0642 \u0639\u0642\u0628 \u06cc\u0627 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0631\u0627 \u0628\u0627\u0632 \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f. \u0628\u0647 \u0637\u0648\u0631 \u0645\u0634\u0627\u0628\u0647\u060c OAuth 2 \u0628\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc\u200c\u0647\u0627\u06cc \u062e\u0627\u0635\u06cc (\u0627\u0633\u06a9\u0648\u067e\u200c\u0647\u0627) \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u0645\u0634\u062e\u0635\u06cc \u0645\u06cc\u200c\u062f\u0647\u062f\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u06a9\u0627\u0645\u0644 \u0628\u0647 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u062f\u0647\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OAuth 2 \u06cc\u06a9 \u0645\u0634\u06a9\u0644 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0628\u062d\u0631\u0627\u0646\u06cc \u0631\u0627 \u062d\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f: \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627 \u062f\u06cc\u06af\u0631 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0631\u0645\u0632\u0647\u0627\u06cc \u0639\u0628\u0648\u0631 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0646\u062f\u0627\u0631\u0646\u062f. \u062f\u0631 \u0639\u0648\u0636\u060c \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0627\u0631\u0627\u0626\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0633\u0631\u0648\u06cc\u0633 (\u0645\u0627\u0646\u0646\u062f \u06af\u0648\u06af\u0644 \u06cc\u0627 \u06af\u06cc\u062a\u200c\u0647\u0627\u0628) \u0628\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627 \u0645\u062c\u0648\u0632 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u0646\u062d\u0648\u0647 \u06a9\u0627\u0631 OAuth 2: \u062c\u0631\u06cc\u0627\u0646 \u067e\u0627\u06cc\u0647<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">OAuth 2 \u0628\u062f\u0648\u0646 \u062a\u0648\u062c\u0647 \u0628\u0647 \u0646\u0648\u0639 \u0627\u0639\u0637\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc\u060c \u0627\u0632 \u06cc\u06a9 \u0627\u0644\u06af\u0648\u06cc \u06f6 \u0645\u0631\u062d\u0644\u0647\u200c\u0627\u06cc \u067e\u06cc\u0631\u0648\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u062c\u0648\u0632\u062f\u0647\u06cc:<\/strong> \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0634\u0645\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f \u062a\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc\u200c\u0647\u0627\u06cc \u062e\u0627\u0635\u06cc (\u0627\u0633\u06a9\u0648\u067e\u200c\u0647\u0627) \u0631\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u062a\u0627\u06cc\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631:<\/strong> \u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0631\u062f \u0633\u06cc\u0633\u062a\u0645 \u0645\u06cc\u200c\u0634\u0648\u062f (\u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632) \u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0634\u0645\u0627 \u0631\u0627 \u062a\u0627\u06cc\u06cc\u062f \u06cc\u0627 \u0631\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f. \u062f\u0631 \u0635\u0648\u0631\u062a \u062a\u0627\u06cc\u06cc\u062f\u060c \u0633\u0631\u0648\u0631 \u06cc\u06a9 \u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc (Authorization Grant) \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062a\u0648\u06a9\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc:<\/strong> \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0634\u0645\u0627 \u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0631\u0627 (\u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06a9\u0644\u0627\u06cc\u0646\u062a \u062e\u0648\u062f) \u0628\u0627 \u06cc\u06a9 \u062a\u0648\u06a9\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc (Access Token) \u062a\u0639\u0648\u06cc\u0636 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0633\u0631\u0648\u0631 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/li>\n\n\n\n<li><strong>\u0635\u062f\u0648\u0631 \u062a\u0648\u06a9\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc:<\/strong> \u0633\u0631\u0648\u0631 \u062f\u0631 \u0635\u0648\u0631\u062a \u0635\u062d\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u060c \u06cc\u06a9 \u062a\u0648\u06a9\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc (\u0648 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc\u0627\u064b \u06cc\u06a9 \u062a\u0648\u06a9\u0646 \u0628\u0627\u0632\u0646\u0634\u0627\u0646\u06cc) \u0628\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0634\u0645\u0627 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0646\u0628\u0639 \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647:<\/strong> \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0634\u0645\u0627 \u0627\u0632 \u062a\u0648\u06a9\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc API \u0628\u0647 \u0646\u0645\u0627\u06cc\u0646\u062f\u06af\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u0633\u0631\u0648 \u06a9\u0631\u062f\u0646 \u0645\u0646\u0628\u0639:<\/strong> API \u062a\u0648\u06a9\u0646 \u0631\u0627 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u06a9\u0631\u062f\u0647 \u0648 \u062f\u0631 \u0635\u0648\u0631\u062a \u0645\u0639\u062a\u0628\u0631 \u0628\u0648\u062f\u0646\u060c \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0634\u062f\u0647 \u0631\u0627 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062a\u0641\u0627\u0648\u062a OAuth 2\u060c \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0648 OpenID Connect<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>OAuth 2 (\u0645\u062c\u0648\u0632\u062f\u0647\u06cc):<\/strong> \u0628\u0647 \u0633\u0648\u0627\u0644 \u00ab\u0627\u06cc\u0646 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f\u061f\u00bb \u067e\u0627\u0633\u062e \u0645\u06cc\u200c\u062f\u0647\u062f. \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u062a\u0627\u06cc\u06cc\u062f \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a (Authentication):<\/strong> \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u062a\u0627\u06cc\u06cc\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0628\u0647 \u0633\u0648\u0627\u0644 \u00ab\u0627\u06cc\u0646 \u06a9\u0627\u0631\u0628\u0631 \u06a9\u06cc\u0633\u062a\u061f\u00bb \u067e\u0627\u0633\u062e \u0645\u06cc\u200c\u062f\u0647\u062f.<\/li>\n\n\n\n<li><strong>OpenID Connect (OIDC):<\/strong> \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0627 \u0628\u0647 OAuth 2 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u06cc\u06a9 \u00ab\u062a\u0648\u06a9\u0646 ID\u00bb \u062d\u0627\u0648\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0647\u0648\u06cc\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0635\u0627\u062f\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0648\u0642\u062a\u06cc \u062f\u06a9\u0645\u0647 \u00ab\u0648\u0631\u0648\u062f \u0628\u0627 \u06af\u0648\u06af\u0644\u00bb \u0631\u0627 \u0645\u06cc\u200c\u0628\u06cc\u0646\u06cc\u062f\u060c \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0627\u0632 OIDC \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u0646\u0642\u0634\u200c\u0647\u0627\u06cc OAuth 2<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u0645\u0627\u0644\u06a9 \u0645\u0646\u0628\u0639 (Resource Owner):<\/strong> \u06a9\u0627\u0631\u0628\u0631\u06cc \u06a9\u0647 \u0645\u0627\u0644\u06a9 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0627\u0633\u062a \u0648 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0622\u0646\u200c\u0647\u0627 \u0631\u0627 \u0627\u0639\u0637\u0627 \u06a9\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u06a9\u0644\u0627\u06cc\u0646\u062a (Client):<\/strong> \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u06cc (\u0645\u0648\u0628\u0627\u06cc\u0644\u060c \u0648\u0628 \u06cc\u0627 \u0633\u0645\u062a \u0633\u0631\u0648\u0631) \u06a9\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u062f\u0627\u0631\u062f.<\/li>\n\n\n\n<li><strong>\u0633\u0631\u0648\u0631 \u0645\u062c\u0648\u0632\u062f\u0647\u06cc (Authorization Server):<\/strong> \u0633\u0631\u0648\u0631\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0631\u062f\u0647 \u0648 \u067e\u0633 \u0627\u0632 \u0645\u0648\u0641\u0642\u06cc\u062a\u200c\u0622\u0645\u06cc\u0632 \u0628\u0648\u062f\u0646 \u0645\u062c\u0648\u0632\u062f\u0647\u06cc\u060c \u062a\u0648\u06a9\u0646\u200c\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0631\u0627 \u0635\u0627\u062f\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u0633\u0631\u0648\u0631 \u0645\u0646\u0628\u0639 (Resource Server):<\/strong> \u0633\u0631\u0648\u0631\u06cc \u06a9\u0647 \u0645\u0646\u0627\u0628\u0639 \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647 (\u062f\u0627\u062f\u0647\u200c\u0647\u0627\u060c API\u0647\u0627) \u0631\u0627 \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0633\u0631\u0648\u0631 \u062a\u0648\u06a9\u0646\u200c\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0631\u0627 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f. (\u062f\u0631 API \u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f\u060c \u0627\u06cc\u0646 \u0633\u0631\u0648\u0631 \u0648 \u0633\u0631\u0648\u0631 \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u0627 \u0647\u0645 \u062a\u0631\u06a9\u06cc\u0628 \u0634\u062f\u0647\u200c\u0627\u0646\u062f).<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062b\u0628\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0648 \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06a9\u0644\u0627\u06cc\u0646\u062a<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u06cc\u0634 \u0627\u0632 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 OAuth 2\u060c \u0628\u0627\u06cc\u062f \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u067e\u0648\u0631\u062a\u0627\u0644 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0633\u0631\u0648\u06cc\u0633 \u062b\u0628\u062a \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0637\u0648\u0644 \u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u0628\u0627\u06cc\u062f \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0646\u0627\u0645 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646:<\/strong> \u0646\u0627\u0645\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062f\u0631 \u0635\u0641\u062d\u0647 \u062a\u0627\u06cc\u06cc\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u06cc\u200c\u0628\u06cc\u0646\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u0622\u062f\u0631\u0633 \u0648\u0628\u200c\u0633\u0627\u06cc\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646:<\/strong> \u0635\u0641\u062d\u0647 \u0627\u0635\u0644\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0634\u0645\u0627.<\/li>\n\n\n\n<li><strong>\u0622\u062f\u0631\u0633 Redirect (Callback URL):<\/strong> \u0622\u062f\u0631\u0633 \u062f\u0642\u06cc\u0642\u06cc \u06a9\u0647 \u0633\u0631\u0648\u0631 \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u067e\u0633 \u0627\u0632 \u062a\u0627\u06cc\u06cc\u062f \u06cc\u0627 \u0631\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0647 \u0622\u0646 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0622\u062f\u0631\u0633 \u0628\u0627\u06cc\u062f \u062f\u0642\u06cc\u0642\u0627\u064b \u0628\u0627 \u0622\u0646\u0686\u0647 \u062f\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u06cc\u062f \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0627\u0632 \u062b\u0628\u062a\u060c \u0633\u0631\u0648\u06cc\u0633 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06a9\u0644\u0627\u06cc\u0646\u062a \u0631\u0627 \u0645\u06cc\u200c\u062f\u0647\u062f:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Client ID:<\/strong> \u0631\u0634\u062a\u0647\u200c\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0628\u0631\u0627\u06cc \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0634\u0645\u0627. \u0627\u06cc\u0645\u0646 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u06a9\u062f\u0647\u0627\u06cc \u0633\u0645\u062a \u06a9\u0644\u0627\u06cc\u0646\u062a \u06cc\u0627 URL\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u0648\u062f.<\/li>\n\n\n\n<li><strong>Client Secret:<\/strong> \u0631\u0634\u062a\u0647\u200c\u0627\u06cc \u0645\u062d\u0631\u0645\u0627\u0646\u0647 \u06a9\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 \u0633\u0631\u0648\u0631 \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f. <strong>\u0647\u0631\u06af\u0632<\/strong> \u0627\u06cc\u0646 \u0631\u0634\u062a\u0647 \u0631\u0627 \u062f\u0631 \u06a9\u062f\u0647\u0627\u06cc \u0641\u0631\u0627\u0646\u062a\u200c\u0627\u0646\u062f\u060c \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0645\u0648\u0628\u0627\u06cc\u0644\u060c \u06af\u06cc\u062a\u200c\u0647\u0627\u0628 \u06cc\u0627 URL\u0647\u0627 \u0641\u0627\u0634 \u0646\u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u0627\u0646\u0648\u0627\u0639 \u0627\u0639\u0637\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc (Grant Types) \u062f\u0631 OAuth 2<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u06cc\u06a9 \u0627\u0639\u0637\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc\u060c \u06cc\u06a9 \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0646\u0634\u0627\u0646\u200c\u062f\u0647\u0646\u062f\u0647 \u0645\u062c\u0648\u0632 \u0645\u0627\u0644\u06a9 \u0645\u0646\u0628\u0639 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647 \u0627\u0633\u062a. OAuth 2 \u0686\u0646\u062f\u06cc\u0646 \u0646\u0648\u0639 \u0627\u0639\u0637\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u062f:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Authorization Code (\u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc):<\/strong> \u0631\u0627\u06cc\u062c\u200c\u062a\u0631\u06cc\u0646 \u0646\u0648\u0639\u060c \u0645\u062e\u0635\u0648\u0635 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0633\u0645\u062a \u0633\u0631\u0648\u0631. \u062a\u0648\u06a9\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0647\u0631\u06af\u0632 \u062f\u0631 \u0645\u0639\u0631\u0636 \u0645\u0631\u0648\u0631\u06af\u0631 \u0642\u0631\u0627\u0631 \u0646\u0645\u06cc\u200c\u06af\u06cc\u0631\u062f\u061b \u0641\u0642\u0637 \u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0645\u0646\u062a\u0642\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 \u0633\u067e\u0633 \u062f\u0631 \u0633\u0645\u062a \u0633\u0631\u0648\u0631 \u0628\u0627 \u062a\u0648\u06a9\u0646 \u062a\u0639\u0648\u06cc\u0636 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/li>\n\n\n\n<li><strong>Client Credentials (\u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06a9\u0644\u0627\u06cc\u0646\u062a):<\/strong> \u0628\u0631\u0627\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u0645\u0627\u0634\u06cc\u0646 \u0628\u0647 \u0645\u0627\u0634\u06cc\u0646 (\u0628\u062f\u0648\u0646 \u062d\u0636\u0648\u0631 \u06a9\u0627\u0631\u0628\u0631). \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0628\u0627 \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u062e\u0648\u062f\u0634 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u06cc\u200c\u0634\u0648\u062f.<\/li>\n\n\n\n<li><strong>Device Code (\u06a9\u062f \u062f\u0633\u062a\u06af\u0627\u0647):<\/strong> \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u06af\u0627\u0647\u200c\u0647\u0627\u06cc \u062f\u0627\u0631\u0627\u06cc \u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u0648\u0631\u0648\u062f\u06cc (\u062a\u0644\u0648\u06cc\u0632\u06cc\u0648\u0646\u200c\u0647\u0627\u06cc \u0647\u0648\u0634\u0645\u0646\u062f\u060c \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0627\u0634\u06cc\u0627) \u06a9\u0647 \u0645\u0631\u0648\u0631\u06af\u0631 \u06cc\u0627 \u06a9\u06cc\u0628\u0648\u0631\u062f \u0646\u062f\u0627\u0631\u0646\u062f.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><em>(\u0646\u06a9\u062a\u0647: \u062c\u0631\u06cc\u0627\u0646 Implicit \u0648 Password \u062f\u0631 \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f\u062a\u0631 \u0645\u0646\u0633\u0648\u062e \u0648 \u063a\u06cc\u0631\u0627\u0645\u0646 \u0634\u062f\u0647\u200c\u0627\u0646\u062f \u0648 \u0646\u0628\u0627\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u0648\u0646\u062f).<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062c\u0631\u06cc\u0627\u0646 \u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc (Authorization Code Flow) &#8211; \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0645\u0631\u062d\u0644\u0647 \u06f1: \u0633\u0627\u062e\u062a URL \u0645\u062c\u0648\u0632\u062f\u0647\u06cc<\/strong><br>\u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0647 URL \u0633\u0631\u0648\u0631 \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f. (\u0646\u0645\u0648\u0646\u0647 \u0628\u0627 \u0641\u0631\u0636 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API \u067e\u0627\u0631\u0645\u06cc\u0646 \u06a9\u0644\u0648\u062f):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;cloud.parmincloud.com\/v1\/oauth\/authorize?response_type=code&amp;client_id=CLIENT_ID&amp;redirect_uri=CALLBACK_URL&amp;scope=read&amp;state=RANDOM_STATE_STRING<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>response_type=code<\/code>: \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc.<\/li>\n\n\n\n<li><code>state<\/code>: \u06cc\u06a9 \u0645\u0642\u062f\u0627\u0631 \u062a\u0635\u0627\u062f\u0641\u06cc \u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u062d\u0645\u0644\u0627\u062a CSRF. \u0627\u06cc\u0646 \u0645\u0642\u062f\u0627\u0631 \u0631\u0627 \u062f\u0631 \u0633\u0634\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f\u0647 \u0648 \u0647\u0646\u06af\u0627\u0645 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0627\u0644\u200c\u0628\u06a9 \u0622\u0646 \u0631\u0627 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0645\u0631\u062d\u0644\u0647 \u06f2: \u062a\u0627\u06cc\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631<\/strong><br>\u06a9\u0627\u0631\u0628\u0631 \u0648\u0627\u0631\u062f \u0633\u06cc\u0633\u062a\u0645 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u0635\u0641\u062d\u0647 Consent (\u0631\u0636\u0627\u06cc\u062a) \u0631\u0627 \u0645\u06cc\u200c\u0628\u06cc\u0646\u062f \u06a9\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u062f\u0627\u0645 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0648 \u0686\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc\u200c\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u062f. \u06a9\u0627\u0631\u0628\u0631 \u062a\u0627\u06cc\u06cc\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0645\u0631\u062d\u0644\u0647 \u06f3: \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc<\/strong><br>\u0633\u0631\u0648\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0647 \u0622\u062f\u0631\u0633 Redirect \u0634\u0645\u0627 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;your-app.com\/callback?code=AUTHORIZATION_CODE&amp;state=RANDOM_STATE_STRING<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u06a9\u0648\u062a\u0627\u0647\u200c\u0639\u0645\u0631 (\u0645\u0639\u0645\u0648\u0644\u0627\u064b \u06a9\u0645\u062a\u0631 \u0627\u0632 \u06f1\u06f0 \u062f\u0642\u06cc\u0642\u0647) \u0648 \u06cc\u06a9\u200c\u0628\u0627\u0631\u0645\u0635\u0631\u0641 \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0645\u0631\u062d\u0644\u0647 \u06f4: \u062a\u0639\u0648\u06cc\u0636 \u06a9\u062f \u0628\u0627 \u062a\u0648\u06a9\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc<\/strong><br>\u0633\u0631\u0648\u0631 \u0634\u0645\u0627 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a POST \u0628\u0647 \u0645\u0633\u06cc\u0631 \u062a\u0648\u06a9\u0646 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>POST https:\/\/cloud.parmincloud.com\/v1\/oauth\/token\nContent-Type: application\/x-www-form-urlencoded\n\nclient_id=CLIENT_ID&amp;client_secret=CLIENT_SECRET&amp;grant_type=authorization_code&amp;code=AUTHORIZATION_CODE&amp;redirect_uri=CALLBACK_URL<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0645\u0631\u062d\u0644\u0647 \u06f5: \u062f\u0631\u06cc\u0627\u0641\u062a \u062a\u0648\u06a9\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc<\/strong><br>\u0627\u06af\u0631 \u06a9\u062f \u0645\u0639\u062a\u0628\u0631 \u0628\u0627\u0634\u062f\u060c \u0633\u0631\u0648\u0631 \u067e\u0627\u0633\u062e \u0645\u06cc\u200c\u062f\u0647\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"access_token\": \"ACCESS_TOKEN\",\n  \"token_type\": \"bearer\",\n  \"expires_in\": 2592000,\n  \"refresh_token\": \"REFRESH_TOKEN\",\n  \"scope\": \"read\"\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u0645\u062b\u0627\u0644 \u06a9\u0627\u0645\u0644 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc (Node.js \/ Express)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06cc\u0646 \u06a9\u062f \u06cc\u06a9 \u0633\u0631\u0648\u0631 Express \u0622\u0645\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u0634\u0627\u0645\u0644 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u067e\u0627\u0631\u0627\u0645\u062a\u0631 state\u060c \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627\u060c \u0648 \u0628\u0627\u0632\u0646\u0634\u0627\u0646\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u0648\u06a9\u0646 \u0627\u0633\u062a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u0645\u062b\u0627\u0644 Express.js - \u062c\u0631\u06cc\u0627\u0646 \u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc OAuth 2\nconst express = require('express');\nconst crypto = require('crypto');\nconst axios = require('axios');\n\nconst app = express();\nconst CLIENT_ID = process.env.OAUTH_CLIENT_ID;\nconst CLIENT_SECRET = process.env.OAUTH_CLIENT_SECRET;\nconst REDIRECT_URI = 'https:\/\/your-app.com\/callback';\nconst AUTHORIZATION_URL = 'https:\/\/cloud.parmincloud.com\/v1\/oauth\/authorize';\nconst TOKEN_URL = 'https:\/\/cloud.parmincloud.com\/v1\/oauth\/token';\n\n\/\/ \u0630\u062e\u06cc\u0631\u0647 \u0645\u0642\u062f\u0627\u0631 state \u062f\u0631 \u0633\u0634\u0646 (\u062f\u0631 \u0645\u062d\u06cc\u0637 \u062a\u0648\u0644\u06cc\u062f \u0627\u0632 Redis \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f)\nconst stateStore = new Map();\n\n\/\/ \u0645\u0631\u062d\u0644\u0647 \u06f1: \u0647\u062f\u0627\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0645\u062c\u0648\u0632\u062f\u0647\u06cc\napp.get('\/auth', (req, res) =&gt; {\n  \/\/ \u062a\u0648\u0644\u06cc\u062f \u06cc\u06a9 \u0645\u0642\u062f\u0627\u0631 state \u062a\u0635\u0627\u062f\u0641\u06cc \u0648 \u0627\u0645\u0646\n  const state = crypto.randomBytes(32).toString('hex');\n  stateStore.set(state, { timestamp: Date.now() });\n  \n  const authUrl = new URL(AUTHORIZATION_URL);\n  authUrl.searchParams.set('response_type', 'code');\n  authUrl.searchParams.set('client_id', CLIENT_ID);\n  authUrl.searchParams.set('redirect_uri', REDIRECT_URI);\n  authUrl.searchParams.set('scope', 'read write');\n  authUrl.searchParams.set('state', state);\n  \n  res.redirect(authUrl.toString());\n});\n\n\/\/ \u0645\u0631\u062d\u0644\u0647 \u06f2-\u06f4: \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0644\u200c\u0628\u06a9 \u0648 \u062a\u0639\u0648\u06cc\u0636 \u06a9\u062f \u0628\u0627 \u062a\u0648\u06a9\u0646\napp.get('\/callback', async (req, res) =&gt; {\n  const { code, state, error } = req.query;\n  \n  \/\/ \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u067e\u0627\u0631\u0627\u0645\u062a\u0631 state\n  if (!stateStore.has(state)) {\n    return res.status(400).send('\u067e\u0627\u0631\u0627\u0645\u062a\u0631 state \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u0627\u0633\u062a');\n  }\n  stateStore.delete(state); \/\/ \u0641\u0642\u0637 \u06cc\u06a9 \u0628\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u0648\u062f\n  \n  if (error) {\n    return res.status(400).send(`\u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0648\u062f: ${error}`);\n  }\n  \n  try {\n    \/\/ \u062a\u0639\u0648\u06cc\u0636 \u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0628\u0627 \u062a\u0648\u06a9\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc\n    const tokenResponse = await axios.post(TOKEN_URL, \n      new URLSearchParams({\n        grant_type: 'authorization_code',\n        code: code,\n        redirect_uri: REDIRECT_URI,\n        client_id: CLIENT_ID,\n        client_secret: CLIENT_SECRET\n      }), {\n        headers: { 'Content-Type': 'application\/x-www-form-urlencoded' }\n      }\n    );\n    \n    const { access_token, refresh_token, expires_in } = tokenResponse.data;\n    \n    req.session.accessToken = access_token;\n    req.session.refreshToken = refresh_token;\n    req.session.tokenExpiry = Date.now() + (expires_in * 1000);\n    \n    res.redirect('\/dashboard');\n  } catch (error) {\n    res.status(500).send('\u062a\u0639\u0648\u06cc\u0636 \u062a\u0648\u06a9\u0646 \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0648\u062f');\n  }\n});<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u0627\u062b\u0628\u0627\u062a \u06a9\u0644\u06cc\u062f \u0628\u0631\u0627\u06cc \u062a\u0628\u0627\u062f\u0644 \u06a9\u062f (PKCE)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">PKCE (\u062a\u0644\u0641\u0638 \u0645\u06cc\u200c\u0634\u0648\u062f &#8220;\u067e\u06cc\u06a9\u0633\u06cc&#8221;) \u06cc\u06a9 \u0627\u0641\u0632\u0648\u0646\u0647 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0628\u0631\u0627\u06cc \u062c\u0631\u06cc\u0627\u0646 \u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0627\u0632 \u0631\u0628\u0648\u062f\u0647 \u0634\u062f\u0646 \u06a9\u062f \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f \u0628\u0631\u0627\u06cc \u06a9\u0644\u0627\u06cc\u0646\u062a\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc (\u0645\u0648\u0628\u0627\u06cc\u0644\u060c SPA) \u06a9\u0647 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f Client Secret \u0631\u0627 \u0627\u0645\u0646 \u0646\u06af\u0647 \u062f\u0627\u0631\u0646\u062f\u060c \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0686\u0631\u0627 PKCE \u0645\u0647\u0645 \u0627\u0633\u062a\u061f<\/strong><br>\u0628\u062f\u0648\u0646 PKCE\u060c \u06cc\u06a9 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0645\u062e\u0631\u0628 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0628\u0627 \u062b\u0628\u062a \u06cc\u06a9 URL Scheme \u062f\u0644\u062e\u0648\u0627\u0647 \u0631\u0648\u06cc \u0645\u0648\u0628\u0627\u06cc\u0644 \u0634\u0645\u0627\u060c \u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0642\u0627\u0646\u0648\u0646\u06cc \u0631\u0627 \u0631\u0628\u0648\u062f\u0647 \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0627 Client ID \u0639\u0645\u0648\u0645\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0642\u0627\u0646\u0648\u0646\u06cc \u0628\u0627 \u062a\u0648\u06a9\u0646 \u062a\u0639\u0648\u06cc\u0636 \u06a9\u0646\u062f.<br>\u0628\u0627 PKCE\u060c \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0642\u0627\u0646\u0648\u0646\u06cc \u067e\u06cc\u0634 \u0627\u0632 \u0634\u0631\u0648\u0639 \u062c\u0631\u06cc\u0627\u0646 \u06cc\u06a9 \u0631\u0634\u062a\u0647 \u062a\u0635\u0627\u062f\u0641\u06cc \u0645\u062e\u0641\u06cc (<code>code_verifier<\/code>) \u062a\u0648\u0644\u06cc\u062f \u06a9\u0631\u062f\u0647 \u0648 \u0647\u0634 \u0622\u0646 (<code>code_challenge<\/code>) \u0631\u0627 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0645\u06cc\u200c\u0641\u0631\u0633\u062a\u062f. \u0647\u0646\u06af\u0627\u0645 \u062a\u0639\u0648\u06cc\u0636 \u06a9\u062f \u0628\u0627 \u062a\u0648\u06a9\u0646\u060c \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0628\u0627\u06cc\u062f <code>code_verifier<\/code> \u0627\u0635\u0644\u06cc \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u062f. \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0645\u062e\u0631\u0628 \u0686\u0648\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u0631\u0634\u062a\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0646\u062f\u0627\u0631\u062f\u060c \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062a\u0648\u06a9\u0646 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u062f.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0648\u06a9\u0646\u200c\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u067e\u0633 \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u062a\u0648\u06a9\u0646\u060c \u0622\u0646 \u0631\u0627 \u062f\u0631 \u0647\u062f\u0631 HTTP \u0628\u0627 \u0641\u0631\u0645\u062a Bearer \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -X GET \\\n  -H \"Authorization: Bearer ACCESS_TOKEN\" \\\n  https:&#47;&#47;api.parmincloud.com\/v2\/droplets<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0627\u06af\u0631 \u062a\u0648\u06a9\u0646 \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u0628\u0627\u0634\u062f\u060c \u062e\u0637\u0627\u06cc <code>401 Unauthorized<\/code> \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f \u0648 \u0628\u0627\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0628\u0627 Refresh Token \u0628\u0627\u0632\u0646\u0634\u0627\u0646\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u062c\u0631\u06cc\u0627\u0646 \u062a\u0648\u06a9\u0646 \u0628\u0627\u0632\u0646\u0634\u0627\u0646\u06cc (Refresh Token)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u062a\u0648\u06a9\u0646\u200c\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0639\u0645\u0631 \u06a9\u0648\u062a\u0627\u0647\u06cc \u062f\u0627\u0631\u0646\u062f (\u06f1 \u0633\u0627\u0639\u062a \u062a\u0627 \u06f3\u06f0 \u0631\u0648\u0632). \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u062c\u0628\u0648\u0631 \u0646\u0634\u0648\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u0644\u0627\u06af\u06cc\u0646 \u06a9\u0646\u062f\u060c \u0627\u0632 \u062a\u0648\u06a9\u0646 \u0628\u0627\u0632\u0646\u0634\u0627\u0646\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>POST https:\/\/cloud.parmincloud.com\/v1\/oauth\/token\nContent-Type: application\/x-www-form-urlencoded\n\ngrant_type=refresh_token&amp;client_id=CLIENT_ID&amp;client_secret=CLIENT_SECRET&amp;refresh_token=REFRESH_TOKEN<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0633\u0631\u0648\u0631 \u062f\u0631 \u067e\u0627\u0633\u062e \u06cc\u06a9 \u062a\u0648\u06a9\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u062c\u062f\u06cc\u062f (\u0648 \u06af\u0627\u0647\u06cc \u06cc\u06a9 \u062a\u0648\u06a9\u0646 \u0628\u0627\u0632\u0646\u0634\u0627\u0646\u06cc \u062c\u062f\u06cc\u062f) \u0628\u0647 \u0634\u0645\u0627 \u0645\u06cc\u200c\u062f\u0647\u062f.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u0686\u0647 \u0632\u0645\u0627\u0646\u06cc \u0627\u0632 OAuth 2 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u06a9\u0646\u06cc\u0645\u061f<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0633\u06cc\u0633\u062a\u0645 \u0644\u0627\u06af\u06cc\u0646 \u062f\u0627\u062e\u0644\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u062e\u0648\u062f\u062a\u0627\u0646:<\/strong> \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0634\u0645\u0627 \u0644\u0627\u06af\u06cc\u0646 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f\u060c \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 OAuth 2 \u0646\u062f\u0627\u0631\u06cc\u062f. \u0627\u0632 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0633\u0634\u0646 (Session) \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n\n\n\n<li><strong>\u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u06cc\u0646 \u0645\u06cc\u06a9\u0631\u0648\u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u062f\u0627\u062e\u0644\u06cc:<\/strong> \u0627\u0632 mTLS \u06cc\u0627 API Gateway \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n\n\n\n<li><strong>\u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc API:<\/strong> \u0627\u06af\u0631 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0645\u062c\u0648\u0632 \u06a9\u0627\u0631\u0628\u0631 \u0646\u062f\u0627\u0631\u0646\u062f\u060c \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc API \u0633\u0627\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u0627\u0634\u062a\u0628\u0627\u0647\u0627\u062a \u0631\u0627\u06cc\u062c \u062f\u0631 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc OAuth 2<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u0639\u062f\u0645 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u062f\u0642\u06cc\u0642 Redirect URI:<\/strong> \u0622\u062f\u0631\u0633\u200c\u0647\u0627 \u0628\u0627\u06cc\u062f \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0628\u0647 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 (\u062d\u0633\u0627\u0633 \u0628\u0647 \u0627\u0633\u0644\u0634 \/ \u0648 \u067e\u0648\u0631\u062a) \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f. \u0627\u0632 Wildcard (*) \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u06a9\u0646\u06cc\u062f.<\/li>\n\n\n\n<li><strong>\u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0646 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 State:<\/strong> \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 \u062d\u0645\u0644\u0627\u062a CSRF \u0622\u0633\u06cc\u0628\u200c\u067e\u0630\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n\n\n\n<li><strong>\u0630\u062e\u06cc\u0631\u0647 \u0646\u0627\u0627\u0645\u0646 \u062a\u0648\u06a9\u0646\u200c\u0647\u0627:<\/strong> \u062a\u0648\u06a9\u0646\u200c\u0647\u0627 \u0631\u0627 \u062f\u0631 <code>localStorage<\/code> \u0630\u062e\u06cc\u0631\u0647 \u0646\u06a9\u0646\u06cc\u062f (\u0622\u0633\u06cc\u0628\u200c\u067e\u0630\u06cc\u0631 \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 XSS). \u0627\u0632 \u06a9\u0648\u06a9\u06cc\u200c\u0647\u0627\u06cc <code>HttpOnly<\/code> \u0633\u0645\u062a \u0633\u0631\u0648\u0631 \u06cc\u0627 Keychain \u062f\u0631 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n\n\n\n<li><strong>\u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0633\u06a9\u0648\u067e\u200c\u0647\u0627\u06cc \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f (Scope Creep):<\/strong> \u0641\u0642\u0637 \u062d\u062f\u0627\u0642\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc\u200c\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0646\u06cc\u062f \u062a\u0627 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0628\u0627 \u0627\u0639\u062a\u0645\u0627\u062f \u0628\u06cc\u0634\u062a\u0631\u06cc \u0645\u062c\u0648\u0632 \u0628\u062f\u0647\u0646\u062f.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u0631\u0641\u0639 \u0645\u0634\u06a9\u0644\u0627\u062a \u0631\u0627\u06cc\u062c OAuth 2<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u062e\u0637\u0627\u06cc <code>invalid_client<\/code>:<\/strong> Client ID \u06cc\u0627 Secret \u0627\u0634\u062a\u0628\u0627\u0647 \u06a9\u067e\u06cc \u0634\u062f\u0647 \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a.<\/li>\n\n\n\n<li><strong>\u062e\u0637\u0627\u06cc <code>invalid_grant<\/code>:<\/strong> \u06a9\u062f \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0645\u0646\u0642\u0636\u06cc \u0634\u062f\u0647 (\u0628\u06cc\u0634\u062a\u0631 \u0627\u0632 \u06f1\u06f0 \u062f\u0642\u06cc\u0642\u0647 \u06af\u0630\u0634\u062a\u0647)\u060c \u0642\u0628\u0644\u0627\u064b \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u062f\u0647\u060c \u06cc\u0627 \u0622\u062f\u0631\u0633 Redirect URI \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u062a\u0639\u0648\u06cc\u0636 \u062a\u0648\u06a9\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u0645\u0637\u0627\u0628\u0642\u062a \u0646\u062f\u0627\u0631\u062f.<\/li>\n\n\n\n<li><strong>\u062e\u0637\u0627\u06cc <code>redirect_uri_mismatch<\/code>:<\/strong> \u0622\u062f\u0631\u0633 \u0627\u0631\u0633\u0627\u0644\u06cc \u0634\u0645\u0627 \u0628\u0627 \u0622\u062f\u0631\u0633 \u062b\u0628\u062a \u0634\u062f\u0647 \u062f\u0631 \u067e\u0648\u0631\u062a\u0627\u0644 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u062a\u0637\u0627\u0628\u0642 \u0646\u062f\u0627\u0631\u062f (\u062a\u0648\u062c\u0647 \u0628\u0647 <code>http<\/code> vs <code>https<\/code> \u0648 \u0627\u0633\u0644\u0634 \u0627\u0646\u062a\u0647\u0627\u06cc\u06cc).<\/li>\n\n\n\n<li><strong>\u062e\u0637\u0627\u06cc <code>access_denied<\/code>:<\/strong> \u06a9\u0627\u0631\u0628\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631 \u0635\u0641\u062d\u0647 \u062a\u0627\u06cc\u06cc\u062f \u0631\u062f \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0646\u062a\u06cc\u062c\u0647\u200c\u06af\u06cc\u0631\u06cc<\/strong><br>OAuth 2 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0635\u0646\u0639\u062a\u06cc \u0628\u0631\u0627\u06cc \u0645\u062c\u0648\u0632\u062f\u0647\u06cc \u0627\u0645\u0646 \u0648 \u0648\u0627\u06af\u0630\u0627\u0631 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u067e\u0631\u0648\u062a\u06a9\u0644 \u0628\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u0628\u062f\u0648\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0631\u0645\u0632\u0647\u0627\u06cc \u0639\u0628\u0648\u0631 \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0646\u062f. \u0647\u0645\u06cc\u0634\u0647 \u0627\u0632 \u062c\u0631\u06cc\u0627\u0646 Authorization Code \u0647\u0645\u0631\u0627\u0647 \u0628\u0627 PKCE \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\u060c \u0622\u062f\u0631\u0633\u200c\u0647\u0627\u06cc Redirect \u0631\u0627 \u0628\u0647 \u062f\u0642\u062a \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u06a9\u0646\u06cc\u062f\u060c \u062a\u0648\u06a9\u0646\u200c\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0627\u0645\u0646 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f\u0647 \u0648 \u062a\u0646\u0647\u0627 \u062d\u062f\u0627\u0642\u0644 \u0627\u0633\u06a9\u0648\u067e\u200c\u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0631\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0646\u06cc\u062f.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0645\u0642\u062f\u0645\u0647\u067e\u0631\u0648\u062a\u06a9\u0644 OAuth 2 \u0628\u0647 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u200c\u0647\u0627\u06cc \u0634\u062e\u0635 \u062b\u0627\u0644\u062b \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u062a\u0627 \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0631\u0645\u0632\u0647\u0627\u06cc \u0639\u0628\u0648\u0631 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646\u060c \u0628\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0622\u0646\u200c\u0647\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0646\u0646\u062f. \u0628\u0647 \u062c\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647 (\u0646\u0627\u0645 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631) \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u060c OAuth 2 \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0627 \u0628\u0647 \u0627\u0631\u0627\u0626\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0633\u0631\u0648\u06cc\u0633 (\u0645\u0627\u0646\u0646\u062f \u06af\u0648\u06af\u0644 \u06cc\u0627 \u06af\u06cc\u062a\u200c\u0647\u0627\u0628) \u0648\u0627\u06af\u0630\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u062a\u0648\u06a9\u0646\u200c\u0647\u0627\u06cc\u06cc (Tokens) \u0635\u0627\u062f\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 &hellip;<\/p>\n","protected":false},"author":9,"featured_media":6885,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-6884","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-8"],"_links":{"self":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts\/6884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/comments?post=6884"}],"version-history":[{"count":1,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts\/6884\/revisions"}],"predecessor-version":[{"id":6886,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/posts\/6884\/revisions\/6886"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/media\/6885"}],"wp:attachment":[{"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/media?parent=6884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/categories?post=6884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/parmin.cloud\/blog\/wp-json\/wp\/v2\/tags?post=6884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}