簡體   English   中英

通過 fiware orion 上下文代理調用外部 API 以使用 keyrock 進行驗證

[英]Calling external APIs through fiware orion context broker to validate using keyrock

我是一名學生,正在從事一個項目並探索為此使用 fiware 的可行性。 到目前為止,我已經了解到要調用外部 API,我們可以使用實體的注冊來獲取動態數據。

這是情況:

在我的項目中,我調用外部 API 在前端獲取一些數據。

我想為用戶添加訪問控制,以便在不允許的情況下限制他們調用 API。 出於這個原因,我試圖找到一種方法,使 keyrock 可以驗證請求,這樣我就不必手動驗證這些外部 API。 由於這些與任何實體無關,我不想為此目的使用注冊。

我打算通過keyrock本身進行用戶管理。 目前keyrock可以根據應用的資源(即URL路徑)和權限進行限制。 此時我很困惑,如果我在任何頁面添加一個 API 調用以從外部 API 獲取數據,在這種情況下如何使用 keyrock 訪問控制。

另外,我可以讓 orion 以某種方式調用外部 API 並使數據成為實體嗎?

非常感謝任何幫助和提示。 提前致謝。

注冊是一個合同,返回一系列連接到實體的屬性,如何連接到外部 API 由您決定。 NGSI v2 教程中有一個帶注釋的示例 - 該代碼也可用於NGSI-LD ,但 NGSI-LD 的文檔需要更新以反映 NGSI-LD 1.6.1 中所做的某些最新更改和說明

不管你使用的是哪個版本的NGSI,調用外部API的步驟都是一樣的。

  1. 創建一個帶有處理程序的代理服務來處理一個或多個 NGSI 端點 - 對於 NGSI-v2 這通常是批處理端點/op/query ,對於 NGSI-LD 我建議/ngsi-ld/v1/entities/<id>

  2. 創建從您的上下文代理到此代理的注冊,例如 NGSI-v2:

curl -iX POST \
  'http://localhost:1026/v2/registrations' \
  -H 'Content-Type: application/json' \
  -d '{
  "description": "Random Weather Conditions",
  "dataProvided": {
    "entities": [
      {
        "id": "urn:ngsi-ld:Store:001",
        "type": "Store"
      }
    ],
    "attrs": [
      "relativeHumidity"
    ]
  },
  "provider": {
    "http": {
      "url": "http://location/of/the/proxy/interface"
    }
  }
}'

請注意,您還可以使用自定義標頭或注釋 URL 或其他任何路徑來傳遞其他自定義信息。

  1. 在代理代碼中向第三方 API 發出請求並將響應轉換回 NGSI 格式。 教程示例解釋了如何連接到TwitterCat Facts作為示例。

我想為用戶添加訪問控制,以便在不允許的情況下限制他們調用 API。

這純粹是在調用注冊人之前放置一個 PEP 代理的問題。 想象一下像這樣的上下文代理請求Kong

curl -X GET \
  http://localhost:8000/orion/v2/entities/urn:ngsi-ld:Store:001?options=keyValues \
  -H 'Authorization: Bearer {{X-Access-token}}'

您可以將 PEP 放在上下文代理的前面(在這種情況下,只有在您擁有適當的權限時才會返回實體,或者您將 PEP 放在您的注冊人 web 服務前面,在這種情況下,屬性只會附加到實體,如果你有適當的權限。請注意,需要配置上下文代理注冊以確保Authorization header 也將傳遞給注冊人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM