方案概述
- 登錄FunctionGraph控制臺,創建函數,并將其定義為自定義認證函數。
- 登錄FunctionGraph控制臺,創建一個業務函數。
- 購買APIG專享版實例,并在其中創建一個API分組,用來存放API。
- 創建一個鑒權方式為自定義認證且后端為FunctionGraph的API。
- 調試API。
構建程序
創建API分組
創建函數及添加事件源之前,需要先創建一個API分組,API分組是API的管理單元,用來存放API。
- 登錄APIG控制臺,右上角單擊“立即購買專享版”,配置詳情請參見《API網關(APIG) 快速入門》的“購買專享版實例”章節。
- 選擇已創建的APIG專享版實例,并在導航欄選擇“API管理 > API分組”,單擊“創建API分組”。
- 選擇直接創建,設置以下分組信息,完成后單擊“確定”創建分組。
- 輸入您自定義的分組名稱,例如APIGroup_test。
- 描述:輸入對分組的描述。
創建自定義認證函數
前端自定義認證指APIG利用校驗函數對收到的API請求進行安全認證,如果您想要使用自己的認證系統對API的訪問進行認證鑒權,您可以在API管理中創建一個前端自定義認證來實現此功能。您需要先在FunctionGraph創建一個函數,通過函數定義您所需的認證信息,函數創建成功后,即可對API網關中的API進行認證鑒權。本示例以Header中的請求參數:event["headers"],為例進行演示。
-
進入函數工作流控制臺后,在左側導航欄選擇“函數 > 函數列表”,進入函數列表界面。
-
單擊“創建函數”,進入創建函數流程。
-
填寫函數配置信息,完成后單擊“創建函數”。
- 模板:選擇“使用空白模板”。
- 函數類型:事件函數。
- 函數名稱:輸入您自定義的函數名稱,例如:apig-test。
- 委托名稱:選擇“未使用任何委托”。
- 運行時語言:選擇“Python 2.7”。
-
進入函數詳情頁,在“代碼”頁簽,進行代碼在線編輯。
-
配置測試事件,測試用于前端自定義認證的函數。單擊“配置測試事件”,選擇事件模板。根據實際情況修改后保存測試模板(本示例在"headers"中添加"auth":"abc"),完成后單擊“創建”。
圖 配置測試事件
-
單擊“測試”,執行結果為“成功”時,表示自定義認證函數創建成功。
創建自定義認證
在APIG中創建自定義認證,對接前端自定義認證的函數。
- 選擇已創建的APIG專享版實例,并在航欄選擇“API管理 > API策略”,在“自定義認證”頁簽下,單擊“創建自定義認證”,彈出“創建自定義認證”對話框。
- 配置自定義認證基礎信息,如下圖所示。
- 認證名稱:輸入您自定義的名稱,例如Authorizer_test。
- 類型:選擇“前端”。
- 函數地址:請選擇用于前端自定義認證的函數apig-test。
- 完成后單擊“確定”,完成自定義認證的創建。
創建后端業務函數
API網關(APIG)支持選擇FunctionGraph作為后端服務類型,當請求設置函數工作流為后端服務的API時,API網關會觸發相應的函數,函數工作流會將執行結果返回給API網關(APIG)。
- 創建函數方法與上述創建自定義認證函數相同,只需修改函數名稱,避免名稱重復。
- 在函數詳情頁的“代碼”頁簽,進行代碼在線編輯,并傳入如下所示的代碼,完成后單擊“部署”,更新函數。
-- coding:utf-8 --
import json
def handler (event, context):
body ="<html><title>Functiongraph Demo</title><body><p>Hello,
FunctionGraph!</p></body></html>"
print(body)
return {
"statusCode":200,
"body":body,
"headers": {
"Content-Type":"text/html",
},
"isBase64Encoded":False
}
請求參數代碼定義示例
在FunctionGraph中開發函數,以python2.7語言為例,函數代碼需要滿足如下條件。函數有明確的接口定義,如下所示:
-
def handler (event, context)
- 入口函數名(handler):入口函數名稱,需和函數執行入口處用戶自定義的入口函數名稱一致。
- 執行事件(event): 函數執行界面由用戶輸入的執行事件參數,格式為JSON對象。
- 上下文環境(Context):Runtime提供的函數執行上下文,其接口定義在SDK接口說明,詳情請參見《函數工作流(FunctionGraph) 用戶指南》的“Python > 開發事件函數”章節。
-
執行事件(event)支持三種請求參數定義,格式為:
- Header中的請求參數:event["headers"]["參數名"]
- Query中的請求參數:event["queryStringParameters"]["參數名"]
- 您自定義的用戶數據:event["user_data"]
-
函數代碼獲取的三種請求參數與API網關自定義認證中的參數關系如下所示:
- Header中的請求參數:對應自定義認證中參數位置為Header的身份來源,其參數值在您調用使用該前端自定義認證的API時傳入
- Query中的請求參數:對應自定義認證中參數位置為Query的身份來源,其參數值在您調用使用該前端自定義認證的API時傳入
- 您自定義的用戶數據:對應自定義認證中的用戶數據,其參數值在您創建自定義認證時輸入
- 函數的返回值不能大于1M,必須滿足如下格式:
{ "statusCode":200, "body":"{\"status\": \"allow\", \"context\":{\"user\": \"abc\"}}" }
其中,body字段的內容為字符串格式,json解碼之后為:
{
"status":"allow/deny",
"context": {
"user": "abc"
}
}
“status”字段為必選,用于標識認證結果。只支持“allow”或“deny”,“allow”表示認證成功,“deny”表示認證失敗。“context”字段為可選,只支持字符串類型鍵值對,鍵值不支持JSON對象或數組。context中的數據為您自定義的字段,認證通過后作為認證參數映射到API網關后端參數中,其中context中的參數名稱與系統參數名稱必須完全一致,且區分大小寫,context中的參數名稱必須以英文字母開頭,支持英文大小寫字母、數字、下劃線和中劃線,且長度為1 ~ 32個字符。
添加事件源
創建API
API分組、自定義認證函數、后端函數均創建成功以后,可以創建API,設置安全認證為自定義認證,并定義后端服務類型為FunctionGraph,步驟如下。
- 登錄APIG控制臺,選擇已創建的APIG專享版實例,并在導航欄選擇“API管理 > API列表”,單擊右上方的“創建API”。
- 配置API基本信息。
- API名稱:輸入您自定義的名稱,例如API_test。
- 所屬分組:請選擇上述操作中創建的API分組“APIGroup_test”。
- URL:請求方法選擇“ANY”,請求協議選擇“HTTPS”,請求路徑填寫“/testAPI”。
- 網關響應:選擇“default”。
- 安全認證:選擇“自定義認證”。
- 自定義認證:選擇上述操作中創建的自定義認證“Authorizer_test”。
- 單擊“下一步”,進行后端配置。
- 后端服務類型:選擇“FunctionGraph”
- 函數URN:添加創建的業務函數
- 版本或別名:選擇“latest”版本
- 調用類型:選擇“Synchronous”
- 單擊下一步,完成API創建。
- 繼續在當前頁面,單擊“發布”,將已創建的API發布至RELEASE環境。
調試并調用API
API網關提供了在線調試的功能,因此一般建議在API網關上完成API配置之后,可以先通過此功能確認API是否配置成功。
- 登錄APIG控制臺,選擇已創建的APIG專享版實例,并左導航欄選擇“API管理 > API列表”,單擊進入已創建的API“API_test”,右上角單擊“調試”。
- 在本案例中,需要添加Headers參數,完成后單擊“調試”。
- 參數名:輸入“auth”
- 參數值:輸入“abc”
- API返回內容即為前面步驟中創建的業務函數返回內容。