我想根据凭证的范围强制在 req.body 中添加一个文件。我有 2 个应用程序(App1 和 App2),根据谁在使用我的 API,我想以编程方式在请求中添加一个字段。所以 App1 的凭证有范围app1
,并且app2
在 App2 的范围内。
此外,我有 2 个具有不同端点的环境。两个应用程序都可以访问两端(使用不同的凭据)。所以我首先选择Env(使用dev_env
或my_env
范围),然后我验证哪个App正在访问(检查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' 不见了!
==== 更新 1 如果req.body.available_scopes
我在字段中输入“消费者”,我得到了这个:
{
"type": "application",
"isActive": true,
"id": "....",
"userId": "...",
"name": "...",
"company": "...",
"authorizedScopes": [
"my_env"
]
}
所以它谈到“authorizedScopes”,其他人在哪里?我怎么能看到他们?谢谢