{"id":277572,"date":"2016-04-04T10:36:03","date_gmt":"2016-04-04T06:36:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=277572"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=277572","title":{"rendered":"SSO \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u0430\u0432\u0438\u0446\u044b \u0438 \u0447\u0443\u0434\u043e\u0432\u0438\u0449\u0430"},"content":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b99\/46a\/e84\/b9946ae84b134094903fc8ee6c091327.jpg\"\/><br \/>  \u041d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u2014 \u0433\u043b\u0443\u043f\u0435\u043d\u044c\u043a\u0430\u044f \u043a\u0440\u0430\u0441\u0430\u0432\u0438\u0446\u0430 \u043e\u0442\u0434\u0430\u0451\u0442 \u0447\u0443\u0434\u043e\u0432\u0438\u0449\u0443 \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>  \u0412 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0435 \u0436\u0438\u043b\u0430 \u0431\u044b\u043b\u0430 \u0441\u0442\u0430\u0440\u0430\u044f \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0448\u043a\u043e\u043b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 Classic ASP. \u0415\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u0441\u0435 \u0443\u0447\u0438\u0442\u0435\u043b\u044f, \u0443\u0447\u0435\u043d\u0438\u043a\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0438\u0445 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0438. \u0418 \u0432 \u043e\u0434\u0438\u043d \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u044b\u0439 \u0434\u0435\u043d\u044c \u0435\u0451 \u0440\u0435\u0448\u0438\u043b\u0438 \u043c\u043e\u0434\u0435\u0440\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041d\u0430 \u0441\u043c\u0435\u043d\u0443 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0438\u0434\u0442\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f ASP.Net MVC 5 \u0441 \u043d\u043e\u0432\u044b\u043c \u0434\u0438\u0437\u0430\u0439\u043d\u043e\u043c. <br \/>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u0447\u0430\u0441\u044c\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 6000 asp \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c, \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0440\u0430\u044f \u0438 \u043d\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e.<br \/>  \u0418 \u0432\u043e\u0442 \u0441\u043f\u0443\u0441\u0442\u044f \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043d\u043e\u0432\u0430\u044f \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0449\u0430\u044f (\u0445\u043e\u0442\u044f \u043a\u043e\u0435-\u0433\u0434\u0435 \u0432\u0441\u0451 \u0442\u0430\u043a\u0438 \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u0442 \u0440\u0436\u0430\u0432\u0447\u0438\u043d\u0430 \u0438 \u0437\u0430\u043f\u043b\u0430\u0442\u043a\u0438, \u0438\u0431\u043e \u0441\u0440\u043e\u043a\u0438) \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u0438\u043d\u044f\u043b\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<br \/>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0430 (<abbr title=\"Single Sign-On\">SSO<\/abbr>) \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u0433 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043a\u0430 \u0435\u0449\u0451 \u0433\u043b\u0443\u043f\u0435\u043d\u044c\u043a\u043e\u0439 \u043a\u0440\u0430\u0441\u0430\u0432\u0438\u0446\u0435\u0439 \u0438 \u043f\u043e\u043b\u043d\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0447\u0443\u0434\u043e\u0432\u0438\u0449\u0435\u043c.<br \/>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0434\u043d\u0430 \u0438\u0437 \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435\u043c (<abbr title=\"Learning management system\">LMS<\/abbr>) \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0430 \u0438\u043c\u0435\u0442\u044c \u0442\u0435\u0441\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u043d\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0432 \u0441\u0435\u0431\u044f SSO.<br \/>  <a name=\"habracut\"><\/a><\/p>\n<h4>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/h4>\n<p>  \u0418\u0442\u0430\u043a, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u0435\u043c: 2500 \u0448\u043a\u043e\u043b, 1.5 \u043c\u043b\u043d \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0412 \u043d\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u0430\u0436\u0434\u0430\u044f \u0448\u043a\u043e\u043b\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u0434\u043e\u043c\u0435\u043d \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0432 \u0441\u0442\u0430\u0440\u043e\u0439 \u2014 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043c\u0435\u043d.<br \/>  \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a \u0443\u0447\u0451\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 (IdP) \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043e\u0431\u0435\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043b\u043e\u0433\u0438\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<br \/>  \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043c\u0443\u043b\u044c\u0442\u0438\u0430\u0440\u0435\u043d\u0434\u043d\u0430\u044f (multi-tenant) \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0448\u043a\u043e\u043b\u044b \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0430 \u043e\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0435\u0442 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<br \/>  \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f Classic ASP, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a\u043e\u0433\u043e \u043b\u0438\u0431\u043e IdP.<br \/>  \u0422\u0440\u0435\u0442\u044c\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0443\u0447\u0451\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 IdP, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430: \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 IdP -&gt; \u043d\u0430\u0448 IdP -&gt; \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c (Service Provider).<\/p>\n<h4>\u0412\u044b\u0431\u043e\u0440 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 SSO<\/h4>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u043d\u043e\u0432\u0430 \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0443\u0442\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 SSO. \u0421\u0430\u043c\u044b\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b:  <\/p>\n<ul>\n<li><abbr title=\"Security Assertion Markup Language\">SAML<\/abbr><\/li>\n<li>OpenID<\/li>\n<\/ul>\n<p>  OAuth \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e \u0441\u0443\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u043d\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0447\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430.<br \/>  \u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u043f\u043e\u043a\u0430 \u0435\u0449\u0451 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f SAML 2.0, \u0445\u043e\u0442\u044c \u043e\u043d \u0438 \u0441\u0442\u0430\u0440\u0435\u043d\u044c\u043a\u0438\u0439. \u0427\u0430\u0441\u0442\u044c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 IdP, \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0432\u044b\u0448\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0432 \u0442\u043e\u0439 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, LMS \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 SAML, \u043d\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 OpenID. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c SAML 2.0.<br \/>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u044b\u043b \u0432\u044b\u0431\u043e\u0440 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 SAML. \u0415\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438 \u2014 <a href=\"https:\/\/en.wikipedia.org\/wiki\/SAML-based_products_and_services\">SAML-based products and services<\/a>. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0432\u0440\u043e\u0434\u0435 <a href=\"https:\/\/simplesamlphp.org\/\">SimpleSAMLphp<\/a>, \u043d\u043e, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u044d\u0442\u043e php, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043f\u044b\u0442\u0430 \u043c\u0430\u043b\u043e, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0441\u0442\u0438\u0442\u044c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c. \u041f\u0440\u043e\u0448\u0435\u0440\u0441\u0442\u0438\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 .Net \u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043e\u0442 <a href=\"http:\/\/www.componentspace.com\/saml\/\">ComponentSpace<\/a>, \u043d\u0430 \u0444\u043e\u043d\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0449\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u043c\u0438. \u0412 \u0446\u0435\u043b\u043e\u043c \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043b\u043e \u0441\u0435\u0431\u044f, \u0445\u043e\u0442\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438\u0441\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u043e\u0437\u0434\u043d\u0435\u0435.<br \/>  Multi-tenant \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u044f\u0432\u0438\u043b\u0430 \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u2014 \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c IdP \u0438 SP \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0448\u043a\u043e\u043b\u044b? \u0414\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:  <\/p>\n<ol>\n<li>\u041a\u0430\u0436\u0434\u0430\u044f \u0448\u043a\u043e\u043b\u0430 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 IdP. \u041b\u0435\u0433\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 IdP \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0431\u0430\u0437\u0435. \u0412\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c SSO \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0430\u0440\u043e\u0439 \u0438 \u043d\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438. \u041e\u0447\u0435\u043d\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f SSO \u0441 LMS \u0438\u043b\u0438 \u0435\u0449\u0451 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u2014 \u043f\u043e \u0441\u0443\u0442\u0438 \u043d\u0430\u0434\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c 2500 \u0440\u0430\u0437\u043d\u044b\u0445 IdP, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0439\u0442\u0438 \u0432 \u043b\u044e\u0431\u0443\u044e \u0448\u043a\u043e\u043b\u0443.<\/li>\n<li>IdP \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u043a\u0430\u0436\u0434\u0430\u044f \u0448\u043a\u043e\u043b\u0430 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 SP. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u0436\u0435 \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u0430, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0440\u0430\u0437\u043c\u0430\u0437\u0430\u043d\u044b \u043f\u043e 2500 \u0431\u0430\u0437. \u0417\u0430\u0442\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442\u0441\u044f \u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0434\u0438\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u043d \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0448\u043a\u043e\u043b \u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0440\u043e\u043b\u0435\u0439. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443 \u043c\u043d\u043e\u0433\u043e\u0434\u0435\u0442\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0441 \u0434\u0435\u0442\u044c\u043c\u0438 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0448\u043a\u043e\u043b\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043b\u043e\u0433\u0438\u043d, \u0430 \u043d\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e, \u043a\u0430\u043a \u0441\u0435\u0439\u0447\u0430\u0441.<\/li>\n<\/ol>\n<p>  \u041e\u0431\u0441\u0443\u0434\u0438\u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u043e\u043c, \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c.<br \/>  \u0414\u043b\u044f Classic ASP \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u043c\u044b \u043d\u0435 \u043d\u0430\u0448\u043b\u0438, \u0430 \u0441\u0430\u043c\u0438\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u0430\u044f. \u041d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u0437\u0430\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<br \/>  \u041e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043e\u0442 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 \u0438 \u043f\u043b\u0430\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e ComponentSpace SAML 2.0 for .Net. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0438 \u043a\u043e\u0434 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c.<\/p>\n<h4>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/h4>\n<p>  \u041f\u043e\u043a\u0430 \u0435\u0449\u0451 \u043d\u0435 \u0440\u0435\u0448\u0435\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0430\u0437\u043c\u0430\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0437\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043e \u0441\u0443\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e \u0438 \u0432\u0441\u0435 \u0448\u043a\u043e\u043b\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d \u0441\u0443\u0431\u0434\u043e\u043c\u0435\u043d (\u0441\u043a\u0430\u0436\u0435\u043c, newsystem.localhost), \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c IdP \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0430 \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u044c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0441\u0435\u0432\u0434\u043e-\u0448\u043a\u043e\u043b\u043e\u0439 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0434\u043e\u043c\u0435\u043d\u043e\u043c \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u00abidp\u00bb.<br \/>  \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u0431\u0443\u0434\u0435\u043c \u0438\u043c\u0435\u0442\u044c 2 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u044d\u0442\u043e \u0441 OWIN \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"cs\">app.UseCookieAuthentication(new CookieAuthenticationOptions     {         AuthenticationType = &quot;SSO.ApplicationCookie&quot;,         CookieDomain = &quot;.newsystem.localhost&quot;,         ExpireTimeSpan = new TimeSpan(6, 0, 0),         SlidingExpiration = true     });  app.UseCookieAuthentication(new CookieAuthenticationOptions     {         AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,         LoginPath = new PathString(&quot;\/Account\/Login&quot;)     }); <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u043a\u0443\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f IdP \u0441 \u0441\u0443\u0431\u0434\u043e\u043c\u0435\u043d\u043e\u043c \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043e\u0431\u0449\u0438\u043c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0448\u043a\u043e\u043b. \u0421\u0440\u043e\u043a \u0436\u0438\u0437\u043d\u0438 \u2014 6 \u0447\u0430\u0441\u043e\u0432 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u043e\u0434\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438. \u0412\u0442\u043e\u0440\u0430\u044f \u2014 \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u043a\u0443\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0448\u043a\u043e\u043b\u044b.<br \/>  \u0422\u043e\u0433\u0434\u0430 \u043a\u0430\u0436\u0434\u0430\u044f \u0448\u043a\u043e\u043b\u0430 \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a\u0430\u043a IdP.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0435\u0449\u0451 \u043d\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0448\u043a\u043e\u043b\u0435, \u00abAccount\/Login\u00bb \u0441\u043e\u0437\u0434\u0430\u0441\u0442 SAML \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442 \u043d\u0430 \u00abSsoService\u00bb. IdP \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0435\u0449\u0451 \u043d\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0448\u043a\u043e\u043b\u0443, \u043d\u043e \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u00abAccount\/IdPLogin\u00bb. \u0428\u043a\u043e\u043b\u0430 \u0441\u0430\u043c\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c, \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043d\u043e \u043d\u0435 \u0443 \u0441\u0435\u0431\u044f, \u0430 \u0432 IdP. \u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0438 \u0441\u0430\u043c IdP \u2014 \u00abSso\/SsoCompete\u00bb \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441. \u0414\u0430\u043b\u0435\u0435 \u0448\u043a\u043e\u043b\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0443\u0436\u0435 \u043a\u0430\u043a SP \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u0432 \u0441\u0432\u043e\u0451\u043c \u00abSso\/AssertionConsumerService\u00bb.<br \/>  \u0415\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0437\u0430\u0433\u0432\u043e\u0437\u0434\u043a\u0430 \u2014 \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0448\u043a\u043e\u043b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u043c\u0435\u0435\u0442 \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c. \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0438\u0448\u0451\u043b \u043e\u0442 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0441\u0430\u043c\u043e\u043c\u0443 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0448\u043a\u043e\u043b\u0443. \u0412\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0437 2500 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 \u2014 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u0448\u043a\u043e\u043b\u0443 \u0438 \u0434\u0430\u0442\u044c SP \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 SAML \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441.<br \/>  \u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c IdP \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0448\u043a\u043e\u043b\u0435? \u0422\u043e\u0433\u0434\u0430 \u043f\u043e\u043a\u0430\u0436\u0435\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u0445\u043e\u0434\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u0445\u0435\u043c\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/b><\/p>\n<div class=\"spoiler_text\"><a href=\"https:\/\/habrastorage.org\/files\/5e9\/cea\/e12\/5e9ceae12d534bc38f1479d130226f3d.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/5e9\/cea\/e12\/5e9ceae12d534bc38f1479d130226f3d.png\"\/><\/a>  <\/div>\n<\/div>\n<p>  school.newsystem.localhost \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438 SP (\u0441\u043b\u0435\u0432\u0430), \u0438 IdP (\u0441\u043f\u0440\u0430\u0432\u0430).<br \/>  \u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 Account\/IdPLogin \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0448\u043a\u043e\u043b\u044b, \u043b\u0438\u0431\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u043c\u0443 IdP.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u0445\u0435\u043c\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432\u044b\u0445\u043e\u0434\u0430<\/b><\/p>\n<div class=\"spoiler_text\"><a href=\"https:\/\/habrastorage.org\/files\/5a5\/bb9\/f36\/5a5bb9f3634448e8b2bd644b6ded8661.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/5a5\/bb9\/f36\/5a5bb9f3634448e8b2bd644b6ded8661.png\"\/><\/a>  <\/div>\n<\/div>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0443\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u0438. \u041d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u0441\u0451 \u0436\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<h4>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/h4>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 IdP \u0438 SP. \u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e IdP \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d, \u0430 \u0432\u043e\u0442 SP \u0431\u0443\u0434\u0435\u0442 \u0443\u0439\u043c\u0430. 2500 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, 2500 \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0435\u0449\u0451 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c 1 \u0434\u043b\u044f LMS. ComponentSpace \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e. \u0422\u0430\u043a \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u0442\u043e, \u0438 \u0434\u0440\u0443\u0433\u043e\u0435!<br \/>  \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f saml.config, \u0442\u0443\u0434\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u043e\u0431\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:  <\/p>\n<pre><code class=\"xml\">&lt;?xml version=&quot;1.0&quot;?&gt; &lt;SAMLConfiguration xmlns=&quot;urn:componentspace:SAML:2.0:configuration&quot;&gt;   &lt;!-- Identity provider configuration --&gt;   &lt;IdentityProvider Name=&quot;urn:example:SAML:2.0:idp.newsystem.localhost&quot; LocalCertificateSerialNumber=&quot;blabla&quot;\/&gt;    &lt;!-- Service provider configuration --&gt;   &lt;ServiceProvider Name=&quot;urn:example:SAML:2.0:idp.newsystem.localhost&quot;                           AssertionConsumerServiceUrl=&quot;https:\/\/idp.newsystem.localhost\/sso\/idp\/sp\/AssertionConsumerService&quot;                           LocalCertificateSerialNumber=&quot;blabla&quot;\/&gt;    &lt;!-- Partner Identity providers configuration --&gt;   &lt;PartnerIdentityProvider Name=&quot;urn:3rdPartyIdP&quot;                            SignAuthnRequest=&quot;false&quot;                            WantSAMLResponseSigned=&quot;true&quot;                            WantAssertionSigned=&quot;false&quot;                            WantAssertionEncrypted=&quot;false&quot;                            SingleSignOnServiceUrl=&quot;http:\/\/localhost:50320\/SAML\/SSOService&quot;                            SingleLogoutServiceUrl=&quot;http:\/\/localhost:50320\/SAML\/SLOService&quot;                            PartnerCertificateSerialNumber=&quot;blabla&quot;\/&gt;    &lt;!-- Service providers configurations --&gt;   &lt;PartnerServiceProvider Name=&quot;urn:lms&quot;                           WantAuthnRequestSigned=&quot;false&quot;                           SignSAMLResponse=&quot;true&quot;                           SignAssertion=&quot;false&quot;                           EncryptAssertion=&quot;false&quot; AssertionConsumerServiceUrl=&quot;https:\/\/lms.localhost\/sso\/sp\/AssertionConsumerService.aspx&quot; SingleLogoutServiceUrl=&quot;https:\/\/lms.localhost\/sso\/sp\/SingleLogoutHandler.aspx&quot;                           PartnerCertificateSerialNumber=&quot;blabla&quot;\/&gt;   &lt;\/SAMLConfiguration&gt; <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c   <\/p>\n<ul>\n<li>\u0441\u0435\u0431\u044f \u043a\u0430\u043a IdentityProvider \u0441 \u0438\u043c\u0435\u043d\u0435\u043c (\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440) \u201curn:example:SAML:2.0:idp.newsystem.localhost\u201d \u0438 \u043d\u0435\u043a\u0438\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u043c;<\/li>\n<li>\u0441\u0435\u0431\u044f \u043a\u0430\u043a ServiceProvider \u0441 \u0442\u0435\u043c \u0436\u0435 \u0438\u043c\u0435\u043d\u0435\u043c \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0443\u0442\u044c \u0434\u043e \u043d\u0430\u0448\u0435\u0433\u043e AssertionConsumerService \u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442;<\/li>\n<li>\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 IdentityProvider (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 IdP \u043e\u0442 ComponentSpace), \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u044f\u0432\u043b\u044f\u0435\u043c\u0441\u044f ServiceProvider, \u0441 \u0438\u0445 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u043c\u0438, \u043f\u0443\u0442\u044f\u043c\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438;<\/li>\n<li>\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 ServiceProvider (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e LMS), \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u044f\u0432\u043b\u044f\u0435\u043c\u0441\u044f IdP, \u0441 \u0438\u0445 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430\u043c\u0438, \u043f\u0443\u0442\u044f\u043c\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c.<\/li>\n<\/ul>\n<p>  \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0445\u043e\u0434\u044f\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0430\u0448\u0438 \u0448\u043a\u043e\u043b\u044b \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e. \u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u043e\u0442\u0432\u0435\u0442\u044b. \u041f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u0445 \u0432 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b, \u0438 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 SP. \u0415\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u2014 \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0438 \u043a\u0430\u043a IdP, \u0438 \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0438\u0437 5000 SP. \u041f\u043e\u0447\u0435\u043c\u0443 5000? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0438\u0437 2500 SP. ComponentSpace \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439, \u0447\u0435\u043c \u043c\u044b \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f.<br \/>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438\u0437 \u0444\u0430\u0439\u043b\u0430:  <\/p>\n<pre><code class=\"cs\">SAMLConfiguration.Load(); <\/code><\/pre>\n<p>  ComponentSpace \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0441\u0430\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0441 \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u201cdefault\u201d. \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u043d\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u043a \u043d\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 SAMLConfiguration.Current.<br \/>  \u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e IdP, \u043f\u043e \u0441\u0443\u0442\u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0432 \u0432\u0441\u0451 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0439:  <\/p>\n<pre><code class=\"cs\">var identityProviderConfigurationId = SAMLConfiguration.Current.LocalIdentityProviderConfiguration.Name;  var identityProviderConfiguration = new SAMLConfiguration     {         LocalIdentityProviderConfiguration = SAMLConfiguration.Current.LocalIdentityProviderConfiguration,         PartnerServiceProviderConfigurations = SAMLConfiguration.Current.PartnerServiceProviderConfigurations,         LocalServiceProviderConfiguration = SAMLConfiguration.Current.LocalServiceProviderConfiguration,         PartnerIdentityProviderConfigurations = SAMLConfiguration.Current.PartnerIdentityProviderConfigurations,         ReloadOnConfigurationChange = SAMLConfiguration.Current.ReloadOnConfigurationChange,         CertificateManager = SAMLConfiguration.Current.CertificateManager,         TraceLevel = SAMLConfiguration.Current.TraceLevel     };  SAMLConfiguration.Configurations.Add(identityProviderConfigurationId, identityProviderConfiguration); <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 PartnerIdentityProviderConfiguration:  <\/p>\n<pre><code class=\"cs\">var partnerIdentityProviderConfigurations = new Dictionary&lt;string, PartnerIdentityProviderConfiguration&gt;     {         {             identityProviderConfigurationId,             new PartnerIdentityProviderConfiguration                 {                     Name = identityProviderConfigurationId,                     SignAuthnRequest = true,                     WantSAMLResponseSigned = false,                     WantAssertionSigned = false,                     WantAssertionEncrypted = false,                     SingleSignOnServiceUrl = string.Format(&quot;https:\/\/{0}\/sso\/ssoservice&quot;, identityProviderHost),                     SingleLogoutServiceUrl = string.Format(&quot;https:\/\/{0}\/sso\/sloidpservice&quot;, identityProviderHost),                     PartnerCertificateSerialNumber = identityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificateSerialNumber,                     PartnerCertificateFile = identityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificateFile,                     PartnerCertificateSubject = identityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificateSubject,                     PartnerCertificateThumbprint = identityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificateThumbprint                 }         }     }; <\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0451\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u043e\u043c\u0435\u043d\u044b \u0448\u043a\u043e\u043b, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 SP \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u043c IdP \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043d\u0430\u0448\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 SP \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:  <\/p>\n<pre><code class=\"cs\">var spConfigurationId = string.Format(&quot;urn:example:saml:2.0:{0}&quot;, domain);  SAMLConfiguration.Configurations.Add(spConfigurationId, new SAMLConfiguration     {         LocalServiceProviderConfiguration = new LocalServiceProviderConfiguration         {             Name = spConfigurationId,             AssertionConsumerServiceUrl = string.Format(&quot;https:\/\/{0}\/sso\/assertionconsumerservice&quot;, domain),             LocalCertificateSerialNumber = IdentityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificateSerialNumber,             LocalCertificateFile = IdentityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificateFile,             LocalCertificatePassword = IdentityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificatePassword,             LocalCertificatePasswordKey = IdentityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificatePasswordKey,             LocalCertificateSubject = IdentityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificateSubject,             LocalCertificateThumbprint = IdentityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificateThumbprint         },         PartnerIdentityProviderConfigurations = partnerIdentityProviderConfigurations     }); }  identityProviderConfiguration     .PartnerServiceProviderConfigurations     .Add(spConfigurationId, new PartnerServiceProviderConfiguration     {         Name = spConfigurationId,         WantAuthnRequestSigned = false,         SignSAMLResponse = true,         SignAssertion = false,         EncryptAssertion = false,         AssertionConsumerServiceUrl = string.Format(&quot;https:\/\/{0}\/sso\/assertionconsumerservice&quot;, domain),         SingleLogoutServiceUrl = string.Format(&quot;https:\/\/{0}\/sso\/slospservice&quot;, domain),         PartnerCertificateSerialNumber = IdentityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificateSerialNumber,         PartnerCertificateFile = IdentityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificateFile,         PartnerCertificateSubject = IdentityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificateSubject,         PartnerCertificateThumbprint = IdentityProviderConfiguration.LocalIdentityProviderConfiguration.LocalCertificateThumbprint     }); <\/code><\/pre>\n<p>  \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u043a\u0441\u0438, \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0443\u0442\u044f\u0445:   <\/p>\n<pre><code class=\"cs\">    AssertionConsumerServiceUrl = string.Format(&quot;https:\/\/{0}\/proxy\/assertionconsumerservice&quot;, domain),     SingleLogoutServiceUrl = string.Format(&quot;https:\/\/{0}\/proxy\/sloservice&quot;, domain), <\/code><\/pre>\n<p>  \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 ComponentSpace \u043d\u0443\u0436\u043d\u0430 \u0441\u0435\u0441\u0441\u0438\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0430 \u043d\u0430\u0448\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 ASP.Net MVC \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u044e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442. \u0422\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0434\u0438 SSO \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0451 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c \u0443 \u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0441\u043e\u0431\u043b\u0430\u0437\u043d \u0442\u0443\u0434\u0430 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0435\u0449\u0451 \u0447\u0442\u043e-\u0442\u043e, \u0438 \u043f\u043e\u0448\u043b\u043e \u043f\u043e\u0435\u0445\u0430\u043b\u043e, \u043f\u0440\u043e\u0449\u0430\u0439 sessionless. \u0415\u0441\u0442\u044c \u0432\u044b\u0445\u043e\u0434 \u2014 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 SessionStore \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Redis:  <\/p>\n<pre><code class=\"cs\">public class SessionStore : AbstractSSOSessionStore {     public override object Load(Type type)     {         var sessionObject = RedisSsoSessionComponent.Load(GetDatabaseSessionId(type));         return sessionObject != null && sessionObject.Length &gt; 0 ? Deserialize(sessionObject) : null;     }     public override void Save(object ssoSession)     {         RedisSsoSessionComponent.Save(Serialize(ssoSession), GetDatabaseSessionId(ssoSession.GetType()));     }     public override string SessionID     {         get { CookieFacade.SsoSessionId; }     }     private string GetDatabaseSessionId(Type type)     {         return string.Format(&quot;{0}:{1}&quot;, SessionID, type.Name);     } } <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c RedisSsoSessionComponent \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u0441 Redis. \u0415\u0441\u0442\u044c \u0437\u0430\u0433\u0432\u043e\u0437\u0434\u043a\u0430 \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u0441\u0435\u0441\u0441\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043a\u0443\u043a\u0430\u0445 \u2014 \u0432 CookieFacade \u0438\u043c\u0435\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e SsoSessionId:  <\/p>\n<pre><code class=\"cs\">string cookieName = &quot;SsoSessionId&quot;; var cookie = HttpContext.Current.Request.Cookies[cookieName];  if (cookie != null && !string.IsNullOrEmpty(cookie.Value)) {     return cookie.Value; }  cookie = HttpContext.Current.Response.Cookies[cookieName]; if (cookie != null && !string.IsNullOrEmpty(cookie.Value)) {     return cookie.Value; }  var sessionId = Guid.NewGuid().ToString(); cookie = new HttpCookie(cookieName, sessionId);  HttpContext.Current.Response.Cookies.Remove(cookie.Name); HttpContext.Current.Response.AppendCookie(cookie);      return sessionId; <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e\u0439 \u043a\u0443\u043a\u0438 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440.<br \/>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430\u0448\u0435 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435:  <\/p>\n<pre><code class=\"cs\">SAMLConfiguration.SSOSessionStore = new SessionStore(); <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430.<\/p>\n<h4>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430<\/h4>\n<p>  \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c, \u043a\u0430\u043a\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u044f SAMLConfiguration.ConfigurationID \u043d\u0430 \u043b\u0435\u0442\u0443.<br \/>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043c\u0435\u0447\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445:  <\/p>\n<pre><code class=\"cs\">public class SamlIdentityProviderAttribute : ActionFilterAttribute {     public override void OnActionExecuting(ActionExecutingContext filterContext)     {         if (string.IsNullOrWhiteSpace(SAMLConfiguration.ConfigurationID) ||             !SAMLConfiguration.ConfigurationID.Equals(SamlConfig.IdentityProviderConfigurationId,                                                       StringComparison.InvariantCultureIgnoreCase))         {             SAMLConfiguration.ConfigurationID = SamlConfig.IdentityProviderConfigurationId;         }          base.OnActionExecuting(filterContext);     } }  public class SamlServiceProviderAttribute : ActionFilterAttribute {     public override void OnActionExecuting(ActionExecutingContext filterContext)     {         string spConfigurationId = string.Format(&quot;urn:example:saml:2.0:{0}&quot;, domain);          if (string.IsNullOrWhiteSpace(SAMLConfiguration.ConfigurationID) ||             !SAMLConfiguration.ConfigurationID.Equals(spConfigurationId, StringComparison.InvariantCultureIgnoreCase))         {             SAMLConfiguration.ConfigurationID = spConfigurationId;         }          base.OnActionExecuting(filterContext);     } } <\/code><\/pre>\n<h4>\u041b\u043e\u0433\u0438\u043a\u0430 IdP<\/h4>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f IdP \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 &#8212; SamlIdentityProviderController.<\/b><\/p>\n<div class=\"spoiler_text\">SsoService  <\/p>\n<pre><code class=\"cs\">\/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b SAMLIdentityProvider.ReceiveSSO(Request, out partnerSp); \/\/ \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0448\u043a\u043e\u043b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0443\u0436\u0435 Low level API HTTPRedirectBinding.ReceiveRequest(HttpContext.Request, out authnRequestElement, out relayState, out signatureAlgorithm, out signature); domains = _ssoComponent.GetSchoolDomains(authnRequestElement); \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0441\u0440\u0430\u0437\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 if (HttpContext.User.Identity.IsAuthenticated) { \treturn RedirectToAction(MVC.SamlIdentityProvider.SsoComplete()); } \/\/ \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 IdPLogin \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0448\u043a\u043e\u043b\u044b, \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 return Redirect(GetDomainLoginUrl(domain)); \/\/ \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u044b\u0431\u043e\u0440\u0430 \u0448\u043a\u043e\u043b\u044b, \u0435\u0441\u043b\u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0438\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e return RedirectToAction(MVC.SamlIdentityProvider.SchoolSelect()); <\/code><\/pre>\n<p>  SsoComplete  <\/p>\n<pre><code class=\"cs\">\/\/ \u0441\u043e\u0437\u0434\u0430\u0451\u0442 SAML \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 var attributes = new Dictionary&lt;string, string&gt; \t{ \t\t{ \t\t\tSaml2Helper.Attributes.UserRoleKey, userIdentity.UserRole.ToString() \t\t}, \t\t{ \t\t\tSaml2Helper.Attributes.UserFirstNameKey, userIdentity.FirstName \t\t}, \t\t{ \t\t\tSaml2Helper.Attributes.UserLastNameKey, userIdentity.LastName \t\t} \t}; \/\/ \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 SAMLIdentityProvider.SendSSO(Response, userIdentity.UserIdentifier, attributes); <\/code><\/pre>\n<p>  SloService  <\/p>\n<pre><code class=\"cs\">\/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b SAMLIdentityProvider.ReceiveSLO(Request, Response, out isRequest, out hasCompleted, out logoutReason, out partnerServiceProvider); \/\/ \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0432\u044b\u0445\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u0437 IdP HttpContext.GetOwinContext().Authentication.SignOut(); \/\/ \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 SP, \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u0440\u0438\u0448\u0451\u043b \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b SP SAMLIdentityProvider.SendSLO(Response, null); \/\/ \u043b\u0438\u0431\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e IdP SAMLServiceProvider.SendSLO(Response, null); <\/code><\/pre>\n<p>  SchoolSelect  <\/p>\n<pre><code class=\"cs\">\/\/ \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0448\u043a\u043e\u043b \u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 IdPLogin \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0448\u043a\u043e\u043b\u044b <\/code><\/pre>\n<p>  InitSso  <\/p>\n<pre><code class=\"cs\">\/\/ \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 SSO \u0434\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e IdP SAMLServiceProvider.InitiateSSO(Response, null, partnerIdP); <\/code><\/pre>\n<p>  AssertionConsumerService  <\/p>\n<pre><code class=\"cs\">\/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u043e\u0442 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e IdP SAMLServiceProvider.ReceiveSSO(Request, out isInResponseTo, out partnerIdP, out userName, out attributes, out relayState); \/\/ \u0438\u0449\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c var user = await userManager.FindAsync(new UserLoginInfo(\u201cIdP\u201d, userId)); \/\/ \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u043b\u043e\u0433\u0438\u043d\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 IdP \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u043e\u0442\u0432\u0435\u0442 SP await _nativeLoginProcessor.SignInAsync(user); return Redirect(MVC.SamlIdentityProvider.SsoComplete()); \/\/ \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u201c\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u201d <\/code><\/pre>\n<p>  IdpSpSloService  <\/p>\n<pre><code class=\"cs\">\/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0442 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e IdP \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 SAMLServiceProvider.ReceiveSLO(Request, out isRequest, out logoutReason, out partnerIdP); \/\/ \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f HttpContext.GetOwinContext().Authentication.SignOut(&quot;SSO.ApplicationCookie&quot;); \/\/ \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u0441\u0432\u043e\u0438\u0445 SP SAMLIdentityProvider.InitiateSLO(Response, null); \/\/ \u043b\u0438\u0431\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u0441\u0432\u043e\u0435\u043c\u0443 SP  \u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 SAMLIdentityProvider.SendSLO(Response, null); <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">AccountController \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0435 \u0441 IdP.<\/b><\/p>\n<div class=\"spoiler_text\">IdPLogin  <\/p>\n<pre><code class=\"cs\">\/\/ \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0432\u0445\u043e\u0434\u0430 \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u043b\u043e\u0433\u0438\u043d\u0430 \u0438 \u043f\u0430\u0440\u043e\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043b\u043e\u0433\u0438\u043d\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 IdP await _nativeLoginProcessor.SignInAsync(user); \/\/ \u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 return RedirectToAction(MVC.SamlIdentityProvider.SsoComplete()); \/\/ \u043f\u0440\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 IdP \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 SSO return RedirectToAction(MVC.SamlIdentityProvider.InitSso(partnerIdP)); <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h4>\u041b\u043e\u0433\u0438\u043a\u0430 SP<\/h4>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f SP \u0431\u0443\u0434\u0443\u0442 \u0432 SamlServiceProviderController.<\/b><\/p>\n<div class=\"spoiler_text\">AssertionConsumerService  <\/p>\n<pre><code class=\"cs\">\/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u043e\u0442 IdP SAMLServiceProvider.ReceiveSSO(Request, out isInResponseTo, out partnerIdP, out userName, out attributes, out relayState); \/\/ \u0438\u0449\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c var user = await _samlServiceProviderComponent.FindUserAsync(attributes); \/\/ \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u043b\u043e\u0433\u0438\u043d\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0448\u043a\u043e\u043b\u0435 \u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0448\u043a\u043e\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u0432 relayState await _nativeLoginProcessor.LocalSignInAsync(user); return RedirectToLocal(relayState); \/\/ \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 return RedirectToAction(MVC.SamlServiceProvider.LogOut()); <\/code><\/pre>\n<p>  SloService  <\/p>\n<pre><code class=\"cs\">\/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b SAMLServiceProvider.ReceiveSLO(Request, out isRequest, out logoutReason, out partnerIdP); \/\/ \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0432\u044b\u0445\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u0437 \u0448\u043a\u043e\u043b\u044b HttpContext.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie); \/\/ \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441, \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u0440\u0438\u0448\u0451\u043b \u043e\u0442 IdP SAMLServiceProvider.SendSLO(Response, null); \/\/ \u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u043b\u043e\u0433\u0438\u043d\u043a\u0443, \u0435\u0441\u043b\u0438 \u0441\u0430\u043c \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0445\u043e\u0434\u0430 return RedirectToAction(MVC.Account.Login()); <\/code><\/pre>\n<p>  LogOut  <\/p>\n<pre><code class=\"cs\">\/\/ \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0430 \u201c\u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0411 \u0432 \u0448\u043a\u043e\u043b\u0435 \u0410, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u0441\u044e\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0439\u0442\u0438 \u043f\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0432 \u0448\u043a\u043e\u043b\u0435 \u0421\u201d <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0432 AccountController \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 SP.<\/b><\/p>\n<div class=\"spoiler_text\">Login  <\/p>\n<pre><code class=\"cs\">\/\/ \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 IdP SAMLServiceProvider.InitiateSSO(Response, returnUrl, SamlConfig.IdentityProviderConfigurationId); <\/code><\/pre>\n<p>  LogOff  <\/p>\n<pre><code class=\"cs\">\/\/ \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0432\u044b\u0445\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u0437 \u0448\u043a\u043e\u043b\u044b HttpContext.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie) \/\/ \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 IdP SAMLServiceProvider.InitiateSLO(Response, null); <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h4>\u041b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h4>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 &#8212; ProxyController.<\/b><\/p>\n<div class=\"spoiler_text\">Login \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0437\u0430\u0439\u0442\u0438 \u0432 \u043d\u0435\u0451  <\/p>\n<pre><code class=\"cs\">\/\/\u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 SAMLServiceProvider.InitiateSSO(Response, relayState, SamlConfig.IdentityProviderConfigurationId); <\/code><\/pre>\n<p>  AssertionConsumerService  <\/p>\n<pre><code class=\"cs\">\/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u043e\u0442 IdP SAMLServiceProvider.ReceiveSSO(Request, out isInResponseTo, out partnerIdP, out userName, out attributes, out relayState); \/\/ \u0438\u0449\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c var user = await _samlServiceProviderComponent.FindUserAsync(attributes); \/\/ \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441\u0442\u0430\u0440\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u0438\u0445, \u0432\u0440\u043e\u0434\u0435 \u0442\u0430\u043a\u043e\u0433\u043e string timeStamp = DateTime.UtcNow.ToString(&quot;yyyyMMddHHmm&quot;); string queryParams = string.Format(&quot;userId={0}&userLoginProvider={1}&timestamp={2}&auth={3}&quot;,     userId,     userLoginProviderKey,     timeStamp,     MD5Helper.ComputeHash(string.Format(&quot;{0}{1}{2}{3}&quot;, userId, userLoginProviderKey, timeStamp, &quot;Secret&quot;))); \/\/ \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 return RedirectToAction(MVC.Proxy.LogOut()); <\/code><\/pre>\n<p>  InitiateSlo  <\/p>\n<pre><code class=\"cs\">\/\/ \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0445\u043e\u0434\u0430 SAMLServiceProvider.InitiateSLO(Response, null); <\/code><\/pre>\n<p>  SloService  <\/p>\n<pre><code class=\"cs\">\/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b SAMLServiceProvider.ReceiveSLO(Request, out isRequest, out logoutReason, out partnerIdP); \/\/ \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 ProcessSlo <\/code><\/pre>\n<p>  ProcessSlo  <\/p>\n<pre><code class=\"cs\">\/\/ \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0445\u043e\u0434\u0430 SAMLServiceProvider.SendSLO(HttpContext.Response, null); <\/code><\/pre>\n<p>  LogOut  <\/p>\n<pre><code class=\"cs\">\/\/ \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0430 \u201c\u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0411 \u0432 \u0448\u043a\u043e\u043b\u0435 \u0410, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u0441\u044e\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0439\u0442\u0438 \u043f\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0432 \u0448\u043a\u043e\u043b\u0435 \u0421\u201d <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u042d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0445\u0443\u0448\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0432\u043d\u0443\u0442\u0440\u0438 \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043b\u043e\u0447\u0435\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u043b\u0433\u043e \u0438 \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c.<\/p>\n<h4>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438 \u0432\u044b\u0432\u043e\u0434\u044b<\/h4>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 SSO \u0434\u0435\u043b\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0435. \u0412\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u044b \u0441\u0442\u0430\u0440\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0447\u0435\u043d\u044c \u0441\u043a\u0435\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u043b\u0438\u0441\u044c \u043a \u0441\u0430\u043c\u043e\u0439 \u0438\u0434\u0435\u0435 \u0438 \u043a \u0435\u0451 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e, \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e 100-200 \u0448\u043a\u043e\u043b \u0432 \u043d\u0435\u0434\u0435\u043b\u044e.<br \/>  \u041d\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043f\u0430\u0447\u043a\u0435 \u043d\u0430\u0447\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 IdP. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u0434 \u043d\u0435\u0433\u043e \u0431\u044b\u043b \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0432\u0435\u0431 \u0441\u0435\u0440\u0432\u0435\u0440, \u0445\u043e\u0442\u044f \u043c\u044b \u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c 3 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0417\u0430\u043a\u0430\u0437\u0447\u0438\u043a \u043f\u043e\u043d\u044f\u043b \u043e\u0448\u0438\u0431\u043a\u0443 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0421\u0435\u0439\u0447\u0430\u0441 6 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0442 1.5 \u043c\u043b\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0443 \u0432\u0441\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0443\u0442\u0440\u043e\u043c \u043f\u043e\u0447\u0442\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<br \/>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430 1000 \u0448\u043a\u043e\u043b \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0432\u0441\u0451 \u0443\u043c\u0435\u0440\u043b\u043e. \u041b\u043e\u0433\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e Redis \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442. \u0422\u0443\u0442 \u043d\u0430\u0434\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a \u0441\u0430\u043c \u0432\u044b\u0437\u0432\u0430\u043b\u0441\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043d\u0430\u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0438 \u0434\u0430\u0436\u0435 \u043a\u0443\u043f\u0438\u043b Redis Labs Enterprise Cluster (RLEC). \u0418 \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043e\u043d\u0438 \u043d\u0430\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043d\u0435 \u043d\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0435 100 \u0413\u0411, \u0430 \u0432\u0441\u0435\u0433\u043e \u043d\u0430 5. \u041a\u043e\u0433\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, RLEC \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0442\u0430\u043b\u2026 \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u0422\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 Redis Labs \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u0430\u0431\u043e\u0439 \u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0439 \u2014 \u0438\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0435\u0434\u0435\u043b\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0443, \u0438\u0445 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043e\u043d\u0438 \u0441\u0430\u043c\u0438 \u043f\u043e\u0437\u0436\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u043c\u0438, \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0432\u0435\u0441\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u0421\u0435\u0439\u0447\u0430\u0441 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u0441\u0431\u043e\u0435\u0432, \u043d\u043e \u043e\u0441\u0430\u0434\u043e\u043a \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u043e\u0441\u0442\u0430\u043b\u0441\u044f.<br \/>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043e\u0442 ComponentSpace \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0445\u043e\u0442\u044f \u0435\u0441\u0442\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432 \u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u2014 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u043f\u043e\u0442\u043e\u043a\u043e-\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435. \u041f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0441\u0430\u043c\u0438\u043c \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e \u0432\u0441\u0451 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u0438 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u043e-\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438. \u042d\u0442\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a High level API, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 Low level. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043a\u043b\u0430\u0441\u0441\u044b, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0441\u0435\u0441\u0441\u0438\u0438, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 (internal). \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u043c\u044f SP, \u0437\u0430\u043f\u0440\u043e\u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c, \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f \u043a SSOSessionStore \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c. \u041f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0435\u0439.<br \/>  \u0412 \u0446\u0435\u043b\u043e\u043c \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e, \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f.               <\/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\/280806\/\"> https:\/\/habrahabr.ru\/post\/280806\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b99\/46a\/e84\/b9946ae84b134094903fc8ee6c091327.jpg\"\/><br \/>  \u041d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u2014 \u0433\u043b\u0443\u043f\u0435\u043d\u044c\u043a\u0430\u044f \u043a\u0440\u0430\u0441\u0430\u0432\u0438\u0446\u0430 \u043e\u0442\u0434\u0430\u0451\u0442 \u0447\u0443\u0434\u043e\u0432\u0438\u0449\u0443 \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>  \u0412 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0435 \u0436\u0438\u043b\u0430 \u0431\u044b\u043b\u0430 \u0441\u0442\u0430\u0440\u0430\u044f \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0448\u043a\u043e\u043b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 Classic ASP. \u0415\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u0441\u0435 \u0443\u0447\u0438\u0442\u0435\u043b\u044f, \u0443\u0447\u0435\u043d\u0438\u043a\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0438\u0445 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0438. \u0418 \u0432 \u043e\u0434\u0438\u043d \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u044b\u0439 \u0434\u0435\u043d\u044c \u0435\u0451 \u0440\u0435\u0448\u0438\u043b\u0438 \u043c\u043e\u0434\u0435\u0440\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041d\u0430 \u0441\u043c\u0435\u043d\u0443 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0438\u0434\u0442\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f ASP.Net MVC 5 \u0441 \u043d\u043e\u0432\u044b\u043c \u0434\u0438\u0437\u0430\u0439\u043d\u043e\u043c. <br \/>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u0447\u0430\u0441\u044c\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 6000 asp \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c, \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0440\u0430\u044f \u0438 \u043d\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e.<br \/>  \u0418 \u0432\u043e\u0442 \u0441\u043f\u0443\u0441\u0442\u044f \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043d\u043e\u0432\u0430\u044f \u0441\u0432\u0435\u0440\u043a\u0430\u044e\u0449\u0430\u044f (\u0445\u043e\u0442\u044f \u043a\u043e\u0435-\u0433\u0434\u0435 \u0432\u0441\u0451 \u0442\u0430\u043a\u0438 \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u0442 \u0440\u0436\u0430\u0432\u0447\u0438\u043d\u0430 \u0438 \u0437\u0430\u043f\u043b\u0430\u0442\u043a\u0438, \u0438\u0431\u043e \u0441\u0440\u043e\u043a\u0438) \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u0438\u043d\u044f\u043b\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<br \/>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0430 (<abbr title=\"Single Sign-On\">SSO<\/abbr>) \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u0433 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043a\u0430 \u0435\u0449\u0451 \u0433\u043b\u0443\u043f\u0435\u043d\u044c\u043a\u043e\u0439 \u043a\u0440\u0430\u0441\u0430\u0432\u0438\u0446\u0435\u0439 \u0438 \u043f\u043e\u043b\u043d\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0447\u0443\u0434\u043e\u0432\u0438\u0449\u0435\u043c.<br \/>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0434\u043d\u0430 \u0438\u0437 \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435\u043c (<abbr title=\"Learning management system\">LMS<\/abbr>) \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0430 \u0438\u043c\u0435\u0442\u044c \u0442\u0435\u0441\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u043d\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0432 \u0441\u0435\u0431\u044f SSO.  <\/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-277572","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/277572","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=277572"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/277572\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=277572"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=277572"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=277572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}