Unified Identity Management logo figure Unified Identity Management logo figure
Поиск Поиск по документации

API авторизации через сторонние ресурсы и создания привязок к ним

Термины и определения

  • UIDM — Сервер аутентификации и авторизации, это централизованный сервис по управлению учетными записями и доступом к ресурсам, который включает в себя:

    • Identity Provider — единую точку идентификации/аутентификации, управления учетными записями и правилами доступа;

    • Access Management — разграничение доступа к ресурсам;

    • Single Sign-On (SSO) — обеспечение единого доступа, когда пользователю достаточно аутентифицироваться один раз для доступа к группе сервисов;

    • Federation — обеспечение федеративной аутентификации между несколькими доменами систем.

  • аутентификация — проверка принадлежности субъекту доступа предъявленного им идентификатора, подтверждение подлинности.

  • авторизация — процесс проверки полномочий пользователя по отношению к запрашиваемым сервисам.

  • уровень авторизации — числовое значение, определяющее множество операций, доступных защищаемому сервису для выполнения от лица пользователя. Операция защищаемого сервиса может иметь минимальный требуемый уровень авторизации и выполняться только если текущий уровень авторизации пользователя больше или равен минимальной.

  • токен доступа — access token.

  • токен — access token.

  • access token — строковый идентификатор, предоставляющий защищаемому сервису выполнять действия от лица пользователя.

  • идентификатор клиента — строка, идентифицирующая защищаемый сервис. Конфигурируется администратором UIDM.

  • scope — атрибут access token, который может определять набор данных пользователя, к которым получает доступ защищаемый сервис. Может также определять спиcок идентификаторов защищенных ресурсов, которые могут быть использованы сервисом для данного пользователя.

  • URL обратного редиректа — HTTP URL на который необходимо выполнить переход после успешного или неуспешного завершения аутентификации.

  • encoded URL — Обычный HTTP URL, в котором все зарезервированные URI символы заменены на их представление в виде %XX.

  • OTP — одноразовый пароль.

  • ресурс — сторонний ресурс.

  • сторонний ресурс — некоторый сервис не входящий в UIDM и предоставляющий возможность аутентифицировать и авторизовать пользователя.

Создание привязки со сторонним ресурсом в WebSSO

После успешной авторизации в ресурсе пользователь может связать свой аккаунт в WebSSO с аккаунтом из ресурса и в дальнейшем использовать ресурс для аутентификации в WebSSO. Все запросы должны быть выполнены в приведенной последовательности, так как поле <execution> из каждого ответа используется как параметр в следующем запросе.

Начало сценария создания привязки

Для начала сценария создания привязки необходимо отправить запрос в WebSSO на /sso/oauth2/authorize. В ответе будет содержаться параметр <execution>, который необходимо будет включить в следующий запрос к WebSSO.

Формат запроса

GET /sso/oauth2/authorize
Host: <sso_host>
Accept: application/json
Content-Type: application/x-www-form-urlencoded

response_type=code&
realm=<realm>&
client_id=<client_id>&
redirect_uri=<redirect_uri>

Параметры

  • <sso_host> — базовый адрес сервера WebSSO, например sso.rooxteam.com

  • <client_id> — идентификатор клиента, например selfcare

  • <redirect_uri> — url для переадресации пользователя в случае успешной аутентификации

  • <realm> — url-encoded пользовательский realm, например %2Fcustomer

Формат успешного ответа

В данном примере в ответе содержится html с encoded URL ссылкой на виджет логина (ссылка на виджет имеет вид <sso_host>/widgets/login/login.xml). В этой ссылке содержится параметр <execution>, который используется в следующем запросе к WebSSO.

HTTP/1.1 200 OK
<!doctype html>
<html>
<head>
    <title>Интернет-банк</title>
    <link rel=icon type="image/x-icon" href="/sso/ocb_resources/favicon.ico"/>
        <link rel="shortcut icon" type="image/x-icon" href="/sso/bank/favicon.ico"/>
    </head>
<body>
<span id="widget_wrapper_0"><link href="https://sso.demo.rooxteam.com/widgets/login/roox_vf_8f095fa178c08585feac1a7332b10473/bundles/dist-bundle.css" rel="stylesheet"><link href="https://sso.demo.rooxteam.com/widgets/login/roox_vf_8f095fa178c08585feac1a7332b10473/bundles/styles-bundle.css" rel="stylesheet" type="text/css"><!--[if IE]>
    <p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]--><!-- Global site tag (gtag.js) - Google Analytics --><script>window['__isgadget']=true;</script><script>com=window['com']||{};com.rooxteam=com.rooxteam||{};com.rooxteam.container=com.rooxteam.container||{};</script><script>com.rooxteam.container.renderType = 'INLINE'</script><script id="externForcedLibs" src="https://sso.demo.rooxteam.com/wrs-4.3/gadgets/js/com.rooxteam.config:com.rooxteam.lifecycle:com.rooxteam.sso:com.rooxteam.statistic:core:rpc.js?container=default&amp;nocache=0&amp;debug=0&amp;c=0&amp;v=d6314531c7650e32f5d8eb992ff97197" type="text/javascript"></script><script id="externGadgetLibs" src="https://sso.demo.rooxteam.com/wrs-4.3/gadgets/js/locked-domain:auth-refresh:opensocial-reference:security-token:opensocial-base:osapi:opensocial-jsonrpc:com.rooxteam.webapi:com.rooxteam.templates:com.rooxteam.templates.dustjs:com.rooxteam.i18n:com.rooxteam.webapicache:com.rooxteam.momentjs:com.rooxteam.numeraljs.js?container=default&amp;nocache=0&amp;debug=0&amp;c=0&amp;v=6c8e922b086890a447ef83fb1f3ad67a&amp;transitive=false" type="text/javascript"></script><script>widgetUrls=window['widgetUrls']||[];widgetUrls[0]='https\x3A\x2F\x2Focb\x2Ddigital.demo.rooxteam.com\x2Fwidgets\x2Flogin\x2Flogin.xml\x3Fmid\x3D0\x26country\x3DRU\x26lang\x3Dru\x26parent\x3Dnull\x26title\x3DLogin\x26up_inputData\x3D\x257B\x2522execution\x2522\x253A\x2522c6d55f93\x2Dd98e\x2D47ef\x2D9546\x2Db3b375be9b62_AAABFQAAAQCEEkBLJAcZ0qpl1qvk4IJ\x252F6weo0p525wIRCYup8pV4F8SE9P3qP7IQ8Wl7FuTCOsCmCrj\x252FctciLkhDLfqRgJRTCtYEj0ZBGjsCQeaxzDg1BU\x252BnSYUSgmwHAt\x252BEK8TZEcuSxD\x252BqavWRYQd8Ja5boTmnQK\x252BFXmB2IbJAeIY1lGXgz7\x252FQfpqCBmHVV\x252BS02nXIz2eiVooRYvXPfaD80rMHIpMplVMfnRQHBDkJL1JDUzvE7o1irXT3xSqdctStYKKBQ7RoaPINy7ev\x252FG8yLgf8F0XaSVCCdH3uCNREGkpbiWzjprgrN0U31Esq7zeid22hHWc\x252FTMPochZBx8ybBRViiv9XAAAACWV4ZWN1dGlvbsaHPP3ZKTILhqUgzVlb2QbsIrNJ2JUFdOxQzLJIbcFbXdkH3o6X65VRtZsOd9qPUAPCcHa93HKrySoO9g\x252Fm5q9iPt9JWzf3cI4QIaUSLrgYlPfhuOo\x252FmNaB\x252BTED\x252FFEJ7nFOvVvJz2TgQGFHbwsRMa0S\x252F\x252BS3C3IR6ilhfAyCvbPdb\x252FTfh1Uf61NynvV\x252Bocm8OFpWmUoS6Bi5lc6KGy\x252BnRWOlT75aDtWTkFvHQ1rePEM5KNCh\x252F8arPMSwIr2EtkTB8UazwhAUj1o6PseAnqP\x252B\x252FMcXGwC3PS\x252FX0BlT1gmsxDM28tI4FnOrl\x252BLTDG02ra7Qt8FonU6RMVGXsqraZsJ65G2xVLM9S3AGjN3My0\x252Fk4TSGquHOEKrw6xRlWYJqya0VB2qyRnP\x252FdQmglAlre2SIQR2ISm4H2jsaUcC5dpnfX7795rsL9ljo4Co3SO5o0Dn8loUur4gd99SpH7PcrV76T8gjxeLVU0q9N0G5Fr3rKTZUDqZI0Flh37GwMrjM3Kz8AKRlh4\x252FmkU41G57FYPj\x252BImijHwMNafzZStBr7iByrs5TJcDUzLVguDdLE\x252BdTZZMSDjwNWauy4R9PCIXPvEmGi0Qg2Fiptvv5IGtaIgt13KDEW6Olmh8FDmsyly7Daa0ynHHFRc\x252FtaiGBIBpgfFA8i3aslD4wYMfS3\x252BGkHpXatQ5Ebmys7eHZQDopbR0M\x252BxOXRj98TRjyeQHcNQ1WB6WtUmkkwtSIZVn2iDNL4mieNzuq4pR\x252BUUYm28P4lS\x252BU07FWCdF8k3fUrvtbI4Ck317bPrAcDfr6Wbdgt6gxPbB3p0fNGZ42gKFzRanp01LEWOgRaYItUrDXf\x252FHU2I9dOTWzSPNdasys20MIRa4KYBonSPxGmbkf9bVBO6cuYkyQIR194eAh9b2FLKc33\x252FRZqFTap0YGWcMpQThKykbU90\x252FF2xwI7qGyVA4hMBU\x252F9mKJ2cnUCLhCRSujOnegy4qp6kLC14MX1IL6Xn8G3N0xcZFn4KOHt550jpfM0P0pwER2t4\x252Faz\x252FrysPppeERKQG\x252FYO12BPgh5kxkfCefBBS8jTPt5LSH8peTygFx1Rp\x252F0B0nLKil2cst5iHRnrQiLi7PR6TuVzjgut\x252BvqClWIRlicVvS8k8dOfUv89fEwiPz34cpBSBMEt9sGWBcglB3o\x252BuWTs4kqRkO9Zs1yIvRMQP8BzV92R94VikaYd5ua\x252FN\x252FNWuluRWE2DPVH9W\x252F9PODukwTPnQ0YnoGNGT4Moql2U9RRpN1vFjLGJOYEH3ZXBxiJdUMtiFyv7PQcYNo4rjItTXXWL2qbxHju\x252B6dsx4dXKvyzNg1CWWXrz94V6Nyisajk33TA1cz30X2zYXghlEoKH8xq0FJJLNuLMjAkBP72nzemIOnbeFLtIBdgW\x252BdCOsIy9G5q0nZxkRdJ2VB26NYnr7fH\x252FHWN1OFs6o4vOxfmYjIAUGEjmqL4v9BajGyFd7Ou6tE9C\x252BstkJ8BAKk5TTsqr4wbX9R0l1DVR16QRB4V0Dbnu\x252BBdE8IvvWii8gzh1bwHnSVbZwhEQtZwUMI\x252FeknQJg7SnJFbtXXiRdLTkBc\x252FnVVgz4JHGfxj6m04ypKLtHuBQJcsMVfpZ18oyjvzM1NUEeGZzCNvN5Hz3CB3J\x252BgjUR8nyqF0bzjQBnbzr1v7jPW9SC\x252BFT7uwIWsnREaQdwLzTbXU0yz45LHHOPCL6fFGSzmiudgBY\x252Ff1VzqXD64gpVMqo584iKi6LLO2xPUDtsi7XETyqrP2Iy2WZIu4QhMishSfJg\x252BL6S58sbhl59sZAW2T0jbZCh277F3rNpbNs6DmIPUSXSA0NL2c5oOT61KuD7Hi1NdW8SHsGQP94NY6y3GiZgzIHylt\x252FWaJCUdzOR\x252BEzEstl\x252B0ophkwaql1kcbHr6WOJ8gPeNECbT\x252BG6GcmCx1nX6yfq\x252F\x252F84FZkHr2\x252FYikDmpuGKBeDDL\x252Bns0eshlltUnhyIF\x252BAk\x252B7fzTR0BUi\x252B7lV0JE\x252B2jiYCo7EpFBfcM699A6ckeK80NHZcKGwHbOC6\x252Flrmpz\x252Bb1FIXNFuJXwvhUFa1Z0ATWtHhF8eSXuJBM5TUs\x252B24BX1gGzm2Y2XY2En\x252F1abS2x1pcbEv2J1h5ptgxUCAaRTDW5HWE8GWvDGWN4qlJ1vMzEZyhwZUQsY7bFlVJ32O5oQJ3oKmehCwlRevn9oIqP4pdIhkqDjqKa4Y1h9M67WLm8u3BOuIhfXRGn9iq2hX4mU5ccOKRQDpa89QnT\x252FMmR5\x252B7lWg4weGxj2BTuK52Yi22MZv\x252Fx4wEACfl7JPGTFy4CYhJQQeLuOIjnbNzeN0xa1uQsr2PDJdEOkZvNNTS4CXOBpoVH3nm6xY3Vaorp6T7\x252FqPNgZMeCSWw9VD8KRxjrZSKsMEOA3GRsFA6AXY63IBrZU2w\x252BIQ2vMC1IGSMLT3otc\x252Fe7r1C6aYEo6hNLy\x252FaG3I6q74ly\x252BAjH\x252F8\x252FQ9\x252FY2qHlFGfAjCMKCTK7hpXoilKTPOBNoKui2MmX9a\x252FXzSW9rhEUGTThRiX9phQi79mG983SdZeQQdXRMhut6MaB6Fb\x252F76\x252FmeLDB3UoRcIuKYNZ4Oq2Aa7HB\x252BLchtTvOd3afN5\x252Fx\x252BSMZJePjBFds\x252FAbp7\x252Bwafi65P8\x252BkXjRioGdJwzMsrzNAC0tFlYz\x2522\x252C\x2522view\x2522\x253A\x257B\x2522vkontakteAppId\x2522\x253A\x25224133198\x2522\x252C\x2522odnoklassnikiRequestScopesAsArray\x2522\x253A\x255B\x255D\x252C\x2522ssoUrl\x2522\x253A\x2522https\x253A\x252F\x252Focb\x2Ddigital.demo.rooxteam.com\x252Fsso\x2522\x252C\x2522isBlocked\x2522\x253Afalse\x252C\x2522vkontakteRedirectUri\x2522\x253A\x2522\x252Fvk_callback.jsp\x2522\x252C\x2522vkontakteRequestScopesAsArray\x2522\x253A\x255B\x255D\x252C\x2522odnoklassnikiAppId\x2522\x253A\x25221248780544\x2522\x252C\x2522odnoklassnikiRedirectUri\x2522\x253A\x2522https\x253A\x252F\x252Focb\x2Ddigital.demo.rooxteam.com\x252Fsso\x252Fok_callback.jsp\x2522\x252C\x2522srp6CryptoParams\x2522\x253A\x257B\x2522N\x2522\x253A11144252439149533417835749556168991736939157778924947037200268358613863350040339017097790259154750906072491181606044774215413467851989724116331597513345603\x252C\x2522g\x2522\x253A2\x252C\x2522H\x2522\x253A\x2522SHA\x2D1\x2522\x252C\x2522messageDigestInstance\x2522\x253A\x257B\x2522algorithm\x2522\x253A\x2522SHA\x2D1\x2522\x252C\x2522provider\x2522\x253A\x257B\x2522Alg.Alias.Signature.SHA1\x252FDSA\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522Alg.Alias.Signature.1.2.840.10040.4.3\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522Alg.Alias.Signature.DSS\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522SecureRandom.SHA1PRNG\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522KeyStore.JKS\x2522\x253A\x2522sun.security.provider.JavaKeyStore\x2524DualFormatJKS\x2522\x252C\x2522Alg.Alias.MessageDigest.SHA\x2D1\x2522\x253A\x2522SHA\x2522\x252C\x2522MessageDigest.SHA\x2522\x253A\x2522sun.security.provider.SHA\x2522\x252C\x2522KeyStore.CaseExactJKS\x2522\x253A\x2522sun.security.provider.JavaKeyStore\x2524CaseExactJKS\x2522\x252C\x2522CertStore.com.sun.security.IndexedCollection\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522Signature.SHA256withDSA\x2522\x253A\x2522sun.security.provider.DSA\x2524SHA256withDSA\x2522\x252C\x2522Alg.Alias.MessageDigest.OID.1.3.14.3.2.26\x2522\x253A\x2522SHA\x2522\x252C\x2522Alg.Alias.Signature.DSA\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522KeyFactory.DSA\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522KeyStore.JKS\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522AlgorithmParameters.DSA\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522Signature.NONEwithDSA\x2522\x253A\x2522sun.security.provider.DSA\x2524RawDSA\x2522\x252C\x2522Alg.Alias.CertificateFactory.X509\x2522\x253A\x2522X.509\x2522\x252C\x2522Signature.SHA256withDSA\x2BSupportedKeyClasses\x2522\x253A\x2522java.security.interfaces.DSAPublicKey\x257Cjava.security.interfaces.DSAPrivateKey\x2522\x252C\x2522CertStore.com.sun.security.IndexedCollection\x2522\x253A\x2522sun.security.provider.certpath.IndexedCollectionCertStore\x2522\x252C\x2522Provider.id\x2BclassName\x2522\x253A\x2522sun.security.provider.Sun\x2522\x252C\x2522Alg.Alias.MessageDigest.1.3.14.3.2.26\x2522\x253A\x2522SHA\x2522\x252C\x2522Alg.Alias.Signature.SHA\x2D1\x252FDSA\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522KeyStore.DKS\x2522\x253A\x2522sun.security.provider.DomainKeyStore\x2524DKS\x2522\x252C\x2522CertificateFactory.X.509\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522Alg.Alias.Signature.OID.2.16.840.1.101.3.4.3.2\x2522\x253A\x2522SHA256withDSA\x2522\x252C\x2522Alg.Alias.Signature.OID.2.16.840.1.101.3.4.3.1\x2522\x253A\x2522SHA224withDSA\x2522\x252C\x2522Signature.SHA1withDSA\x2BKeySize\x2522\x253A\x25221024\x2522\x252C\x2522Signature.NONEwithDSA\x2BKeySize\x2522\x253A\x25221024\x2522\x252C\x2522CertPathValidator.PKIX\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522KeyFactory.DSA\x2522\x253A\x2522sun.security.provider.DSAKeyFactory\x2522\x252C\x2522Configuration.JavaLoginConfig\x2522\x253A\x2522sun.security.provider.ConfigFile\x2524Spi\x2522\x252C\x2522Alg.Alias.Signature.OID.1.2.840.10040.4.3\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522Alg.Alias.MessageDigest.OID.2.16.840.1.101.3.4.2.4\x2522\x253A\x2522SHA\x2D224\x2522\x252C\x2522Alg.Alias.KeyFactory.1.2.840.10040.4.1\x2522\x253A\x2522DSA\x2522\x252C\x2522MessageDigest.MD5\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522Alg.Alias.MessageDigest.OID.2.16.840.1.101.3.4.2.3\x2522\x253A\x2522SHA\x2D512\x2522\x252C\x2522Alg.Alias.MessageDigest.OID.2.16.840.1.101.3.4.2.2\x2522\x253A\x2522SHA\x2D384\x2522\x252C\x2522Alg.Alias.MessageDigest.OID.2.16.840.1.101.3.4.2.1\x2522\x253A\x2522SHA\x2D256\x2522\x252C\x2522Alg.Alias.Signature.RawDSA\x2522\x253A\x2522NONEwithDSA\x2522\x252C\x2522Provider.id\x2Bname\x2522\x253A\x2522SUN\x2522\x252C\x2522Alg.Alias.AlgorithmParameters.1.2.840.10040.4.1\x2522\x253A\x2522DSA\x2522\x252C\x2522CertPathBuilder.PKIX\x2BValidationAlgorithm\x2522\x253A\x2522RFC3280\x2522\x252C\x2522Policy.JavaPolicy\x2522\x253A\x2522sun.security.provider.PolicySpiFile\x2522\x252C\x2522Signature.SHA224withDSA\x2BKeySize\x2522\x253A\x25222048\x2522\x252C\x2522Alg.Alias.AlgorithmParameters.OID.1.2.840.10040.4.1\x2522\x253A\x2522DSA\x2522\x252C\x2522Alg.Alias.AlgorithmParameters.1.3.14.3.2.12\x2522\x253A\x2522DSA\x2522\x252C\x2522Alg.Alias.Signature.SHA\x252FDSA\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522Alg.Alias.KeyPairGenerator.1.3.14.3.2.12\x2522\x253A\x2522DSA\x2522\x252C\x2522MessageDigest.SHA\x2D384\x2522\x253A\x2522sun.security.provider.SHA5\x2524SHA384\x2522\x252C\x2522MessageDigest.SHA\x2D224\x2522\x253A\x2522sun.security.provider.SHA2\x2524SHA224\x2522\x252C\x2522Signature.SHA1withDSA\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522AlgorithmParameterGenerator.DSA\x2522\x253A\x2522sun.security.provider.DSAParameterGenerator\x2522\x252C\x2522Signature.NONEwithDSA\x2BSupportedKeyClasses\x2522\x253A\x2522java.security.interfaces.DSAPublicKey\x257Cjava.security.interfaces.DSAPrivateKey\x2522\x252C\x2522SecureRandom.NativePRNGBlocking\x2522\x253A\x2522sun.security.provider.NativePRNG\x2524Blocking\x2522\x252C\x2522MessageDigest.SHA\x2D512\x2522\x253A\x2522sun.security.provider.SHA5\x2524SHA512\x2522\x252C\x2522Alg.Alias.KeyFactory.OID.1.2.840.10040.4.1\x2522\x253A\x2522DSA\x2522\x252C\x2522CertPathBuilder.PKIX\x2522\x253A\x2522sun.security.provider.certpath.SunCertPathBuilder\x2522\x252C\x2522Alg.Alias.Signature.1.3.14.3.2.27\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522Alg.Alias.MessageDigest.2.16.840.1.101.3.4.2.4\x2522\x253A\x2522SHA\x2D224\x2522\x252C\x2522CertPathBuilder.PKIX\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522Alg.Alias.MessageDigest.2.16.840.1.101.3.4.2.3\x2522\x253A\x2522SHA\x2D512\x2522\x252C\x2522Provider.id\x2Bversion\x2522\x253A\x25221.8\x2522\x252C\x2522Alg.Alias.MessageDigest.2.16.840.1.101.3.4.2.2\x2522\x253A\x2522SHA\x2D384\x2522\x252C\x2522Signature.SHA256withDSA\x2BKeySize\x2522\x253A\x25222048\x2522\x252C\x2522Alg.Alias.MessageDigest.2.16.840.1.101.3.4.2.1\x2522\x253A\x2522SHA\x2D256\x2522\x252C\x2522AlgorithmParameters.DSA\x2522\x253A\x2522sun.security.provider.DSAParameters\x2522\x252C\x2522Signature.SHA1withDSA\x2BSupportedKeyClasses\x2522\x253A\x2522java.security.interfaces.DSAPublicKey\x257Cjava.security.interfaces.DSAPrivateKey\x2522\x252C\x2522CertStore.Collection\x2522\x253A\x2522sun.security.provider.certpath.CollectionCertStore\x2522\x252C\x2522AlgorithmParameterGenerator.DSA\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522SecureRandom.NativePRNGNonBlocking\x2522\x253A\x2522sun.security.provider.NativePRNG\x2524NonBlocking\x2522\x252C\x2522KeyPairGenerator.DSA\x2BKeySize\x2522\x253A\x25222048\x2522\x252C\x2522CertStore.LDAP\x2522\x253A\x2522sun.security.provider.certpath.ldap.LDAPCertStore\x2522\x252C\x2522CertificateFactory.X.509\x2522\x253A\x2522sun.security.provider.X509Factory\x2522\x252C\x2522Alg.Alias.Signature.2.16.840.1.101.3.4.3.2\x2522\x253A\x2522SHA256withDSA\x2522\x252C\x2522Alg.Alias.Signature.2.16.840.1.101.3.4.3.1\x2522\x253A\x2522SHA224withDSA\x2522\x252C\x2522SecureRandom.NativePRNG\x2522\x253A\x2522sun.security.provider.NativePRNG\x2522\x252C\x2522CertStore.LDAP\x2BLDAPSchema\x2522\x253A\x2522RFC2587\x2522\x252C\x2522CertStore.LDAP\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522KeyPairGenerator.DSA\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522CertPathValidator.PKIX\x2BValidationAlgorithm\x2522\x253A\x2522RFC3280\x2522\x252C\x2522CertStore.Collection\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522Signature.SHA224withDSA\x2522\x253A\x2522sun.security.provider.DSA\x2524SHA224withDSA\x2522\x252C\x2522Alg.Alias.Signature.1.3.14.3.2.13\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522CertPathValidator.PKIX\x2522\x253A\x2522sun.security.provider.certpath.PKIXCertPathValidator\x2522\x252C\x2522Alg.Alias.MessageDigest.SHA1\x2522\x253A\x2522SHA\x2522\x252C\x2522AlgorithmParameterGenerator.DSA\x2BKeySize\x2522\x253A\x25222048\x2522\x252C\x2522SecureRandom.SHA1PRNG\x2522\x253A\x2522sun.security.provider.SecureRandom\x2522\x252C\x2522Signature.SHA1withDSA\x2522\x253A\x2522sun.security.provider.DSA\x2524SHA1withDSA\x2522\x252C\x2522Alg.Alias.KeyFactory.1.3.14.3.2.12\x2522\x253A\x2522DSA\x2522\x252C\x2522MessageDigest.SHA\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522KeyPairGenerator.DSA\x2522\x253A\x2522sun.security.provider.DSAKeyPairGenerator\x2524Current\x2522\x252C\x2522Provider.id\x2Binfo\x2522\x253A\x2522SUN\x2B\x2528DSA\x2Bkey\x252Fparameter\x2Bgeneration\x253B\x2BDSA\x2Bsigning\x253B\x2BSHA\x2D1\x252C\x2BMD5\x2Bdigests\x253B\x2BSecureRandom\x253B\x2BX.509\x2Bcertificates\x253B\x2BJKS\x2B\x2526\x2BDKS\x2Bkeystores\x253B\x2BPKIX\x2BCertPathValidator\x253B\x2BPKIX\x2BCertPathBuilder\x253B\x2BLDAP\x252C\x2BCollection\x2BCertStores\x252C\x2BJavaPolicy\x2BPolicy\x253B\x2BJavaLoginConfig\x2BConfiguration\x2529\x2522\x252C\x2522Alg.Alias.KeyPairGenerator.1.2.840.10040.4.1\x2522\x253A\x2522DSA\x2522\x252C\x2522Alg.Alias.Signature.SHAwithDSA\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522MessageDigest.MD5\x2522\x253A\x2522sun.security.provider.MD5\x2522\x252C\x2522Alg.Alias.Signature.DSAWithSHA1\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522MessageDigest.SHA\x2D256\x2522\x253A\x2522sun.security.provider.SHA2\x2524SHA256\x2522\x252C\x2522Alg.Alias.KeyPairGenerator.OID.1.2.840.10040.4.1\x2522\x253A\x2522DSA\x2522\x252C\x2522Signature.SHA224withDSA\x2BSupportedKeyClasses\x2522\x253A\x2522java.security.interfaces.DSAPublicKey\x257Cjava.security.interfaces.DSAPrivateKey\x2522\x252C\x2522MessageDigest.MD2\x2522\x253A\x2522sun.security.provider.MD2\x2522\x257D\x252C\x2522digestLength\x2522\x253A20\x257D\x257D\x252C\x2522utm\x2522\x253A\x257B\x257D\x257D\x252C\x2522form\x2522\x253A\x257B\x2522name\x2522\x253A\x2522loginForm\x2522\x252C\x2522fields\x2522\x253A\x257B\x2522password\x2522\x253A\x257B\x2522constraints\x2522\x253A\x255B\x257B\x2522name\x2522\x253A\x2522NotNull\x2522\x257D\x252C\x257B\x2522name\x2522\x253A\x2522Size\x2522\x252C\x2522attributes\x2522\x253A\x257B\x2522min\x2522\x253A1\x252C\x2522max\x2522\x253A1024\x257D\x257D\x255D\x257D\x252C\x2522username\x2522\x253A\x257B\x2522constraints\x2522\x253A\x255B\x257B\x2522name\x2522\x253A\x2522NotNull\x2522\x257D\x252C\x257B\x2522name\x2522\x253A\x2522Size\x2522\x252C\x2522attributes\x2522\x253A\x257B\x2522min\x2522\x253A1\x252C\x2522max\x2522\x253A2000\x257D\x257D\x255D\x257D\x257D\x252C\x2522errors\x2522\x253A\x255B\x255D\x257D\x252C\x2522serverUrl\x2522\x253A\x2522https\x253A\x252F\x252Focb\x2Ddigital.demo.rooxteam.com\x252Fsso\x252Fauth\x252Flogin\x2Dwidget\x2Drouter\x2522\x252C\x2522step\x2522\x253A\x2522auth_form\x2522\x257D';baseUrls=window['baseUrls']||[];baseUrls[0]='https\x3A\x2F\x2Focb\x2Ddigital.demo.rooxteam.com\x2Fwidgets\x2Flogin\x2Froox_vf_8f095fa178c08585feac1a7332b10473\x2Flogin.xml';com.rooxteam.lifecycle && com.rooxteam.lifecycle.features('init');</script>

Авторизация в стороннем ресурсе

Для создания привязки пользователю необходимо выбрать сторонний ресурс, например социальную сеть, и зайти на страницу авторизации этого ресурса через веб-браузер. Как правило после этого пользователю предлагается ввести логин и пароль от своего аккаунта в ресурсе. После успешной авторизации ресурс отправляет некоторые данные <social_data>, которые в дальнейшем используются WebSSO для создания привязки.

Для авторизации могут использоваться только ресурсы из таблицы.

Выбор ресурса для создания привязки

Формат запроса

POST /sso/auth/login-widget-router
Host: <sso_host>
Accept: application/json
Content-Type: application/x-www-form-urlencoded

execution=<execution>&
socialData=<socialData>&
loginType=WEBSITE&
_eventId=<_eventId>

Параметры

  • <sso_host> — базовый адрес сервера WebSSO, например sso.rooxteam.com

  • <execution> — значение равно значению поля <execution> полученному из ответа на запрос к <sso_host>/sso/oauth2/authorize

  • <socialData> — преобразованные согласно алгоритму данные (<social_data>), отосланные ресурсом в результате авторизации пользователя

  • <_eventId> — идентификатор ресурса из таблицы, в котором ранее авторизовался пользователь

Формат успешного ответа

HTTP/1.1 200 OK
{
  "execution": "cf1c9aab-8fb0-44bd-a981-733155bbe4cd_AAABFQAAAQC2prcT4uze4mcuJYHJdCENkpAWPa/XhX/nYuFh7PaRzzJhsHWPin6qzIbBOH+HZ1BIggEvudV2GntL4Kt9yGc3oKv2dRvyn4MZYy2NrEPW7/V6KNJ/+MbG+ys4t4dvFqIRYBjjU+hx2913ug7/sNH5QOCRFiHneT2XLvQrnlIQTFu+EIrmoqmi5lS4SKFykn3Wr2HkDZw==",
  "view": {
    "odnoklassnikiRequestScopesAsArray": [],
    "avatarUrl": "https://sun9-39.userapi.com/c836624/v836624898/1744a/ZKN17uQNQmg.jpg?ava=1",
    "ssoUrl": "https://sso.demo.rooxteam.com/sso",
    "isBlocked": false,
    "fullName": "Roox Test",
    "utm": {},
    "socialNetworkId": "vkontakte",
    "firstName": "Test",
    "vkontakteAppId": "4133198",
    "vkontakteRedirectUri": "/vk_callback.jsp",
    "vkontakteRequestScopesAsArray": [],
    "odnoklassnikiAppId": "1248780544",
    "odnoklassnikiRedirectUri": "https://sso.demo.rooxteam.com/sso/ok_callback.jsp",
    "srp6CryptoParams": {
      "N": 1.1144252439149533e+154,
      "g": 2,
      "H": "SHA-1",
      "messageDigestInstance": {
        "algorithm": "SHA-1",
        "provider": {
          "Alg.Alias.Signature.SHA1/DSA": "SHA1withDSA",
          "MessageDigest.MD2": "sun.security.provider.MD2"
        },
        "digestLength": 20
      }
    }
  },
  "form": {
    "name": "loginForm",
    "fields": {
      "password": {
        "constraints": [
          {
            "name": "NotNull"
          },
          {
            "name": "Size",
            "attributes": {
              "min": 1,
              "max": 1024
            }
          }
        ]
      },
      "username": {
        "constraints": [
          {
            "name": "NotNull"
          },
          {
            "name": "Size",
            "attributes": {
              "min": 1,
              "max": 2000
            }
          }
        ]
      }
    },
    "errors": []
  },
  "serverUrl": "https://sso.rooxteam.com/sso/auth/login-widget-router",
  "step": "auth_form"
}

Ввод учетных данных пользователя для создания привязки с выбранным ресурсом

Формат запроса

POST /sso/auth/login-widget-router
Host: <sso_host>
Accept: application/json
Content-Type: application/x-www-form-urlencoded

execution=<execution>&
username=<username>&
password=<password>&
_eventId=next

Параметры

  • <sso_host> — базовый адрес сервера WebSSO, например sso.rooxteam.com

  • <execution> — значение равно значению поля <execution> полученному из ответа на запрос к <sso_host>/sso/auth/login-widget-router

  • <username> — логин пользователя для аутентификации в WebSSO

  • <password> — пароль пользователя для аутентификации в WebSSO

Формат успешного ответа

HTTP/1.1 200 OK
{
  "execution": "402806ac-dcd7-4ef7-82e6-4eb847002ce4_AAABFQAAAQAXmfMS4zVZ6hdEXg+PAK8qSA==",
  "view": {
    "socialNetworkId": "vkontakte",
    "firstName": "Test",
    "avatarUrl": "https://sun9-39.userapi.com/c836624/v836624898/1744a/ZKN17uQNQmg.jpg?ava=1",
    "fullName": "Roox Test",
    "step": "attach_form",
    "cid": "2"
  },
  "form": {
    "name": "attachForm",
    "fields": {},
    "errors": []
  },
  "serverUrl": "https://sso.demo.rooxteam.com/sso/auth/social-attach",
  "step": "show_attach_form"
}

Подтверждение создания привязки с выбранным ресурсом

В зависимости от настроек WebSSO, может потребоваться подтверждение данной операции с помощью OTP.

Формат запроса

POST /sso/auth/login-widget-router
Host: <sso_host>
Accept: application/json
Content-Type: application/x-www-form-urlencoded

execution=<execution>&
_eventId=next

Параметры

  • <sso_host> — базовый адрес сервера WebSSO, например sso.rooxteam.com

  • <execution> — значение равно значению поля <execution> полученному из ответа на предыдущий запрос в цепочке

Формат успешного ответа в случае необходимости ввода OTP

HTTP/1.1 200 OK
{
  "execution": "796449a6-32fb-4fdc-83ca-9346bfe2f2d8_AAABFQAAAQAWvrK3+lzcl09IZV3C9zsYX/AqEeBrxRQuANrlcax6VhHIh4D6IfqO7LSoUKzOao005OeocjahmFAMDrO/j20b/KOluhTF78cufUWkzXBQ8TbFKB19C5jh7XS92L2qMX/RfDtlR4xev/99Fna5imKqzHR+2Pr35jntNKcp96qMZW2V9JMTJYEehqms7n5mUlgGelRiodUW2hFxpkKQjx0I4NL4/wR2whfuPSAK1b3BTmPHw/m3DGjs3Pvp9ao/9LqN4TV5sQmp5oVHzaUpy/a9gM0iulXQPnFzf0XMKdFyKr804l5wweibGw5HU9uBL/xoeyA32Z",
  "view": {
    "nextOtpCodePeriod": 9,
    "otpCodeAvailableAttempts": 6,
    "expireOtpCodeTime": 119,
    "blockedFor": 0,
    "isBlocked": false,
    "otpCodeNumber": 94,
    "msisdn": "3211",
    "cid": "2"
  },
  "form": {
    "name": "otpForm",
    "fields": {
      "otpCode": {
        "constraints": [
          {
            "name": "NotNull"
          }
        ]
      }
    },
    "errors": []
  },
  "serverUrl": "https://sso.demo.rooxteam.com/sso/auth/otp-sms",
  "step": "enter_otp_form"
}

Ввод OTP для завершения сценария создания привязки с выбранным ресурсом

Для завершения сценария создания привязки может потребоваться ввести OTP, который будет отправлен пользователю. Полученный пользователем OTP необходимо отправить в WebSSO следующим запросом.

Формат запроса

POST /sso/auth/otp-sms
Host: <sso_host>
Accept: application/json
Content-Type: application/x-www-form-urlencoded

otpCode=<otpCode>&
execution=<execution>&
_eventId=start

Параметры

  • <sso_host> — базовый адрес сервера WebSSO, например sso.rooxteam.com

  • <execution> — значение равно значению поля <execution> полученному из ответа на предыдущий запрос в цепочке

  • <otpCode> — полученный пользователем OTP

Формат ответа в случае успешного ввода OTP

HTTP/1.1 200 OK
{
  "step": "redirect",
  "location": "/sso/auth/complete",
  "cid": "2"
}

Получение токена доступа

Данный этап является опциональным. Его неисполнение, также как и результат в случае исполнения не влияют на создание привязки. Успешное прохождение позволяет пользователю получить токен доступа сразу же после создания привязки без повторной аутентификации. Для этого необходимо перейти на url из поля <location>, полученным на предыдущем шаге. В ответе будет содержаться HTTP cookie под названием at, в которой будет содержаться токен доступа.

Формат запроса

GET <redirect_url>
Host: <sso_host>
Accept: text/html,*/*;q=0.8

Параметры

  • <sso_host> — базовый адрес сервера WebSSO, например sso.rooxteam.com

  • <redirect_url> — url для получения токена доступа, например /sso/auth/complete

Формат ответа

HTTP/1.1 200 OK
Set-Cookie: at=eyAiY3R5IjogIkpXVCIsICJ0eXAiOiAiand0IiwgImVuYyI6ICJBMTI4Q0JDX0hTMjURsB2_La4j5csosSgw; Expires=Fri, 30-Aug-2019 09:12:40 GMT; Path=/; Secure; HttpOnly
<html>
<head>
    <meta http-equiv=Content-Type content="text/html; charset=UTF-8"/>
    <title>Система</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
</head>
<body>
<div id="container" style="position: relative; width: 1280px; height: 981px; margin: 0 auto;">
    <img src="lk.png" style="position: absolute; display: block; margin: auto;" usemap="#settingsmap">
    <map name="settingsmap">
        <area id="settings" shape="rect" coords="1112,17,1250,39" href="/widgets/settings.html" alt="Настройки">
    </map>
    <script type="text/javascript">
        $(function(){
            $("#settings").click(function(){
$("#container").append('<iframe src="/widgets/settings.html" style="background-color: transparent;border:0; width: 100%; height: 100%; position: absolute; top: 0; bottom: 0"></iframe>')
                return false;
            })
        });
    </script>
    <a href="/sso/UI/Logout?goto=https%3A%2F%2Fsso.demo.rooxteam.com%2Fsso%2Fauth%2Fdispatcher%3FskipAutoLogin%3Dtrue%26goto%3Dhttps%253A%252F%252Fsso.demo.rooxteam.com%252Fsso%252FUI%252FLogin%253Forg%253Dcustomer%2526service%253Duidm" style="position: absolute; text-decoration: none; top: 68px;left: 89%;">
    </a>
</div>
</body>
</html>

Аутентификация пользователя через сторонний ресурс

Создав ранее привязку своего аккаунта в WebSSO с некоторым ресурсом, пользователь может аутентифицироваться в WebSSO посредством авторизации в этом ресурсе. Все запросы должны быть выполнены в приведенной последовательности, так как поле <execution> из каждого ответа используется как параметр в следующем запросе.

Начало сценария аутентификации в WebSSO

Для начала сценария аутентификации в WebSSO через сторонний ресурс необходимо отправить запрос в WebSSO на /sso/oauth2/authorize. В ответе будет содержаться параметр <execution>, который необходимо будет включить в следующий запрос к WebSSO.

Формат запроса

GET /sso/oauth2/authorize
Host: <sso_host>
Accept: application/json
Content-Type: application/x-www-form-urlencoded

response_type=code&
realm=<realm>&
client_id=<client_id>&
redirect_uri=<redirect_uri>

Параметры

  • <sso_host> — базовый адрес сервера WebSSO, например sso.rooxteam.com

  • <client_id> — идентификатор клиента, например selfcare

  • <redirect_uri> — url для переадресации пользователя в случае успешной аутентификации

  • <realm> — url-encoded пользовательский realm, например %2Fcustomer

Формат успешного ответа

В данном примере в ответе содержится html с encoded URL ссылкой на виджет логина (ссылка на виджет имеет вид <sso_host>/widgets/login/login.xml). В этой ссылке содержится параметр <execution>, который используется в следующем запросе к WebSSO из цепочки запросов.

HTTP/1.1 200 OK
<!doctype html>
<html>
<head>
    <title>Интернет-банк</title>
    <link rel=icon type="image/x-icon" href="/sso/ocb_resources/favicon.ico"/>
        <link rel="shortcut icon" type="image/x-icon" href="/sso/bank/favicon.ico"/>
    </head>
<body>
<span id="widget_wrapper_0"><link href="https://sso.demo.rooxteam.com/widgets/login/roox_vf_8f095fa178c08585feac1a7332b10473/bundles/dist-bundle.css" rel="stylesheet"><link href="https://sso.demo.rooxteam.com/widgets/login/roox_vf_8f095fa178c08585feac1a7332b10473/bundles/styles-bundle.css" rel="stylesheet" type="text/css"><!--[if IE]>
    <p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]--><!-- Global site tag (gtag.js) - Google Analytics --><script>window['__isgadget']=true;</script><script>com=window['com']||{};com.rooxteam=com.rooxteam||{};com.rooxteam.container=com.rooxteam.container||{};</script><script>com.rooxteam.container.renderType = 'INLINE'</script><script id="externForcedLibs" src="https://sso.demo.rooxteam.com/wrs-4.3/gadgets/js/com.rooxteam.config:com.rooxteam.lifecycle:com.rooxteam.sso:com.rooxteam.statistic:core:rpc.js?container=default&amp;nocache=0&amp;debug=0&amp;c=0&amp;v=d6314531c7650e32f5d8eb992ff97197" type="text/javascript"></script><script id="externGadgetLibs" src="https://sso.demo.rooxteam.com/wrs-4.3/gadgets/js/locked-domain:auth-refresh:opensocial-reference:security-token:opensocial-base:osapi:opensocial-jsonrpc:com.rooxteam.webapi:com.rooxteam.templates:com.rooxteam.templates.dustjs:com.rooxteam.i18n:com.rooxteam.webapicache:com.rooxteam.momentjs:com.rooxteam.numeraljs.js?container=default&amp;nocache=0&amp;debug=0&amp;c=0&amp;v=6c8e922b086890a447ef83fb1f3ad67a&amp;transitive=false" type="text/javascript"></script><script>widgetUrls=window['widgetUrls']||[];widgetUrls[0]='https\x3A\x2F\x2Focb\x2Ddigital.demo.rooxteam.com\x2Fwidgets\x2Flogin\x2Flogin.xml\x3Fmid\x3D0\x26country\x3DRU\x26lang\x3Dru\x26parent\x3Dnull\x26title\x3DLogin\x26up_inputData\x3D\x257B\x2522execution\x2522\x253A\x2522c6d55f93\x2Dd98e\x2D47ef\x2D9546\x2Db3b375be9b62_AAABFQAAAQCEEkBLJAcZ0qpl1qvk4IJ\x252F6weo0p525wIRCYup8pV4F8SE9P3qP7IQ8Wl7FuTCOsCmCrj\x252FctciLkhDLfqRgJRTCtYEj0ZBGjsCQeaxzDg1BU\x252BnSYUSgmwHAt\x252BEK8TZEcuSxD\x252BqavWRYQd8Ja5boTmnQK\x252BFXmB2IbJAeIY1lGXgz7\x252FQfpqCBmHVV\x252BS02nXIz2eiVooRYvXPfaD80rMHIpMplVMfnRQHBDkJL1JDUzvE7o1irXT3xSqdctStYKKBQ7RoaPINy7ev\x252FG8yLgf8F0XaSVCCdH3uCNREGkpbiWzjprgrN0U31Esq7zeid22hHWc\x252FTMPochZBx8ybBRViiv9XAAAACWV4ZWN1dGlvbsaHPP3ZKTILhqUgzVlb2QbsIrNJ2JUFdOxQzLJIbcFbXdkH3o6X65VRtZsOd9qPUAPCcHa93HKrySoO9g\x252Fm5q9iPt9JWzf3cI4QIaUSLrgYlPfhuOo\x252FmNaB\x252BTED\x252FFEJ7nFOvVvJz2TgQGFHbwsRMa0S\x252F\x252BS3C3IR6ilhfAyCvbPdb\x252FTfh1Uf61NynvV\x252Bocm8OFpWmUoS6Bi5lc6KGy\x252BnRWOlT75aDtWTkFvHQ1rePEM5KNCh\x252F8arPMSwIr2EtkTB8UazwhAUj1o6PseAnqP\x252B\x252FMcXGwC3PS\x252FX0BlT1gmsxDM28tI4FnOrl\x252BLTDG02ra7Qt8FonU6RMVGXsqraZsJ65G2xVLM9S3AGjN3My0\x252Fk4TSGquHOEKrw6xRlWYJqya0VB2qyRnP\x252FdQmglAlre2SIQR2ISm4H2jsaUcC5dpnfX7795rsL9ljo4Co3SO5o0Dn8loUur4gd99SpH7PcrV76T8gjxeLVU0q9N0G5Fr3rKTZUDqZI0Flh37GwMrjM3Kz8AKRlh4\x252FmkU41G57FYPj\x252BImijHwMNafzZStBr7iByrs5TJcDUzLVguDdLE\x252BdTZZMSDjwNWauy4R9PCIXPvEmGi0Qg2Fiptvv5IGtaIgt13KDEW6Olmh8FDmsyly7Daa0ynHHFRc\x252FtaiGBIBpgfFA8i3aslD4wYMfS3\x252BGkHpXatQ5Ebmys7eHZQDopbR0M\x252BxOXRj98TRjyeQHcNQ1WB6WtUmkkwtSIZVn2iDNL4mieNzuq4pR\x252BUUYm28P4lS\x252BU07FWCdF8k3fUrvtbI4Ck317bPrAcDfr6Wbdgt6gxPbB3p0fNGZ42gKFzRanp01LEWOgRaYItUrDXf\x252FHU2I9dOTWzSPNdasys20MIRa4KYBonSPxGmbkf9bVBO6cuYkyQIR194eAh9b2FLKc33\x252FRZqFTap0YGWcMpQThKykbU90\x252FF2xwI7qGyVA4hMBU\x252F9mKJ2cnUCLhCRSujOnegy4qp6kLC14MX1IL6Xn8G3N0xcZFn4KOHt550jpfM0P0pwER2t4\x252Faz\x252FrysPppeERKQG\x252FYO12BPgh5kxkfCefBBS8jTPt5LSH8peTygFx1Rp\x252F0B0nLKil2cst5iHRnrQiLi7PR6TuVzjgut\x252BvqClWIRlicVvS8k8dOfUv89fEwiPz34cpBSBMEt9sGWBcglB3o\x252BuWTs4kqRkO9Zs1yIvRMQP8BzV92R94VikaYd5ua\x252FN\x252FNWuluRWE2DPVH9W\x252F9PODukwTPnQ0YnoGNGT4Moql2U9RRpN1vFjLGJOYEH3ZXBxiJdUMtiFyv7PQcYNo4rjItTXXWL2qbxHju\x252B6dsx4dXKvyzNg1CWWXrz94V6Nyisajk33TA1cz30X2zYXghlEoKH8xq0FJJLNuLMjAkBP72nzemIOnbeFLtIBdgW\x252BdCOsIy9G5q0nZxkRdJ2VB26NYnr7fH\x252FHWN1OFs6o4vOxfmYjIAUGEjmqL4v9BajGyFd7Ou6tE9C\x252BstkJ8BAKk5TTsqr4wbX9R0l1DVR16QRB4V0Dbnu\x252BBdE8IvvWii8gzh1bwHnSVbZwhEQtZwUMI\x252FeknQJg7SnJFbtXXiRdLTkBc\x252FnVVgz4JHGfxj6m04ypKLtHuBQJcsMVfpZ18oyjvzM1NUEeGZzCNvN5Hz3CB3J\x252BgjUR8nyqF0bzjQBnbzr1v7jPW9SC\x252BFT7uwIWsnREaQdwLzTbXU0yz45LHHOPCL6fFGSzmiudgBY\x252Ff1VzqXD64gpVMqo584iKi6LLO2xPUDtsi7XETyqrP2Iy2WZIu4QhMishSfJg\x252BL6S58sbhl59sZAW2T0jbZCh277F3rNpbNs6DmIPUSXSA0NL2c5oOT61KuD7Hi1NdW8SHsGQP94NY6y3GiZgzIHylt\x252FWaJCUdzOR\x252BEzEstl\x252B0ophkwaql1kcbHr6WOJ8gPeNECbT\x252BG6GcmCx1nX6yfq\x252F\x252F84FZkHr2\x252FYikDmpuGKBeDDL\x252Bns0eshlltUnhyIF\x252BAk\x252B7fzTR0BUi\x252B7lV0JE\x252B2jiYCo7EpFBfcM699A6ckeK80NHZcKGwHbOC6\x252Flrmpz\x252Bb1FIXNFuJXwvhUFa1Z0ATWtHhF8eSXuJBM5TUs\x252B24BX1gGzm2Y2XY2En\x252F1abS2x1pcbEv2J1h5ptgxUCAaRTDW5HWE8GWvDGWN4qlJ1vMzEZyhwZUQsY7bFlVJ32O5oQJ3oKmehCwlRevn9oIqP4pdIhkqDjqKa4Y1h9M67WLm8u3BOuIhfXRGn9iq2hX4mU5ccOKRQDpa89QnT\x252FMmR5\x252B7lWg4weGxj2BTuK52Yi22MZv\x252Fx4wEACfl7JPGTFy4CYhJQQeLuOIjnbNzeN0xa1uQsr2PDJdEOkZvNNTS4CXOBpoVH3nm6xY3Vaorp6T7\x252FqPNgZMeCSWw9VD8KRxjrZSKsMEOA3GRsFA6AXY63IBrZU2w\x252BIQ2vMC1IGSMLT3otc\x252Fe7r1C6aYEo6hNLy\x252FaG3I6q74ly\x252BAjH\x252F8\x252FQ9\x252FY2qHlFGfAjCMKCTK7hpXoilKTPOBNoKui2MmX9a\x252FXzSW9rhEUGTThRiX9phQi79mG983SdZeQQdXRMhut6MaB6Fb\x252F76\x252FmeLDB3UoRcIuKYNZ4Oq2Aa7HB\x252BLchtTvOd3afN5\x252Fx\x252BSMZJePjBFds\x252FAbp7\x252Bwafi65P8\x252BkXjRioGdJwzMsrzNAC0tFlYz\x2522\x252C\x2522view\x2522\x253A\x257B\x2522vkontakteAppId\x2522\x253A\x25224133198\x2522\x252C\x2522odnoklassnikiRequestScopesAsArray\x2522\x253A\x255B\x255D\x252C\x2522ssoUrl\x2522\x253A\x2522https\x253A\x252F\x252Focb\x2Ddigital.demo.rooxteam.com\x252Fsso\x2522\x252C\x2522isBlocked\x2522\x253Afalse\x252C\x2522vkontakteRedirectUri\x2522\x253A\x2522\x252Fvk_callback.jsp\x2522\x252C\x2522vkontakteRequestScopesAsArray\x2522\x253A\x255B\x255D\x252C\x2522odnoklassnikiAppId\x2522\x253A\x25221248780544\x2522\x252C\x2522odnoklassnikiRedirectUri\x2522\x253A\x2522https\x253A\x252F\x252Focb\x2Ddigital.demo.rooxteam.com\x252Fsso\x252Fok_callback.jsp\x2522\x252C\x2522srp6CryptoParams\x2522\x253A\x257B\x2522N\x2522\x253A11144252439149533417835749556168991736939157778924947037200268358613863350040339017097790259154750906072491181606044774215413467851989724116331597513345603\x252C\x2522g\x2522\x253A2\x252C\x2522H\x2522\x253A\x2522SHA\x2D1\x2522\x252C\x2522messageDigestInstance\x2522\x253A\x257B\x2522algorithm\x2522\x253A\x2522SHA\x2D1\x2522\x252C\x2522provider\x2522\x253A\x257B\x2522Alg.Alias.Signature.SHA1\x252FDSA\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522Alg.Alias.Signature.1.2.840.10040.4.3\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522Alg.Alias.Signature.DSS\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522SecureRandom.SHA1PRNG\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522KeyStore.JKS\x2522\x253A\x2522sun.security.provider.JavaKeyStore\x2524DualFormatJKS\x2522\x252C\x2522Alg.Alias.MessageDigest.SHA\x2D1\x2522\x253A\x2522SHA\x2522\x252C\x2522MessageDigest.SHA\x2522\x253A\x2522sun.security.provider.SHA\x2522\x252C\x2522KeyStore.CaseExactJKS\x2522\x253A\x2522sun.security.provider.JavaKeyStore\x2524CaseExactJKS\x2522\x252C\x2522CertStore.com.sun.security.IndexedCollection\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522Signature.SHA256withDSA\x2522\x253A\x2522sun.security.provider.DSA\x2524SHA256withDSA\x2522\x252C\x2522Alg.Alias.MessageDigest.OID.1.3.14.3.2.26\x2522\x253A\x2522SHA\x2522\x252C\x2522Alg.Alias.Signature.DSA\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522KeyFactory.DSA\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522KeyStore.JKS\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522AlgorithmParameters.DSA\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522Signature.NONEwithDSA\x2522\x253A\x2522sun.security.provider.DSA\x2524RawDSA\x2522\x252C\x2522Alg.Alias.CertificateFactory.X509\x2522\x253A\x2522X.509\x2522\x252C\x2522Signature.SHA256withDSA\x2BSupportedKeyClasses\x2522\x253A\x2522java.security.interfaces.DSAPublicKey\x257Cjava.security.interfaces.DSAPrivateKey\x2522\x252C\x2522CertStore.com.sun.security.IndexedCollection\x2522\x253A\x2522sun.security.provider.certpath.IndexedCollectionCertStore\x2522\x252C\x2522Provider.id\x2BclassName\x2522\x253A\x2522sun.security.provider.Sun\x2522\x252C\x2522Alg.Alias.MessageDigest.1.3.14.3.2.26\x2522\x253A\x2522SHA\x2522\x252C\x2522Alg.Alias.Signature.SHA\x2D1\x252FDSA\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522KeyStore.DKS\x2522\x253A\x2522sun.security.provider.DomainKeyStore\x2524DKS\x2522\x252C\x2522CertificateFactory.X.509\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522Alg.Alias.Signature.OID.2.16.840.1.101.3.4.3.2\x2522\x253A\x2522SHA256withDSA\x2522\x252C\x2522Alg.Alias.Signature.OID.2.16.840.1.101.3.4.3.1\x2522\x253A\x2522SHA224withDSA\x2522\x252C\x2522Signature.SHA1withDSA\x2BKeySize\x2522\x253A\x25221024\x2522\x252C\x2522Signature.NONEwithDSA\x2BKeySize\x2522\x253A\x25221024\x2522\x252C\x2522CertPathValidator.PKIX\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522KeyFactory.DSA\x2522\x253A\x2522sun.security.provider.DSAKeyFactory\x2522\x252C\x2522Configuration.JavaLoginConfig\x2522\x253A\x2522sun.security.provider.ConfigFile\x2524Spi\x2522\x252C\x2522Alg.Alias.Signature.OID.1.2.840.10040.4.3\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522Alg.Alias.MessageDigest.OID.2.16.840.1.101.3.4.2.4\x2522\x253A\x2522SHA\x2D224\x2522\x252C\x2522Alg.Alias.KeyFactory.1.2.840.10040.4.1\x2522\x253A\x2522DSA\x2522\x252C\x2522MessageDigest.MD5\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522Alg.Alias.MessageDigest.OID.2.16.840.1.101.3.4.2.3\x2522\x253A\x2522SHA\x2D512\x2522\x252C\x2522Alg.Alias.MessageDigest.OID.2.16.840.1.101.3.4.2.2\x2522\x253A\x2522SHA\x2D384\x2522\x252C\x2522Alg.Alias.MessageDigest.OID.2.16.840.1.101.3.4.2.1\x2522\x253A\x2522SHA\x2D256\x2522\x252C\x2522Alg.Alias.Signature.RawDSA\x2522\x253A\x2522NONEwithDSA\x2522\x252C\x2522Provider.id\x2Bname\x2522\x253A\x2522SUN\x2522\x252C\x2522Alg.Alias.AlgorithmParameters.1.2.840.10040.4.1\x2522\x253A\x2522DSA\x2522\x252C\x2522CertPathBuilder.PKIX\x2BValidationAlgorithm\x2522\x253A\x2522RFC3280\x2522\x252C\x2522Policy.JavaPolicy\x2522\x253A\x2522sun.security.provider.PolicySpiFile\x2522\x252C\x2522Signature.SHA224withDSA\x2BKeySize\x2522\x253A\x25222048\x2522\x252C\x2522Alg.Alias.AlgorithmParameters.OID.1.2.840.10040.4.1\x2522\x253A\x2522DSA\x2522\x252C\x2522Alg.Alias.AlgorithmParameters.1.3.14.3.2.12\x2522\x253A\x2522DSA\x2522\x252C\x2522Alg.Alias.Signature.SHA\x252FDSA\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522Alg.Alias.KeyPairGenerator.1.3.14.3.2.12\x2522\x253A\x2522DSA\x2522\x252C\x2522MessageDigest.SHA\x2D384\x2522\x253A\x2522sun.security.provider.SHA5\x2524SHA384\x2522\x252C\x2522MessageDigest.SHA\x2D224\x2522\x253A\x2522sun.security.provider.SHA2\x2524SHA224\x2522\x252C\x2522Signature.SHA1withDSA\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522AlgorithmParameterGenerator.DSA\x2522\x253A\x2522sun.security.provider.DSAParameterGenerator\x2522\x252C\x2522Signature.NONEwithDSA\x2BSupportedKeyClasses\x2522\x253A\x2522java.security.interfaces.DSAPublicKey\x257Cjava.security.interfaces.DSAPrivateKey\x2522\x252C\x2522SecureRandom.NativePRNGBlocking\x2522\x253A\x2522sun.security.provider.NativePRNG\x2524Blocking\x2522\x252C\x2522MessageDigest.SHA\x2D512\x2522\x253A\x2522sun.security.provider.SHA5\x2524SHA512\x2522\x252C\x2522Alg.Alias.KeyFactory.OID.1.2.840.10040.4.1\x2522\x253A\x2522DSA\x2522\x252C\x2522CertPathBuilder.PKIX\x2522\x253A\x2522sun.security.provider.certpath.SunCertPathBuilder\x2522\x252C\x2522Alg.Alias.Signature.1.3.14.3.2.27\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522Alg.Alias.MessageDigest.2.16.840.1.101.3.4.2.4\x2522\x253A\x2522SHA\x2D224\x2522\x252C\x2522CertPathBuilder.PKIX\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522Alg.Alias.MessageDigest.2.16.840.1.101.3.4.2.3\x2522\x253A\x2522SHA\x2D512\x2522\x252C\x2522Provider.id\x2Bversion\x2522\x253A\x25221.8\x2522\x252C\x2522Alg.Alias.MessageDigest.2.16.840.1.101.3.4.2.2\x2522\x253A\x2522SHA\x2D384\x2522\x252C\x2522Signature.SHA256withDSA\x2BKeySize\x2522\x253A\x25222048\x2522\x252C\x2522Alg.Alias.MessageDigest.2.16.840.1.101.3.4.2.1\x2522\x253A\x2522SHA\x2D256\x2522\x252C\x2522AlgorithmParameters.DSA\x2522\x253A\x2522sun.security.provider.DSAParameters\x2522\x252C\x2522Signature.SHA1withDSA\x2BSupportedKeyClasses\x2522\x253A\x2522java.security.interfaces.DSAPublicKey\x257Cjava.security.interfaces.DSAPrivateKey\x2522\x252C\x2522CertStore.Collection\x2522\x253A\x2522sun.security.provider.certpath.CollectionCertStore\x2522\x252C\x2522AlgorithmParameterGenerator.DSA\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522SecureRandom.NativePRNGNonBlocking\x2522\x253A\x2522sun.security.provider.NativePRNG\x2524NonBlocking\x2522\x252C\x2522KeyPairGenerator.DSA\x2BKeySize\x2522\x253A\x25222048\x2522\x252C\x2522CertStore.LDAP\x2522\x253A\x2522sun.security.provider.certpath.ldap.LDAPCertStore\x2522\x252C\x2522CertificateFactory.X.509\x2522\x253A\x2522sun.security.provider.X509Factory\x2522\x252C\x2522Alg.Alias.Signature.2.16.840.1.101.3.4.3.2\x2522\x253A\x2522SHA256withDSA\x2522\x252C\x2522Alg.Alias.Signature.2.16.840.1.101.3.4.3.1\x2522\x253A\x2522SHA224withDSA\x2522\x252C\x2522SecureRandom.NativePRNG\x2522\x253A\x2522sun.security.provider.NativePRNG\x2522\x252C\x2522CertStore.LDAP\x2BLDAPSchema\x2522\x253A\x2522RFC2587\x2522\x252C\x2522CertStore.LDAP\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522KeyPairGenerator.DSA\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522CertPathValidator.PKIX\x2BValidationAlgorithm\x2522\x253A\x2522RFC3280\x2522\x252C\x2522CertStore.Collection\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522Signature.SHA224withDSA\x2522\x253A\x2522sun.security.provider.DSA\x2524SHA224withDSA\x2522\x252C\x2522Alg.Alias.Signature.1.3.14.3.2.13\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522CertPathValidator.PKIX\x2522\x253A\x2522sun.security.provider.certpath.PKIXCertPathValidator\x2522\x252C\x2522Alg.Alias.MessageDigest.SHA1\x2522\x253A\x2522SHA\x2522\x252C\x2522AlgorithmParameterGenerator.DSA\x2BKeySize\x2522\x253A\x25222048\x2522\x252C\x2522SecureRandom.SHA1PRNG\x2522\x253A\x2522sun.security.provider.SecureRandom\x2522\x252C\x2522Signature.SHA1withDSA\x2522\x253A\x2522sun.security.provider.DSA\x2524SHA1withDSA\x2522\x252C\x2522Alg.Alias.KeyFactory.1.3.14.3.2.12\x2522\x253A\x2522DSA\x2522\x252C\x2522MessageDigest.SHA\x2BImplementedIn\x2522\x253A\x2522Software\x2522\x252C\x2522KeyPairGenerator.DSA\x2522\x253A\x2522sun.security.provider.DSAKeyPairGenerator\x2524Current\x2522\x252C\x2522Provider.id\x2Binfo\x2522\x253A\x2522SUN\x2B\x2528DSA\x2Bkey\x252Fparameter\x2Bgeneration\x253B\x2BDSA\x2Bsigning\x253B\x2BSHA\x2D1\x252C\x2BMD5\x2Bdigests\x253B\x2BSecureRandom\x253B\x2BX.509\x2Bcertificates\x253B\x2BJKS\x2B\x2526\x2BDKS\x2Bkeystores\x253B\x2BPKIX\x2BCertPathValidator\x253B\x2BPKIX\x2BCertPathBuilder\x253B\x2BLDAP\x252C\x2BCollection\x2BCertStores\x252C\x2BJavaPolicy\x2BPolicy\x253B\x2BJavaLoginConfig\x2BConfiguration\x2529\x2522\x252C\x2522Alg.Alias.KeyPairGenerator.1.2.840.10040.4.1\x2522\x253A\x2522DSA\x2522\x252C\x2522Alg.Alias.Signature.SHAwithDSA\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522MessageDigest.MD5\x2522\x253A\x2522sun.security.provider.MD5\x2522\x252C\x2522Alg.Alias.Signature.DSAWithSHA1\x2522\x253A\x2522SHA1withDSA\x2522\x252C\x2522MessageDigest.SHA\x2D256\x2522\x253A\x2522sun.security.provider.SHA2\x2524SHA256\x2522\x252C\x2522Alg.Alias.KeyPairGenerator.OID.1.2.840.10040.4.1\x2522\x253A\x2522DSA\x2522\x252C\x2522Signature.SHA224withDSA\x2BSupportedKeyClasses\x2522\x253A\x2522java.security.interfaces.DSAPublicKey\x257Cjava.security.interfaces.DSAPrivateKey\x2522\x252C\x2522MessageDigest.MD2\x2522\x253A\x2522sun.security.provider.MD2\x2522\x257D\x252C\x2522digestLength\x2522\x253A20\x257D\x257D\x252C\x2522utm\x2522\x253A\x257B\x257D\x257D\x252C\x2522form\x2522\x253A\x257B\x2522name\x2522\x253A\x2522loginForm\x2522\x252C\x2522fields\x2522\x253A\x257B\x2522password\x2522\x253A\x257B\x2522constraints\x2522\x253A\x255B\x257B\x2522name\x2522\x253A\x2522NotNull\x2522\x257D\x252C\x257B\x2522name\x2522\x253A\x2522Size\x2522\x252C\x2522attributes\x2522\x253A\x257B\x2522min\x2522\x253A1\x252C\x2522max\x2522\x253A1024\x257D\x257D\x255D\x257D\x252C\x2522username\x2522\x253A\x257B\x2522constraints\x2522\x253A\x255B\x257B\x2522name\x2522\x253A\x2522NotNull\x2522\x257D\x252C\x257B\x2522name\x2522\x253A\x2522Size\x2522\x252C\x2522attributes\x2522\x253A\x257B\x2522min\x2522\x253A1\x252C\x2522max\x2522\x253A2000\x257D\x257D\x255D\x257D\x257D\x252C\x2522errors\x2522\x253A\x255B\x255D\x257D\x252C\x2522serverUrl\x2522\x253A\x2522https\x253A\x252F\x252Focb\x2Ddigital.demo.rooxteam.com\x252Fsso\x252Fauth\x252Flogin\x2Dwidget\x2Drouter\x2522\x252C\x2522step\x2522\x253A\x2522auth_form\x2522\x257D';baseUrls=window['baseUrls']||[];baseUrls[0]='https\x3A\x2F\x2Focb\x2Ddigital.demo.rooxteam.com\x2Fwidgets\x2Flogin\x2Froox_vf_8f095fa178c08585feac1a7332b10473\x2Flogin.xml';com.rooxteam.lifecycle && com.rooxteam.lifecycle.features('init');</script>

Авторизация в стороннем ресурсе

Для авторизации в WebSSO пользователь должен авторизоваться в ресурсе, который он ранее связал со своим аккаунтом в WebSSO. После успешной авторизации ресурс отправляет некоторые данные <social_data>, которые в дальнейшем используются WebSSO для аутентификации пользователя.

Аутентификация в WebSSO с помощью стороннего ресурса

В зависимости от настроек WebSSO, может потребоваться подтверждение данной операции с помощью OTP.

Формат запроса

POST /sso/auth/login-widget-router
Host: <sso_host>
Accept: application/json
Content-Type: application/x-www-form-urlencoded

execution=<execution>&
socialData=<socialData>&
loginType=WEBSITE&
_eventId=<_eventId>

Параметры

  • <sso_host> — базовый адрес сервера WebSSO, например sso.rooxteam.com

  • <execution> — значение равно значению поля <execution>, полученному из ответа на запрос к <sso_host>/sso/oauth2/authorize

  • <socialData> — преобразованные согласно алгоритму данные (<social_data>), отосланные ресурсом в результате авторизации пользователя

  • <_eventId> — идентификатор ресурса из таблицы, в котором ранее авторизовался пользователь

Формат успешного ответа в случае необходимости ввода OTP

HTTP/1.1 200 OK
{
  "execution": "4f07ae0c-fb5c-4522-b211-d57363d6c49a_AAABFQAAAQDS1h/Xi4bL8TR2BsQNsFANUEKZ2a9EriZiw48yC009E7FXSl1rtvWIk9o1WyHQ+wclOJduRaVVg4qwxRanuETjpt8HRbNMvujWvLEklkmmzhqcqA60+T2kCiW+FvtXwF9uVYSo=",
  "view": {
    "nextOtpCodePeriod": 9,
    "otpCodeAvailableAttempts": 6,
    "expireOtpCodeTime": 119,
    "blockedFor": 0,
    "isBlocked": false,
    "otpCodeNumber": 96,
    "msisdn": "3211"
  },
  "form": {
    "name": "otpForm",
    "fields": {
      "otpCode": {
        "constraints": [
          {
            "name": "NotNull"
          }
        ]
      }
    },
    "errors": []
  },
  "serverUrl": "https://sso.demo.rooxteam.com/sso/auth/otp-sms",
  "step": "enter_otp_form"
}

Ввод OTP для завершения сценария аутентификации

Для завершения аутентификации может потребоваться ввести OTP, который будет отправлен пользователю. Полученный пользователем OTP необходимо отправить в WebSSO следующим запросом.

Формат запроса

POST /sso/auth/otp-sms
Host: <sso_host>
Accept: application/json
Content-Type: application/x-www-form-urlencoded

otpCode=<otpCode>&
execution=<execution>&
_eventId=start

Параметры

  • <sso_host> — базовый адрес сервера WebSSO, например sso.rooxteam.com

  • <execution> — значение равно значению поля <execution>, полученному из ответа на предыдущий запрос в цепочке

  • <otpCode> — полученный пользователем OTP

Формат ответа в случае успешного ввода OTP

HTTP/1.1 200 OK
{
  "step": "redirect",
  "location": "/sso/auth/complete"
}

Получение токена доступа

Для получения токена доступа пользователю необходимо перейти по ссылке из поля <location>, которое содержит ответ на предыдущий запрос в WebSSO. В ответе будет содержаться HTTP cookie под названием at, в которой будет содержаться токен доступа.

Формат запроса

GET <redirect_url>
Host: <sso_host>
Accept: text/html,*/*;q=0.8

Параметры

  • <sso_host> — базовый адрес сервера WebSSO, например sso.rooxteam.com

  • <redirect_url> — url для получения токена доступа, например /sso/auth/complete

Формат ответа

HTTP/1.1 200 OK
Set-Cookie: at=eyAiY3R5IjogIkpXVCIsICJ0eXAiOiAianxdyqFtWq9PKc6fGBYPp-iJgoPFaJc2tCvTpQ.E7MH9i1fuOcm6YOOq4LejA; Expires=Tue, 27-Aug-2019 19:56:20 GMT; Path=/; Secure; HttpOnly
<html>
<head>
    <meta http-equiv=Content-Type content="text/html; charset=UTF-8"/>
    <title>Система</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
</head>
<body>
<div id="container" style="position: relative; width: 1280px; height: 981px; margin: 0 auto;">
    <img src="lk.png" style="position: absolute; display: block; margin: auto;" usemap="#settingsmap">
    <map name="settingsmap">
        <area id="settings" shape="rect" coords="1112,17,1250,39" href="/widgets/settings.html" alt="Настройки">
    </map>
    <script type="text/javascript">
        $(function(){
            $("#settings").click(function(){
$("#container").append('<iframe src="/widgets/settings.html" style="background-color: transparent;border:0; width: 100%; height: 100%; position: absolute; top: 0; bottom: 0"></iframe>')
                return false;
            })
        });
    </script>
    <a href="/sso/UI/Logout?goto=https%3A%2F%2Fsso.demo.rooxteam.com%2Fsso%2Fauth%2Fdispatcher%3FskipAutoLogin%3Dtrue%26goto%3Dhttps%253A%252F%252Fsso.demo.rooxteam.com%252Fsso%252FUI%252FLogin%253Forg%253Dcustomer%2526service%253Duidm" style="position: absolute; text-decoration: none; top: 68px;left: 89%;">
    </a>
</div>
</body>
</html>

Алгоритм вычисления значения параметра <socialData>

Сторонний ресурс возвращает результат попытки авторизации пользователя в виде JSON. Данный JSON необходимо преобразовать и передать в UIDM в качестве параметра <socialData>. Для преобразования необходимо: представить JSON в формате x-www-form-urlencoded, закодировать полученную строку в UTF-8, взять битовое представление строки в кодировке UTF-8, закодировать битовое представление в Base64. Полученная строка из битового представления и есть значение параметра <socialData>.

Пример. Пусть JSON, который отправляет сторонний ресурс, есть

{
  "accessToken": "EAACo4Is07YsBAFygpkjSqxKEN8hOBZAWBlEZD",
  "data_access_expiration_time": 1574223509,
  "expiresIn": 6091,
  "signedRequest": "FmLQr-m3i9F9",
  "userID": "100007547412176"
}

Тогда x-www-form-urlencoded представление будет

accessToken=EAACo4Is07YsBAFygpkjSqxKEN8hOBZAWBlEZD&data_access_expiration_time=1574223509&expiresIn=6091&signedRequest=FmLQr-m3i9F9&userID=100007547412176

Битовое представленние, закодированное в Base64, будет

YWNjZXNzVG9rZW49RUFBQ280SXMwN1lzQkFGeWdwa2pTcXhLRU44aE9CWkFXQmxFWkQmZGF0YV9hY2Nlc3NfZXhwaXJhdGlvbl90aW1lPTE1NzQyMjM1MDkmZXhwaXJlc0luPTYwOTEmc2lnbmVkUmVxdWVzdD1GbUxRci1tM2k5RjkmdXNlcklEPTEwMDAwNzU0NzQxMjE3Ng==

Поддерживаемые ресурсы и их идентификаторы

Каждый ресурс имеет уникальный идентификатор в SSO.

Таблица 1. Таблица поддерживаемых ресурсов и их идентификаторов
название ресурса идентификатор

Вконтанкте

vkontakte

Одноклассники

odnoklassniki

Twitter

twitter

Google

google

Яндекс

yandex

Mail.Ru

mailru