Express -Gateway: отсутствуют области в egContext - apiEndpoint.scopes - PullRequest
0 голосов
/ 06 марта 2020

Я хочу принудительно добавить поле в req.body, в соответствии с областью полномочий. У меня есть 2 приложения (App1 и App2), и в зависимости от того, кто использует мой API, я хочу программно добавить поле в запросе. Таким образом, учетные данные App1 имеют область действия app1 и app2 в областях действия App2.

Кроме того, у меня есть 2 среды с разными конечными точками. Оба приложения имеют доступ к обоим концам (используя разные учетные данные). Поэтому сначала я выбираю Env (используя область действия dev_env или my_env), затем проверяю, к какому приложению осуществляется доступ (проверяя область действия app1 или app2).

Для этого я использую выражение apiEndpoint.scopes.indexOf('app1')>=0. это на самом деле не работает, так как условие всегда false . Поэтому для отладки я помещаю содержимое apiEndpoint.scopes в качестве дополнительного поля в req.body, чтобы увидеть, что в этом есть.

И я вижу, что apiEndpoint.scopes имеет только ["my_env"], а не "app1". Почему?

Итак, у меня есть

http:
  port: ${PORT:-8080}
  host: ${HOST:-localhost} 
apiEndpoints:
  myEndpoint:
    host: "*"
    scopes: ["my_env"] # I explain just this one here
  devEndpoint:
    host: "*"
    scopes: ["dev_env"] 
serviceEndpoints:
  myEndpoint:
    url:  'https://myserver'
policies:
  - basic-auth
  - cors
  - expression
  - key-auth
  - request-transformer
  - rewrite
  - oauth2
  - proxy
  - rate-limit 
pipelines:
  myEndpoint: 
    apiEndpoints:
      - myEndpoint
    policies:
      - request-transformer:  
        - 
           condition:
             name: allOf
             conditions:      
                 - # check if scope 'app1' is present. expression not working
                   #name: expression
                   #expression: "apiEndpoint.scopes.indexOf('app1')>=0"
          action:
            body:
              add:
                available_scopes: "apiEndpoint.scopes" # debug of available scopes.    

И содержание req.body:

{"available_scopes": ["my_env"]}

'app1' отсутствует!

= === update 1 Если в поле req.body.available_scopes я поставил "потребитель", я получил это:

{
"type": "application",
"isActive": true,
"id": "....",
"userId": "...",
"name": "...",
"company": "...",
"authorizedScopes": [
      "my_env"
    ]
}

Так что это говорит о "авторизованных областях", где остальные? Как я мог их увидеть? Спасибо

...