0

我想根据凭证的范围强制在 req.body 中添加一个文件。我有 2 个应用程序(App1 和 App2),根据谁在使用我的 API,我想以编程方式在请求中添加一个字段。所以 App1 的凭证有范围app1,并且app2在 App2 的范围内。

此外,我有 2 个具有不同端点的环境。两个应用程序都可以访问两端(使用不同的凭据)。所以我首先选择Env(使用dev_envmy_env范围),然后我验证哪个App正在访问(检查app1app2范围)。

为此,我使用表达式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' 不见了!

==== 更新 1 如果req.body.available_scopes我在字段中输入“消费者”,我得到了这个:

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

所以它谈到“authorizedScopes”,其他人在哪里?我怎么能看到他们?谢谢

4

1 回答 1

0

您已经为 apiEndpoints myEndpoint 和 devEndpoint (分别)指定了范围my_envdev_env并且这些是 Express Gateway 希望您关心的唯一范围,因此与用户/应用程序凭据关联的其他范围不会公开。

您可以将 app1 和 app2 范围添加到配置文件中的每个路径,然后根据为连接应用程序的凭据设置的范围执行操作:

apiEndpoints:
  myEndpoint:
    host: "*"
    scopes: ["my_env","app1","app2"]

  devEndpoint:
    host: "*"
    scopes: ["dev_env","app1","app2"] 
于 2020-12-05T19:04:40.397 回答