Spring Security с SAP S4SDK / CAPM: как назначить роли моему пользователю? - PullRequest
0 голосов
/ 11 марта 2019

Я использую SAP S / 4HANA Cloud SDK (S4SDK) в сочетании с моделью программирования облачных приложений (CAPM).У меня есть рабочий процесс и артефакты Fiori в Neo, которые используют службу S4SDK, работающую в Cloud Foundry (CF).Служба S4SDK затем вызывает S / 4HANA (Public) Cloud с использованием системного пользователя.Я установил Принцип Распространения от Neo до CF по следующей ссылке:

Основное Распространение от Neo до Среды Cloud Foundry

Я разрабатывал своюпроект уже пару месяцев.Теперь пришло время настроить доступ на основе ролей к моим службам OData.Мне нужно убедиться, что у меня есть внутренняя проверка, чтобы убедиться, что только утверждающие могут установить состояние моего запроса, например, «Утверждено».

Я планирую сделать это, объявив несколько служб OData в моем-service.cds файл.Затем, используя Spring-Security, я предоставлю только тем, у кого есть доступ к сбору ролей утверждающих, к службе утверждающих.

Я слежу за этим блогом:

Шаг 7 с SAP S /4HANA Cloud SDK: Защитите свое приложение на платформе SAP Cloud, CloudFoundry

Мой xs-security.json выглядит следующим образом:

{
  "xsappname": "s4projectcreate",
  "tenant-mode": "dedicated",
  "description": "Security profile of called application",
  "scopes": [
    {
      "name": "uaa.user",
      "description": "UAA"
    },
    {
      "name": "$XSAPPNAME.AdminApprove",
      "description": "UAA"
    },
    {
      "name": "$XSAPPNAME.RiskApprove",
      "description": "UAA"
    }
  ],
  "role-templates": [
    {
      "name": "Token_Exchange",
      "description": "UAA",
      "scope-references": [
        "uaa.user"
      ]
    },
    {
      "name": "Admin_Approver",
      "description": "Request Admin Approver",
      "scope-references": [
        "$XSAPPNAME.AdminApprove"
      ]
    },
    {
      "name": "Risk_Approver",
      "description": "Request Risk Approver",
      "scope-references": [
        "$XSAPPNAME.RiskApprove"
      ]
    }
  ]
}

Я сделал следующие записи в моей весеннейsecurity.xml (иначе как в блоге):

<sec:intercept-url pattern="/odata/v2/ProjCreateApprover/**" access="#oauth2.hasScope('${xs.appname}.AdminApprove')" method="GET" />
<sec:intercept-url pattern="/odata/v2/**" access="isAuthenticated()" method="GET" />

Когда я иду в кабину CF (уровень организации) и перехожу к разделу Security / Roles, я могу создать новую коллекцию ролей и добавитьдва ролевых шаблона к нему.

Затем я перехожу к конфигурации доверия, где я вижу разделы SCIA (также называемые SAP Cloud Identity) и Neo.Последнее я настроил, когда настроил принцип распространения от Neo до CF.Я могу зайти в любой аккаунт и ввести адрес электронной почты моего пользователя.Затем я могу назначить свою коллекцию ролей пользователю (мне).

Проблема в том, что все, что я здесь делаю, не позволяет мне пройти новую проверку безопасности.Я всегда получаю следующее сообщение при попытке доступа к защищенному пути: Access deniedaccess_denied

Как мне назначить эту роль?Я использую адрес электронной почты, потому что это обычно идентификатор в CF?Должен ли я делать что-то на пространстве или даже на уровне приложения?Нужно ли перепривязывать службу XSUAA или что-то еще?

Я тестирую в браузере.Если у меня еще нет сеанса, он заставляет меня войти в систему. Незащищенный сервис по-прежнему работает нормально.

ПРИЛОЖЕНИЕ: Вот полезная нагрузка JWT.Похоже, у меня есть возможности из роли:

{
  "jti": "aa4f13c4c456429ab7d7f**218b1ef86",
  "ext_attr": {
    "enhancer": "XSUAA",
    "zdn": "test**n"
  },
  "given_name": "P0000**",
  "xs.user.attributes": {},
  "family_name": "unknown.org",
  "sub": "123526eb-fda8-49cf-a507-506**d28efba",
  "scope": [
    "s4projectcreate!t23.AdminApprove",
    "openid",
    "s4projectcreate!t23.RiskApprove",
    "uaa.user"
  ],
  "client_id": "sb-s4projectcreate!t23",
  "cid": "sb-s4projectcreate!t23",
  "azp": "sb-s4projectcreate!t23",
  "grant_type": "urn:ietf:params:oauth:grant-type:saml2-bearer",
  "user_id": "1235**eb-fda8-49cf-a507-506b8d28efba",
  "origin": "httpsap1.hana.ondemand.comc3d8**a55",
  "user_name": "p0000**",
  "email": "P0000**@unknown.org",
  "rev_sig": "8f**7376",
  "iat": 1552347533,
  "exp": 1552390733,
  "iss": "http://test**n.localhost:8080/uaa/oauth/token",
  "zid": "382217ca-6332-4b03-85ee-8f**85fd903a",
  "aud": []
}
...