In-Band Authentication یکی از بهترین روشها برای احراز هویت در WebSocket است. در این روش، احراز هویت پس از برقراری اتصال WebSocket انجام میشود و پیامهای ابتدایی شامل اطلاعات کاربری یا توکن میشوند. این روش به ویژه برای سیستمهایی که نیاز به تأیید اعتبار قبل از اجازه به ارسال دادهها دارند مناسب است.
مزایای In-Band Authentication
- اطلاعات حساس در URL یا هدر ارسال نمیشود، بنابراین امنیت بالاتر است.
- میتوان بعد از اتصال چندین مرحله احراز هویت را انجام داد (مثلاً اعتبارسنجی دو مرحلهای).
- امکان مدیریت زمانبندی و محدودیت دسترسی برای کاربران فراهم میشود.
نمونه سرور FastAPI با In-Band Authentication
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
VALID_TOKENS = {"token123": "user1", "token456": "user2"}
app = FastAPI()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
try:
# پیام اول باید شامل توکن باشد
token_message = await websocket.receive_text()
token = token_message.strip()
if token not in VALID_TOKENS:
await websocket.send_text("Invalid token, closing connection.")
await websocket.close(code=1008)
return
username = VALID_TOKENS[token]
await websocket.send_text(f"Welcome {username}!")
# ادامه دریافت و ارسال پیامها
while True:
data = await websocket.receive_text()
await websocket.send_text(f"{username} sent: {data}")
except WebSocketDisconnect:
print("Client disconnected")
نمونه کلاینت پایتون با In-Band Authentication
import asyncio
import websockets
TOKEN = "token123"
uri = "ws://127.0.0.1:8000/ws"
async def websocket_client():
async with websockets.connect(uri) as websocket:
# ارسال توکن به سرور پس از اتصال
await websocket.send(TOKEN)
welcome = await websocket.recv()
print(f"Server: {welcome}")
while True:
message = input("Enter your message: ")
await websocket.send(message)
response = await websocket.recv()
print(f"Server response: {response}")
asyncio.run(websocket_client())
توضیح:
- در این روش، کلاینت ابتدا یک پیام شامل توکن یا اطلاعات احراز هویت به سرور ارسال میکند.
- سرور توکن دریافتی را بررسی کرده و در صورت معتبر بودن، اتصال را ادامه میدهد.
- در صورت نامعتبر بودن توکن، سرور پیام خطا ارسال کرده و اتصال را میبندد.
- این روش امکان اعمال سیاستهای امنیتی بیشتر مانند انقضای توکن و مدیریت چندمرحلهای را فراهم میکند.