2016-08-08 8 views
1

У меня есть два приложения Spring Boot, защищенные расширением SAML Spring Security. Эти два приложения уже запущены. Первый (web-ui-app) - это интерфейс пользователя ко второму (services-app), REST API.SSO и SAML - поставщики нескольких услуг

После успешного доступа к веб-ui-приложению, правильно аутентифицированному поставщиком удостоверений, я пытаюсь получить доступ к некоторым способам-приложениям.

Однако, вместо того, чтобы получать правильный ответ из службы-приложения, ответ JSON, я получаю что-то вроде этого:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
    <body onload="document.forms[0].submit()"> 
     <noscript> 
     <p> 
      <strong>Note:</strong> Since your browser does not support JavaScript, you must press the Continue button once to proceed. 
     </p> 
     </noscript> 

     <form action="https://ServiceProvider.com/SAML/SLO/Browser" method="post"> 
     <div> 
      <input type="hidden" name="RelayState" value="0043bfc1bc45110dae17004005b13a2b"/> 
      <input type="hidden" name="SAMLRequest" value="PHNhbWxwOkxvZ291dFJlcXVlc3QgeG1sbnM6c2FtbHA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCIgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iDQogICAgSUQ9ImQyYjdjMzg4Y2VjMzZmYTdjMzljMjhmZDI5ODY0NGE4IiBJc3N1ZUluc3RhbnQ9IjIwMDQtMDEtMjFUMTk6MDA6NDlaIiBWZXJzaW9uPSIyLjAiPg0KICAgIDxJc3N1ZXI+aHR0cHM6Ly9JZGVudGl0eVByb3ZpZGVyLmNvbS9TQU1MPC9Jc3N1ZXI+DQogICAgPE5hbWVJRCBGb3JtYXQ9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpuYW1laWQtZm9ybWF0OnBlcnNpc3RlbnQiPjAwNWEwNmUwLWFkODItMTEwZC1hNTU2LTAwNDAwNWIxM2EyYjwvTmFtZUlEPg0KICAgIDxzYW1scDpTZXNzaW9uSW5kZXg+MTwvc2FtbHA6U2Vzc2lvbkluZGV4Pg0KPC9zYW1scDpMb2dvdXRSZXF1ZXN0Pg=="/> 
     </div> 
     <noscript> 
      <div> 
       <input type="submit" value="Continue"/> 
      </div> 
     </noscript> 
     </form> 
    </body> 
</html> 

Это разговор SSO. Разве это не должно быть прозрачным обменом ключами между сервисом-приложением и поставщиком услуг, поскольку я уже зарегистрирован в веб-ui-app?

Что мне не хватает?

+0

У вас есть оба проекта, настроенные как Поставщики услуг? Используете ли вы безопасность или сеансы без гражданства? Можете ли вы рассказать о том, что вы имеете в виду, когда говорите «обеспечено с помощью расширения SAML Spring Security»? Было бы правильным сказать, что и передняя, ​​и задняя часть являются отдельными поставщиками услуг? – blur0224

+0

Да, передняя часть и задняя часть - оба поставщика услуг. Выяснилось, что службы без гражданства, остальные api, не могут быть защищены SAML. Лучшим подходом в этом случае будет использование SAML во внешнем приложении и OpenID с аутентификацией токена в остальном api, правильно? –

ответ

2

SAML может использоваться для защиты одного приложения с API-интерфейсом для отдыха, однако наличие отдельного переднего и заднего конца, которые не используют приложение или контекст сеанса, не работает. Например, если у вас есть одно приложение с интерфейсом, входящим в комплект, и настройте его как один поставщик услуг, сеанс будет действителен для обратных запросов API.

При этом, если вы сохраняете интерфейс, настроенный как поставщик услуг, вы можете использовать защиту на основе токенов без привязки для REST API, как вы уже упоминали. Эта архитектура предпочтительна, потому что она лучше, чем сеансы. Любой запрос должен иметь возможность обращаться к любому экземпляру REST API и обрабатываться, поэтому вы можете добавлять или удалять экземпляры API для масштабирования приложения по мере необходимости.

JSON Web Tokens (JWT) - хороший вариант, поскольку он позволяет хранить некоторую информацию о пользователе в пользовательских претензиях в токене. Если все экземпляры остального API подписывают токены с тем же общим секретом, любой запрос может перейти в любой экземпляр, и этот экземпляр сможет декодировать токен и получить информацию о претензии (например, идентификатор пользователя), не сохраняя ее в кеше или базе данных.