{"id":276112,"date":"2016-03-15T09:32:09","date_gmt":"2016-03-15T06:32:09","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=276112"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=276112","title":{"rendered":"ScribeJava \u2014 \u0434\u0430\u0436\u0435 \u0432\u0430\u0448\u0430 \u0431\u0430\u0431\u0443\u0448\u043a\u0430 \u0441\u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 OAuth"},"content":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/273\/4b0\/326\/2734b032642d44d38ea5ac257bd2e693.jpg\" alt=\"image\"\/><\/p>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0439 \u0444\u0440\u0430\u0437\u043e\u0439 \u043d\u0430\u0441 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 OAuth \u2014 ScribeJava (<a href=\"https:\/\/github.com\/scribejava\/scribejava\">https:\/\/github.com\/scribejava\/scribejava<\/a>). \u0415\u0441\u043b\u0438 \u0431\u044b\u0442\u044c \u0442\u043e\u0447\u043d\u0435\u0435, \u0442\u043e \u0444\u0440\u0430\u0437\u0430 \u0437\u0432\u0443\u0447\u0438\u0442 \u0442\u0430\u043a: \u201cWho said OAuth\/OAuth2 was difficult? Configuring ScribeJava is <b>so easy your grandma can do it!<\/b> check it out:\u201d.<\/p>\n<p>  \u0418 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043f\u0440\u0430\u0432\u0434\u0443:  <\/p>\n<pre><code class=\"java\">OAuth20Service service = new ServiceBuilder().apiKey(clientId).apiSecret(clientSecret)     .callback(&quot;http:\/\/your.site.com\/callback&quot;).grantType(&quot;authorization_code&quot;).build(HHApi.instance()); String authorizationUrl = service.getAuthorizationUrl(); OAuth2AccessToken accessToken = service.getAccessToken(code); <\/code><\/pre>\n<p>  \u0413\u043e\u0442\u043e\u0432\u043e! \u042d\u0442\u0438\u0445 \u0442\u0440\u0435\u0445 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c OAuth \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u0410 \u0441\u0430\u043c OAuth \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"java\">OAuthRequest request = new OAuthRequest(Verb.GET, &quot;https:\/\/api.hh.ru\/me&quot;, service); service.signRequest(accessToken, request); String response = request.send().getBody(); <\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0443 \u043d\u0430\u0441 \u0432 \u0440\u0443\u043a\u0430\u0445 (\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 response). \u0418 \u043d\u0438 \u043a\u0430\u043f\u043b\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u043a\u0430\u043a \u0432 \u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 OAuth. \u0425\u043e\u0442\u0438\u043c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 http-\u0437\u0430\u043f\u0440\u043e\u0441\u044b? \u041d\u0430\u043c \u0445\u0432\u0430\u0442\u0438\u0442 \u0442\u0435\u0445 \u0436\u0435 \u0442\u0440\u0435\u0445 \u0441\u0442\u0440\u043e\u0447\u0435\u043a. \u041d\u0438\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u044d\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>1. OAuth? \u041e \u0447\u0435\u043c \u044d\u0442\u043e?<\/h3>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0443 \u0441\u0430\u0439\u0442\u043e\u0432 \u0432 \u0442\u043e\u043c \u0438\u043b\u0438 \u0438\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u043d\u0443\u0436\u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439: \u0434\u043b\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u043e\u0432, \u043e\u0442\u043a\u043b\u0438\u043a\u043e\u0432 \u043d\u0430 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438 \u2014 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e. <\/p>\n<p>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043b\u044e\u0434\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442 \u043b\u0435\u043d\u0438\u0432\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u043d\u0435 \u043b\u044e\u0431\u044f\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u044b, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u044d\u0442\u043e \u0443\u0436\u0435 \u0433\u0434\u0435-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0438. \u041d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0442\u0430\u043a\u0438\u043c \u0441\u0430\u0439\u0442\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 OAuth. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u043d\u0435 \u0441\u0430\u043c\u043e\u043c\u0443 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 OAuth, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 OAuth, \u043d\u0435 \u0432\u0434\u0430\u0432\u0430\u044f\u0441\u044c \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0432 \u0434\u0432\u0443\u0445 \u0441\u043b\u043e\u0432\u0430\u0445, \u0442\u043e OAuth \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 (\u0441\u0430\u0439\u0442\u0443) \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0446.\u0441\u0435\u0442\u0438). \u0422.\u0435., \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e OAuth \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u043e \u043a\u0430\u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0430\u0439\u0442\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, hh.ru) \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442 \u0435\u0433\u043e \u043b\u0438\u0446\u0430 \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u0441\u0435\u0442\u0438 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435. \u041d\u0443\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e OAuth \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041e\u0434\u043d\u0430\u043a\u043e, \u0432 \u0447\u0438\u0441\u043b\u0435 \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u043c\u044b \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u201c\u043e \u0441\u0435\u0431\u0435\u201d, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432 id \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0432 \u0435\u0433\u043e.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u0442\u044c OAuth, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a (\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 OAuth2 \u2014 \u043e\u043d \u043f\u043e\u043f\u0440\u043e\u0449\u0435).  <\/p>\n<ol>\n<li>\u041c\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u043c \u0441\u0430\u0439\u0442\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c client_id \u0438 client_secret \u2014 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437.<\/li>\n<li>\u041a\u043e\u0433\u0434\u0430 \u043a \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u043d\u0430\u0448 \u0441\u0430\u0439\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0441\u0430\u0439\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435. \u0412 \u0441\u0441\u044b\u043b\u043a\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442 client_id \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0430\u0439\u0442\u0435. \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0448 \u0441\u0430\u0439\u0442 \u0434\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u044d\u0442\u0443 \u0441\u0441\u044b\u043b\u043a\u0443.<\/li>\n<li>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u0434\u0435\u0442 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0441\u0430\u0439\u0442, \u043b\u043e\u0433\u0438\u043d\u0438\u0442\u0441\u044f (\u0435\u0441\u043b\u0438 \u0435\u0449\u0435 \u043d\u0435 \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0435\u043d), \u043e\u0434\u043e\u0431\u0440\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043d\u0430\u043c\u0438 \u043f\u0440\u0430\u0432\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u0424\u0418\u041e) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043d\u0430\u043c \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c GET-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u2018code\u2019.<\/li>\n<li>\u041d\u0430\u0448 \u0441\u0430\u0439\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e (\u0441\u0435\u0440\u0432\u0435\u0440-\u0441\u0435\u0440\u0432\u0435\u0440) \u043e\u0442\u0441\u044b\u043b\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 GET \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0441\u0430\u0439\u0442 \u0438 \u0432 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0442\u043e\u043a\u0435\u043d (access_token).<\/li>\n<li>\u041c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439 \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0438 \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u0442\u043e\u0442 access_token.<\/li>\n<\/ol>\n<p>  <\/p>\n<h3>2. \u0414\u0430\u0436\u0435 \u0432\u0430\u0448\u0430 \u0431\u0430\u0431\u0443\u0448\u043a\u0430 \u0441\u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c OAuth<\/h3>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u0438, \u0441\u0434\u0435\u043b\u0430\u0432 OAuth \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 hh.ru. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c OAuthService, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0438\u043b\u0434\u0435\u0440 ServiceBuilder. \u042d\u0442\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"java\">OAuth20Service service = new ServiceBuilder()     .apiKey(clientId)     .apiSecret(clientSecret)     .callback(&quot;http:\/\/your.site.com\/callback&quot;)     .grantType(&quot;authorization_code&quot;)     .build(HHApi.instance()); <\/code><\/pre>\n<p>  \u0412\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c clientId \u0438 clientSecret \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0432 \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 <a href=\"https:\/\/dev.hh.ru\">https:\/\/dev.hh.ru<\/a>. \u0422\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c callback url, \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u043d\u0430\u043c \u043a\u043e\u0434\u043e\u043c (code).  <\/p>\n<pre><code class=\"java\">String authorizationUrl = service.getAuthorizationUrl(); <\/code><\/pre>\n<p>  \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<br \/>  <a href=\"https:\/\/hh.ru\/oauth\/authorize?response_type=code&#038;client_id=UHKBSA...&#038;redirect_uri=https%3A%2F%2Fhhid.ru%2Foauth2%2Fcode\">hh.ru\/oauth\/authorize?response_type=code&#038;client_id=UHKBSA&#8230;&#038;redirect_uri=https%3A%2F%2Fhhid.ru%2Foauth2%2Fcode<\/a><br \/>  \u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0432\u0438\u0434\u0438\u0442 \u0444\u043e\u0440\u043c\u0443 \u043b\u043e\u0433\u0438\u043d\u0430, \u0437\u0430\u0442\u0435\u043c \u0444\u043e\u0440\u043c\u0443 \u0432\u044b\u0434\u0430\u0447\u0438 \u043f\u0440\u0430\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e. \u0415\u0441\u043b\u0438 \u043e\u043d \u0443\u0436\u0435 \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0435\u043d \u0438\/\u0438\u043b\u0438 \u0434\u0430\u0432\u0430\u043b \u043f\u0440\u0430\u0432\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0440\u0430\u043d\u0435\u0435, \u0442\u043e \u0435\u0433\u043e \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 callback. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0430\u043a\u043e\u0439:<br \/>  <a href=\"https:\/\/hhid.ru\/oauth2\/code?code=I2R6O5\">hhid.ru\/oauth2\/code?code=I2R6O5<\/a>\u2026<br \/>  \u0412\u043e\u0442 \u044d\u0442\u043e\u0442 GET \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2018code\u2019 \u043d\u0430\u043c \u0438 \u043d\u0443\u0436\u0435\u043d. \u041c\u0435\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u0442\u043e\u043a\u0435\u043d:  <\/p>\n<pre><code class=\"java\">String code = &quot;I2R6O5...&quot;; OAuth2AccessToken accessToken = service.getAccessToken(code); <\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0435! \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u043e\u043a\u0435\u043d (OAuth2AccessToken accessToken), \u0435\u0441\u043b\u0438 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438:  <\/p>\n<pre><code class=\"java\">OAuth2AccessToken {     access_token=I55KQQ...,     token_type=bearer,     expires_in=1209599,     refresh_token=PGELQV...,     scope=null} <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441:  <\/p>\n<pre><code class=\"java\">OAuthRequest request = new OAuthRequest(Verb.GET, &quot;https:\/\/api.hh.ru\/me&quot;, service); <\/code><\/pre>\n<p>  \u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0442\u043e\u043a\u0435\u043d\u043e\u043c:  <\/p>\n<pre><code class=\"java\">service.signRequest(accessToken, request); <\/code><\/pre>\n<p>  \u041e\u0442\u0441\u044b\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 hh.ru:  <\/p>\n<pre><code class=\"java\">Response response = request.send(); <\/code><\/pre>\n<p>  \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:  <\/p>\n<pre><code class=\"java\">System.out.println(response.getCode()); System.out.println(response.getBody()); <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0444\u0438\u0442! \u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:  <\/p>\n<pre><code class=\"java\">200 {&quot;first_name&quot;: &quot;\u0421\u0442\u0430\u0441&quot;, &quot;last_name&quot;: &quot;\u0413\u0440\u043e\u043c\u043e\u0432&quot;, &quot;middle_name&quot;: null, &quot;is_in_search&quot;: null, &quot;is_anonymous&quot;: false, &quot;resumes_url&quot;: null, &quot;is_employer&quot;: false, &quot;personal_manager&quot;: null, &quot;email&quot;: &quot;s.gromov@hh.ru&quot;, &quot;manager&quot;: null, ...} <\/code><\/pre>\n<p>  \u0418 \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u0437\u0443\u0447\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u043a\u0430\u043a \u0438\u0445 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c, \u0438 \u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u044e\u0430\u043d\u0441\u043e\u0432 \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 OAuth, \u0442\u0430\u043a \u0438 \u0435\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0443 HeadHunter.<\/p>\n<p>  ps. \u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0437\u0434\u0435\u0441\u044c:<br \/>  <a href=\"https:\/\/github.com\/scribejava\/scribejava\/blob\/master\/scribejava-apis\/src\/test\/java\/com\/github\/scribejava\/apis\/examples\/HHExample.java\">https:\/\/github.com\/scribejava\/scribejava\/blob\/master\/scribejava-apis\/src\/test\/java\/com\/github\/scribejava\/apis\/examples\/HHExample.java<\/a><\/p>\n<p>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440\u0435\u043b\u0438\u0437\u0438\u0442\u0441\u044f \u0432 maven central, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0435 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e:  <\/p>\n<pre><code class=\"xml\">&lt;dependency&gt;     &lt;groupId&gt;com.github.scribejava&lt;\/groupId&gt;     &lt;artifactId&gt;scribejava-apis&lt;\/artifactId&gt;     &lt;version&gt;2.3.0&lt;\/version&gt; &lt;\/dependency&gt; <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0436\u0435 \u0443 \u0432\u0430\u0441 \u043e\u0447\u0435\u043d\u044c \u0436\u0435\u0441\u0442\u043a\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e core \u0447\u0430\u0441\u0442\u044c, \u0431\u0435\u0437 \u0441\u0431\u043e\u0440\u043d\u0438\u043a\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 API:  <\/p>\n<pre><code class=\"xml\">&lt;dependency&gt;     &lt;groupId&gt;com.github.scribejava&lt;\/groupId&gt;     &lt;artifactId&gt;scribejava-core&lt;\/artifactId&gt;     &lt;version&gt;2.3.0&lt;\/version&gt; &lt;\/dependency&gt; <\/code><\/pre>\n<h3>3.scribe-java -&gt; SubScribe -&gt; ScribeJava \u0438\u043b\u0438 \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0444\u043e\u0440\u043a \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0434\u043e\u043b\u0433 opensource \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0443<\/h3>\n<p>  \u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0440\u043e\u0433\u043e. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0432\u044b\u043c \u0441\u0430\u0439\u0442\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043b\u0435\u043d\u044c \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439, \u043d\u043e \u0438 \u0441\u0442\u0430\u0440\u044b\u043c, \u0443\u0436\u0435 \u043c\u0430\u0442\u0435\u0440\u044b\u043c, \u0442\u0430\u043a\u0438\u043c \u043a\u0430\u043a hh.ru. \u0418\u043c\u0435\u043d\u043d\u043e \u0441 \u044d\u0442\u0438\u043c\u0438 \u043c\u044b\u0441\u043b\u044f\u043c\u0438 \u043c\u044b \u0438 \u0432\u043e\u0448\u043b\u0438 \u0432 2013-\u0439 \u0433\u043e\u0434.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/77a\/9c0\/d7a\/77a9c0d7ab3b482997cf415e943aa570.jpg\"\/><br \/>  \u041d\u0443\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u0438\u0445 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 OAuth \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u043a\u0430\u043a \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u043e\u0434\u0438\u0442\u0441\u044f, \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u043b \u0438 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0435\u0442 \u0441\u0432\u043e\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0413\u0434\u0435-\u0442\u043e \u0432\u043e\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b, \u0433\u0434\u0435-\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0441\u0432\u043e\u0431\u043e\u0434\u043e\u0439, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438, \u0430 \u0433\u0434\u0435-\u0442\u043e \u0438\u0434\u044f \u043f\u0440\u043e\u0442\u0438\u0432 \u043d\u0438\u0445 \u0440\u0430\u0434\u0438 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0441\u0432\u043e\u0438\u0445 \u0438\u0434\u0435\u0439.<\/p>\n<p>  \u041d\u0430 hh.ru \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u044b \u0441\u0440\u0430\u0437\u0443 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u043e\u0446\u0441\u0435\u0442\u0435\u0439, \u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0443. \u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043a\u0442\u043e-\u0442\u043e \u0443\u0436\u0435 \u0432\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b! \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b (\u0430 \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0438 \u0435\u0449\u0435 \u043a\u0443\u0447\u043a\u0430 \u043c\u0435\u043b\u043a\u0438\u0445 \u043d\u044e\u0430\u043d\u0441\u043e\u0432). \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0443 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0438, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0433\u0434\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0446\u0441\u0435\u0442\u044c \u0440\u0435\u0448\u0438\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0443\u0440\u043b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0438\u0434\u0442\u0438 \u0437\u0430 \u0442\u043e\u043a\u0435\u043d\u043e\u043c, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p>  \u041c\u044b \u0438\u0437\u0443\u0447\u0438\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0432\u0448\u0438\u0435 \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u0438 \u0442\u0430\u043a \u0432\u044b\u0448\u043b\u043e, \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u0441\u0430\u043c\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0430\u0437\u043e\u0439 \u0410\u041f\u0418, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0431\u044b \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c scribe-java \u043e\u0442 <a href=\"https:\/\/github.com\/fernandezpablo85\/\">https:\/\/github.com\/fernandezpablo85\/<\/a>. \u041d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d\u0430 \u0438\u043c\u0435\u043b\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u043d\u043e \u043d\u0435 \u0432\u0441\u0435 \u0410\u041f\u0418, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438. \u041d\u0443 \u043d\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0438 \u043e\u0442\u0434\u0430\u0442\u044c \u0438\u0445 \u0432 \u043e\u0431\u0449\u0435\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>  \u0421 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0438 \u043d\u0430\u0447\u0430\u043b\u0438. \u041d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0430\u0448 PullRequest \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435, \u043c\u044b \u0443\u0437\u043d\u0430\u043b\u0438, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0440 \u201c\u0443\u0441\u0442\u0430\u043b\u201d \u0443\u0436\u0435 \u043e\u0442 \u0442\u0430\u043a\u0438\u0445 \u041f\u0443\u043b\u043b \u0420\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432 \u0438 \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u043d\u0430\u043c \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043d\u0430 \u0432\u0438\u043a\u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u043e\u0432\u044b\u0435 API \u043e\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 ;-( \u041f\u043e \u043c\u043d\u0435\u043d\u0438\u044e \u0430\u0432\u0442\u043e\u0440\u0430, scribe-java \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u0431\u044b\u0442\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437 OAuth2 \u0432\u043e\u0432\u0441\u0435, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430), \u0430 \u043d\u0430\u043c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043e\u0442 \u043d\u0435\u0435 \u0438\u043c\u0435\u0442\u044c \u0432\u0441\u0435 \u0436\u0435 \u0438\u0441\u0442\u0438\u043d\u043d\u043e \u201c\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0435\u201d \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0441\u0431\u043e\u0440\u043d\u0438\u043a \u0432\u0441\u0435\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0410\u041f\u0418. \u041d\u0443 \u0438 \u044d\u0442\u043e \u043d\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u043e, \u0435\u0441\u043b\u0438 \u0447\u0435\u043c-\u0442\u043e \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0444\u043e\u0440\u043a! \u0422\u0430\u043a \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u0441\u0432\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 SubScribe. \u0421 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c \u0438\u0437 \u043f\u044f\u0442\u0438 \u043f\u0443\u043d\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0444\u043e\u0440\u043a\u0430:  <\/p>\n<blockquote><p>Main reasons of fork here:<br \/>  1.https:\/\/github.com\/fernandezpablo85\/scribe-java\/wiki\/Scribe-scope-revised<br \/>  2.We really think, OAuth2.0 should be here;<br \/>  3.We really think, async http should be here for a high-load projects;<br \/>  4.We really think, all APIs should be here. With all their specific stuff. It&#8217;s easier to change\/fix\/add API here, in this lib, one time, instead of N programmers will do the same things on their sides;<br \/>  5. Scribe should be multi-maven-module project. Core and APIs should be deployed as separated artifacts.  <\/p><\/blockquote>\n<p> &copy; <a href=\"https:\/\/github.com\/hhru\/subscribe\/blob\/a8450ec2ed35ecaa64ef03afc1bd077ce14d8d61\/README.md\">https:\/\/github.com\/hhru\/subscribe\/blob\/a8450ec2ed35ecaa64ef03afc1bd077ce14d8d61\/README.md<\/a><\/p>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u043d\u043d\u0435\u0435, \u0438\u0437 \u043f\u0440\u0438\u0447\u0438\u043d \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e. \u0411\u0443\u0434\u0443\u0447\u0438 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0430\u0439\u0442\u043e\u0432 \u0440\u0443\u043d\u0435\u0442\u0430 \u0438 \u0434\u0436\u043e\u0431-\u0441\u0430\u0439\u0442\u043e\u0432 \u0415\u0432\u0440\u043e\u043f\u044b, \u043d\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. \u0418 \u044d\u0442\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u043b\u043e \u0432 \u043f\u043b\u0430\u043d\u044b \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u201c\u0441\u0442\u0440\u0430\u0445\u201d \u0430\u0432\u0442\u043e\u0440\u0430, \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e\u0439 \u0438\u0437-\u0437\u0430 \u043e\u0431\u0438\u043b\u0438\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0410\u041f\u0418 \u0444\u0438\u0447. \u041c\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0434\u0432\u0430 \u043c\u043e\u0434\u0443\u043b\u044f. \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439, 3-\u0435\u0433\u043e \u043c\u0430\u0440\u0442\u0430 2014-\u0433\u043e \u0433\u043e\u0434\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f SubScribe (\u0441\u0440\u0430\u0437\u0443 2.0) \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u041c\u0430\u0432\u0435\u043d\u0430 <a href=\"http:\/\/central.maven.org\/maven2\/ru\/hh\/oauth\/subscribe\/subscribe\/2.0\/\">http:\/\/central.maven.org\/maven2\/ru\/hh\/oauth\/subscribe\/subscribe\/2.0\/<\/a>. \u0413\u0434\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043f\u0440\u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 3.4, \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0439 30-\u0433\u043e \u0438\u044e\u043d\u044f 2015-\u0433\u043e \u0433\u043e\u0434\u0430. \u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043d\u0430\u0431\u0440\u0430\u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0436\u0435 \u0441\u0432\u043e\u0435\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 \u0438 \u043d\u043e\u0432\u044b\u0445 \u0444\u0438\u0447, \u043d\u043e\u0432\u044b\u0445 \u0410\u041f\u0418, \u043e\u043d \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u0442 \u0431\u0435\u043a\u043f\u043e\u0440\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u043a\u0443\u0441\u043d\u043e\u0441\u0442\u0438 \u0438\u0437 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f scribe-java.<\/p>\n<p>  \u0422\u0430\u043a \u0431\u044b \u0432\u0441\u0435 \u0438 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c, \u0435\u0441\u043b\u0438 \u0431\u044b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043e\u0441\u0435\u043d\u0438 2015 Pablo Fernandez (<a href=\"https:\/\/github.com\/fernandezpablo85\">https:\/\/github.com\/fernandezpablo85<\/a>), \u0432\u0438\u0434\u0438\u043c\u043e, \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u0432 \u043e\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u0434\u0435\u0442\u0438\u0449\u0430, \u043d\u0435 \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u0431\u044b \u043d\u0430 \u043d\u0430\u0448 \u0444\u043e\u0440\u043a. \u041f\u0430\u0431\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d \u0438\u043c \u0438 \u0432\u0438\u0434\u0438\u0442 \u043c\u043d\u043e\u0433\u043e\u0435, \u0447\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0430\u043c, \u043d\u043e \u043d\u0435 \u0434\u043e\u0448\u043b\u0438 \u0440\u0443\u043a\u0438, \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u043c. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043c\u044f\u0432\u0448\u0438\u0441\u044c \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u0438\u0447\u0438\u044f, \u043c\u044b \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0438 \u0442\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f ScribeJava \u2014 \u043f\u043e \u0441\u0443\u0442\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0444\u043e\u0440\u043a SubScribe. \u0421 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 github.com \u2014 <a href=\"https:\/\/github.com\/scribejava\">https:\/\/github.com\/scribejava<\/a>.<\/p>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 ScribeJava \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 open source \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434 \u043a\u0440\u044b\u043b\u043e\u043c hh.ru. \u0412\u0445\u043e\u0434\u0438\u0442 \u0432 \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 java \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 OAuth2: <a href=\"http:\/\/oauth.net\/2\/\">http:\/\/oauth.net\/2\/<\/a>. \u0418\u043c\u0435\u0435\u0442 280 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u0435\u0439, 3 106 \u0437\u0432\u0435\u0437\u0434\u043e\u0447\u0435\u043a \u0438 1 220 \u0444\u043e\u0440\u043a\u043e\u0432 \u043d\u0430 github.com.<\/p>\n<h3>4. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u0442\u043e\u043a\u0435\u043d \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Google<\/h3>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0441\u0430\u0439\u0442 \u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0438\/\u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ning http client, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c ScribeJava \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u0432\u0430\u0448\u0435\u043c classpath \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b ning http client  <\/p>\n<pre><code class=\"xml\">        &lt;dependency&gt;             &lt;groupId&gt;com.ning&lt;\/groupId&gt;             &lt;artifactId&gt;async-http-client&lt;\/artifactId&gt;             &lt;version&gt;1.9.32&lt;\/version&gt;        &lt;\/dependency&gt; <\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0431\u0438\u043b\u0434\u0435\u0440 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 ServiceBuilderAsync.  <\/p>\n<pre><code class=\"java\">OAuth20Service service = new ServiceBuilderAsync()     .apiKey(clientId)     .apiSecret(clientSecret)     .scope(&quot;profile&quot;) \/\/ replace with desired scope     .state(&quot;secret&quot; + new Random().nextInt(999_999))     .callback(&quot;https:\/\/hhid.ru\/oauth2\/code&quot;)     .asyncHttpClientConfig(clientConfig)     .build(GoogleApi20.instance()); <\/code><\/pre>\n<p>  \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0437\u0434\u0435\u0441\u044c \u2014 \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 asyncHttpClientConfig(clientConfig), \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e ning http \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043f\u0443\u0441\u0442\u044c \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0438\u043c:  <\/p>\n<pre><code class=\"java\">AsyncHttpClientConfig clientConfig = new AsyncHttpClientConfig.Builder()     .setMaxConnections(5)     .setRequestTimeout(10_000)     .setAllowPoolingConnections(false)     .setPooledConnectionIdleTimeout(1_000)     .setReadTimeout(1_000)     .build(); <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u0436\u0435 Google \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 state. \u041e\u043d\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 CRSF \u0430\u0442\u0430\u043a\u0438, \u043d\u043e \u044d\u0442\u043e \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 api.hh.ru, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435. \u041e\u0442\u0441\u044b\u043b\u0430\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443:  <\/p>\n<pre><code class=\"java\">String authorizationUrl = service.getAuthorizationUrl(); <\/code><\/pre>\n<p>  \u0410 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443 \u0441 HTTP \u043f\u043e\u0445\u043e\u0434\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441 \u2018Async\u2019. \u0422.\u0435. \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u0435\u0442\u043e\u0434\u0430 getAccessToken \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 getAccessTokenAsync.   <\/p>\n<pre><code class=\"java\">Future&lt;OAuth2AccessToken&gt; accessTokenFuture = service.getAccessTokenAsync(&quot;code&quot;, null); <\/code><\/pre>\n<p>  \u0412 \u043e\u0442\u0432\u0435\u0442 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c Future (\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0434\u044c). \u0418\u043b\u0438 \u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c Callback, \u043a\u0430\u043a \u043d\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u0435\u0435.<br \/>  \u0413\u043e\u0442\u043e\u0432\u043e! \u041f\u0440\u043e\u0441\u0442\u043e, \u043d\u0435 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0438? \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b (OAuthRequestAsync) \u0432 \u0433\u0443\u0433\u043b \u043e\u0442 \u043b\u0438\u0446\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:  <\/p>\n<pre><code class=\"java\">OAuth2AccessToken accessToken = accessTokenFuture.get(); OAuthRequestAsync request = new OAuthRequestAsync(Verb.GET, &quot;https:\/\/www.googleapis.com\/plus\/v1\/people\/me&quot;, service); service.signRequest(accessToken, request); Response response = request.sendAsync(null).get(); System.out.println(response.getCode()); System.out.println(response.getBody()); <\/code><\/pre>\n<p>  \u0423 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e OAuthRequestAsync \u043c\u044b \u0432\u044b\u0437\u0432\u0430\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 sendAsync, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u0442 Callback \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u043c Future. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043b\u0430\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u043e \u0441 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c\u0438. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043a\u0430\u043a-\u0442\u043e \u043f\u0440\u043e\u0444\u043e\u0440\u0441\u0438\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c (\u0438\u043b\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c) \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c ScribeJava \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u201c\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u201d:  <\/p>\n<pre><code class=\"java\">ScribeJavaConfig.setForceTypeOfHttpRequests(ForceTypeOfHttpRequest.FORCE_ASYNC_ONLY_HTTP_REQUESTS); <\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 ScribeJava, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c Exception. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c Exception, \u043d\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u0418\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0437\u0434\u0435\u0441\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 OAuth \u2014 refresh_token. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0439 \u043d\u0430\u043c\u0438 access_token \u0438\u043c\u0435\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b\u0439 \u0441\u0440\u043e\u043a \u0436\u0438\u0437\u043d\u0438. \u0418 \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u043f\u0440\u043e\u0442\u0443\u0445\u0430\u0435\u0442, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u043e\u043a\u0435\u043d. \u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430: \u043b\u0438\u0431\u043e \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0441\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c refresh_token (\u0435\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u043d\u0435 \u0432\u0441\u0435, \u043d\u043e Google, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0435\u0433\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442). \u0418\u0442\u0430\u043a, \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0436\u0435\u0433\u043e access_token \u0432\u0441\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e, \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c:  <\/p>\n<pre><code class=\"java\">OAuth2AccessToken refreshedAccessToken accessToken = service.refreshAccessToken(accessToken.getRefreshToken()); <\/code><\/pre>\n<p>  \u0438\u043b\u0438 \u0434\u043b\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:  <\/p>\n<pre><code class=\"java\">Future&lt;OAuth2AccessToken&gt; refreshedAccessTokenFuture = service.refreshAccessTokenAsync(accessToken.getRefreshToken(), null); <\/code><\/pre>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 Google refresh_token, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u043c\u0435\u0442\u043e\u0434 refreshAccessToken, \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0439\u0434\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432:  <\/p>\n<pre><code class=\"java\">\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c access_type=offline \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c refresh_token \/\/https:\/\/developers.google.com\/identity\/protocols\/OAuth2WebServer#preparing-to-start-the-oauth-20-flow Map&lt;String, String&gt; additionalParams = new HashMap&lt;&gt;(); additionalParams.put(&quot;access_type&quot;, &quot;offline&quot;); \/\/Google \u043e\u0442\u0434\u0430\u0441\u0442 refresh_token \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 offline \u0437\u0430\u043f\u0440\u043e\u0441, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0435 \u0440\u0430\u0437, \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c prompt additionalParams.put(&quot;prompt&quot;, &quot;consent&quot;); String authorizationUrl = service.getAuthorizationUrl(additionalParams); <\/code><\/pre>\n<p>  ps. \u042d\u0442\u043e\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435 (\u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c main) \u0442\u0443\u0442: <a href=\"https:\/\/github.com\/scribejava\/scribejava\/tree\/master\/scribejava-apis\/src\/test\/java\/com\/github\/scribejava\/apis\/examples\">https:\/\/github.com\/scribejava\/scribejava\/tree\/master\/scribejava-apis\/src\/test\/java\/com\/github\/scribejava\/apis\/examples<\/a><\/p>\n<h3>5. \u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p>  1.ScribeJava \u043d\u0430 github.com <a href=\"https:\/\/github.com\/scribejava\/scribejava\">https:\/\/github.com\/scribejava\/scribejava<\/a><br \/>  2.\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f api.hh.ru <a href=\"https:\/\/github.com\/hhru\/api\">https:\/\/github.com\/hhru\/api<\/a><br \/>  3.\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f Google <a href=\"https:\/\/developers.google.com\/identity\/protocols\/OAuth2WebServer\">https:\/\/developers.google.com\/identity\/protocols\/OAuth2WebServer<\/a><br \/>  4.RFC OAuth2 <a href=\"http:\/\/tools.ietf.org\/html\/rfc6749\">http:\/\/tools.ietf.org\/html\/rfc6749<\/a><br \/>  5.javadoc online <a href=\"http:\/\/www.javadoc.io\/doc\/com.github.scribejava\/scribejava-core\">http:\/\/www.javadoc.io\/doc\/com.github.scribejava\/scribejava-core<\/a><\/p>\n<h3>Post Scriptum<\/h3>\n<p>  \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0432\u0438\u0434\u0435 \u041f\u0443\u043b\u043b \u0420\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432 \u043d\u0430 github.com               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/278957\/\"> https:\/\/habrahabr.ru\/post\/278957\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/273\/4b0\/326\/2734b032642d44d38ea5ac257bd2e693.jpg\" alt=\"image\"\/><\/p>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0439 \u0444\u0440\u0430\u0437\u043e\u0439 \u043d\u0430\u0441 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 OAuth \u2014 ScribeJava (<a href=\"https:\/\/github.com\/scribejava\/scribejava\">https:\/\/github.com\/scribejava\/scribejava<\/a>). \u0415\u0441\u043b\u0438 \u0431\u044b\u0442\u044c \u0442\u043e\u0447\u043d\u0435\u0435, \u0442\u043e \u0444\u0440\u0430\u0437\u0430 \u0437\u0432\u0443\u0447\u0438\u0442 \u0442\u0430\u043a: \u201cWho said OAuth\/OAuth2 was difficult? Configuring ScribeJava is <b>so easy your grandma can do it!<\/b> check it out:\u201d.<\/p>\n<p>  \u0418 \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043f\u0440\u0430\u0432\u0434\u0443:  <\/p>\n<pre><code class=\"java\">OAuth20Service service = new ServiceBuilder().apiKey(clientId).apiSecret(clientSecret)     .callback(&quot;http:\/\/your.site.com\/callback&quot;).grantType(&quot;authorization_code&quot;).build(HHApi.instance()); String authorizationUrl = service.getAuthorizationUrl(); OAuth2AccessToken accessToken = service.getAccessToken(code); <\/code><\/pre>\n<p>  \u0413\u043e\u0442\u043e\u0432\u043e! \u042d\u0442\u0438\u0445 \u0442\u0440\u0435\u0445 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c OAuth \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u0410 \u0441\u0430\u043c OAuth \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"java\">OAuthRequest request = new OAuthRequest(Verb.GET, &quot;https:\/\/api.hh.ru\/me&quot;, service); service.signRequest(accessToken, request); String response = request.send().getBody(); <\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0443 \u043d\u0430\u0441 \u0432 \u0440\u0443\u043a\u0430\u0445 (\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 response). \u0418 \u043d\u0438 \u043a\u0430\u043f\u043b\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u043a\u0430\u043a \u0432 \u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 OAuth. \u0425\u043e\u0442\u0438\u043c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 http-\u0437\u0430\u043f\u0440\u043e\u0441\u044b? \u041d\u0430\u043c \u0445\u0432\u0430\u0442\u0438\u0442 \u0442\u0435\u0445 \u0436\u0435 \u0442\u0440\u0435\u0445 \u0441\u0442\u0440\u043e\u0447\u0435\u043a. \u041d\u0438\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u044d\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-276112","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/276112","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=276112"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/276112\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=276112"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=276112"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=276112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}