احراز هویت با Header و Subprotocol در WebSocket

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/06/25
  • تعداد بازدید: 2

یکی از روش‌های امن احراز هویت در WebSocket استفاده از هدرهای سفارشی یا Subprotocols است. در این روش کلاینت هنگام اتصال، هدرهای احراز هویت یا یک پروتکل خاص را مشخص می‌کند و سرور قبل از پذیرش اتصال آن‌ها را بررسی می‌کند.

نمونه سرور FastAPI با بررسی هدر Authorization

from fastapi import FastAPI, WebSocket, WebSocketDisconnect, Header
from fastapi.responses import JSONResponse

app = FastAPI()

VALID_TOKEN = "mysecuretoken"

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket, authorization: str = Header(None)):
    # بررسی هدر Authorization
    if authorization != f"Bearer {VALID_TOKEN}":
        await websocket.close(code=1008)
        return
    await websocket.accept()
    try:
        while True:
            data = await websocket.receive_text()
            await websocket.send_text(f"Server received: {data}")
    except WebSocketDisconnect:
        print("Client disconnected")

نمونه کلاینت پایتون با ارسال هدر Authorization

import asyncio
import websockets

TOKEN = "mysecuretoken"
uri = "ws://127.0.0.1:8000/ws"

async def websocket_client():
    async with websockets.connect(uri, extra_headers={"Authorization": f"Bearer {TOKEN}"}) as websocket:
        print("Connected to server with Authorization header!")
        while True:
            message = input("Enter your message: ")
            await websocket.send(message)
            response = await websocket.recv()
            print(f"Server response: {response}")

asyncio.run(websocket_client())

استفاده از Subprotocol برای احراز هویت

WebSocket امکان تعریف Subprotocol دارد. کلاینت می‌تواند هنگام اتصال یک پروتکل مشخص (مثلاً token-auth) انتخاب کند و سرور قبل از پذیرش اتصال آن را بررسی کند.

# کلاینت با Subprotocol
async with websockets.connect(uri, subprotocols=["token-auth"]) as websocket:
    ...

توضیح:

  • هدرهای Authorization یا Subprotocol می‌توانند برای ارسال توکن یا کلیدهای امنیتی استفاده شوند.
  • سرور با بررسی هدرها یا Subprotocol تصمیم می‌گیرد که اتصال را بپذیرد یا نه.
  • این روش نسبت به query parameter امن‌تر است زیرا اطلاعات حساس در URL ظاهر نمی‌شود.

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.