設定密碼保護你的 FastAPI Docs|抬升 Raise

更新於 發佈於 閱讀時間約 5 分鐘
這篇文章要教你如何透過權限控管,保護 FastAPI 生成的 API 文件,讓使用者需要經過授權才能進去

FastAPI 是一個 Python 的後端框架,具有自動生成 API 文件頁面的特色,幫助開發者可以快速開發並測試 API。

然而,這些文件會隨著伺服器的部署,一同被公開到網路上。如果你想要避免閒雜人等進入 API 文件,可以參考以下的步驟:

1. 關閉預設 API Docs

透過在創建 App 時加上以下變數,可以關閉預設 API 文件功能。

from fastapi import FastAPI
app = FastAPI(docs_url=None, redoc_url=None, openapi_url = None)

2. 新增 HTTP Basic Auth 帳號密碼驗證

透過下列程式,我們新增一個驗證物件供 API 使用。
只要在建立 API 時加上這個物件,就會需要經過帳號密碼驗證才能使用該 API

import secrets
from fastapi import Depends, FastAPI, HTTPException, status
from fastapi.security import HTTPBasic, HTTPBasicCredentials


security = HTTPBasic()

def get_current_username(credentials: HTTPBasicCredentials = Depends(security)):
correct_username = secrets.compare_digest(credentials.username, "user")
correct_password = secrets.compare_digest(credentials.password, "password")
if not (correct_username and correct_password):
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect email or password",
headers={"WWW-Authenticate": "Basic"},
)
return credentials.username

3. 成立文件後台的 API 並加上驗證機制

我們手動撰寫生成文件後台與 OpenAPI.json 的 API 並加上授權驗證

from fastapi.openapi.docs import get_swagger_ui_html
from fastapi.openapi.utils import get_openapi

@app.get("/docs", include_in_schema=False)
async def get_documentation(username: str = Depends(get_current_username)):
return get_swagger_ui_html(openapi_url="/openapi.json", title="docs")


@app.get("/openapi.json", include_in_schema=False)
async def openapi(username: str = Depends(get_current_username)):
return get_openapi(title = "FastAPI", version="0.1.0", routes=app.routes)

4. 完成,運行服務並至 /docs 登入查看文件

如果依照上面的範例,帳號是 user,密碼是 password,請視情況更改帳號密碼,或運用環境變數、設定檔導入。

成功的話你會看到如下圖的畫面

raw-image

完整程式碼

Originally published at https://tsraise.com on March 5, 2021.

留言
avatar-img
留言分享你的想法!
avatar-img
抬升 Raise的沙龍
1會員
13內容數
抬升 Raise的沙龍的其他內容
2021/08/14
在 7/31–8/1 兩天 我去參加 COSCUP 開源人年會 這篇是除講者與會眾之外的雜談 首先是「#雨傘 」,這次有聽眾觀察敏銳,注意到我在演講時「拿著一把雨傘」,這是我練演講的小秘密,把自己制約,練演講時,我習慣手上拿個像麥克風的東西(雨傘),這樣真的演講拿起麥克風時,手就能固定在對的位置,
Thumbnail
2021/08/14
在 7/31–8/1 兩天 我去參加 COSCUP 開源人年會 這篇是除講者與會眾之外的雜談 首先是「#雨傘 」,這次有聽眾觀察敏銳,注意到我在演講時「拿著一把雨傘」,這是我練演講的小秘密,把自己制約,練演講時,我習慣手上拿個像麥克風的東西(雨傘),這樣真的演講拿起麥克風時,手就能固定在對的位置,
Thumbnail
2021/08/13
在 7/31–8/1 兩天 我去參加 COSCUP 開源人年會 並且講了三場議程 本來只抱持「一定要上 COSCUP 講」 所以把工作研究(區塊鏈)、專題研究(Chatbot)、學校專業(教育)三部分各投一場,期待至少能錄取一場, 沒想到三場都上了!
Thumbnail
2021/08/13
在 7/31–8/1 兩天 我去參加 COSCUP 開源人年會 並且講了三場議程 本來只抱持「一定要上 COSCUP 講」 所以把工作研究(區塊鏈)、專題研究(Chatbot)、學校專業(教育)三部分各投一場,期待至少能錄取一場, 沒想到三場都上了!
Thumbnail
2021/08/12
在 7/31 – 8/1 兩天 我去參加 COSCUP 開源人年會 講議程之餘,我也當會眾到處參與活動 這篇是記錄我當會眾聽演講的心得  首先,看影片真的方便很多,我習慣放一陣子再看,所以懂的部分可以加速,不懂的部分可以回放,且業配的部分可以跳過😂 可惜時間到之後,議程就變私人影片了,我這兩天都遇
Thumbnail
2021/08/12
在 7/31 – 8/1 兩天 我去參加 COSCUP 開源人年會 講議程之餘,我也當會眾到處參與活動 這篇是記錄我當會眾聽演講的心得  首先,看影片真的方便很多,我習慣放一陣子再看,所以懂的部分可以加速,不懂的部分可以回放,且業配的部分可以跳過😂 可惜時間到之後,議程就變私人影片了,我這兩天都遇
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」稍微帶大家認識了FastAPI這個框架, 它讓我們快速的架設一個API服務, 並提供了許多標準化功能, 只要照著規範走就能快速的開發出來, 但開發出來之後, 我們會希望開放給一般使用者使用, 而一般使用者較能夠操作的媒介
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」稍微帶大家認識了FastAPI這個框架, 它讓我們快速的架設一個API服務, 並提供了許多標準化功能, 只要照著規範走就能快速的開發出來, 但開發出來之後, 我們會希望開放給一般使用者使用, 而一般使用者較能夠操作的媒介
Thumbnail
API是我們與其他系統介接的標準化規格, 那一份好的規格勢必要能夠達到引導與驗證的作用, 避免對方介接錯誤, 引發後續的災難性損失, 因此這一章節就是要教我們如何定義每個API的欄位怎麼填? 資料型態是什麼? 以及如何生成API文件。 我們在「【🔒 Python API框架篇 - Fas
Thumbnail
API是我們與其他系統介接的標準化規格, 那一份好的規格勢必要能夠達到引導與驗證的作用, 避免對方介接錯誤, 引發後續的災難性損失, 因此這一章節就是要教我們如何定義每個API的欄位怎麼填? 資料型態是什麼? 以及如何生成API文件。 我們在「【🔒 Python API框架篇 - Fas
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有分享 FastAPI 這套API框架, 那麼當我們想要在應用程式剛執行時就註冊一些事件或者共享GPU運算模型、變數…等,當整個應用程式關閉時也進行釋放作業, 這樣的一個週期循環就是所謂的生命週期, 而在FastAPI這
Thumbnail
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有分享 FastAPI 這套API框架, 那麼當我們想要在應用程式剛執行時就註冊一些事件或者共享GPU運算模型、變數…等,當整個應用程式關閉時也進行釋放作業, 這樣的一個週期循環就是所謂的生命週期, 而在FastAPI這
Thumbnail
還在苦惱怎麼樣把你的檔案上傳到Github嗎?這裡教大家簡單上傳你的檔案可以沿用到如何上傳整體專案到Github並展示你的作品集
Thumbnail
還在苦惱怎麼樣把你的檔案上傳到Github嗎?這裡教大家簡單上傳你的檔案可以沿用到如何上傳整體專案到Github並展示你的作品集
Thumbnail
上一篇我們有介紹什麼是OPA以及一些基本概念「【資訊軟體知識】Open Policy Agent 授權策略」,接下來我們就來介紹如何架設並以API的方式進行授權檢查。 這種方式的好處是可以跨語言, 不侷限於Go, 透過標準RESTFUL API的方式來與OPA Server相互溝通。 使用Docke
Thumbnail
上一篇我們有介紹什麼是OPA以及一些基本概念「【資訊軟體知識】Open Policy Agent 授權策略」,接下來我們就來介紹如何架設並以API的方式進行授權檢查。 這種方式的好處是可以跨語言, 不侷限於Go, 透過標準RESTFUL API的方式來與OPA Server相互溝通。 使用Docke
Thumbnail
Bitly是一個常見的短連結平台,提供所有使用者把原始網址轉換成較為簡短的連結字數,同時該平台也提供API給使用者串接使用 大概看過官方提供的api文件,算是功能齊全,只要本身帳號權限夠高,所有操作皆可在API中進行 自己也是有少量使用過bitly平台,那就嘗試動手串接一下API看看 取得通行證(A
Thumbnail
Bitly是一個常見的短連結平台,提供所有使用者把原始網址轉換成較為簡短的連結字數,同時該平台也提供API給使用者串接使用 大概看過官方提供的api文件,算是功能齊全,只要本身帳號權限夠高,所有操作皆可在API中進行 自己也是有少量使用過bitly平台,那就嘗試動手串接一下API看看 取得通行證(A
Thumbnail
講完 get 來講 post,那這兩個 call api 的方法有什麼差別呢?先記得一個原則,要傳遞機密的資料用 post,如果要傳遞的參數被別人知道也無所謂就用 get post 是傳遞資料到後台,資料不會顯示在 url 上,get 是傳遞參數到後台,參數會直接顯示在 url 上和後端的終端上,像
Thumbnail
講完 get 來講 post,那這兩個 call api 的方法有什麼差別呢?先記得一個原則,要傳遞機密的資料用 post,如果要傳遞的參數被別人知道也無所謂就用 get post 是傳遞資料到後台,資料不會顯示在 url 上,get 是傳遞參數到後台,參數會直接顯示在 url 上和後端的終端上,像
Thumbnail
Restful API 其實就是開放一個 EndPoit 的網路接口給其他人使用,並將要做的事情封裝在該接口內,不需要知道真實運作狀況,只要得到答案即可。
Thumbnail
Restful API 其實就是開放一個 EndPoit 的網路接口給其他人使用,並將要做的事情封裝在該接口內,不需要知道真實運作狀況,只要得到答案即可。
Thumbnail
網址是 API 的門面,大家使用 API 的第一步就是要看它。 第一眼就要讓人就知道這隻 API 在做什麼? 甚至因為遵循標準(目前 REST 是主流),可以類推 API 應該會有什麼功能等等。
Thumbnail
網址是 API 的門面,大家使用 API 的第一步就是要看它。 第一眼就要讓人就知道這隻 API 在做什麼? 甚至因為遵循標準(目前 REST 是主流),可以類推 API 應該會有什麼功能等等。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News