Update asgi_app.py
This commit is contained in:
+11
-27
@@ -130,35 +130,19 @@ async def mcp_protocol_handler(request: Request):
|
|||||||
from clerk_backend_api import Clerk
|
from clerk_backend_api import Clerk
|
||||||
clerk = Clerk(bearer_auth=os.getenv("CLERK_SECRET_KEY"))
|
clerk = Clerk(bearer_auth=os.getenv("CLERK_SECRET_KEY"))
|
||||||
|
|
||||||
# Validate Clerk JWT token using authenticate_request
|
# Validate Clerk JWT token directly
|
||||||
import httpx
|
jwt_claims = clerk.jwt_templates.verify_token(token)
|
||||||
from clerk_backend_api.security import authenticate_request
|
user_id = jwt_claims.get("sub")
|
||||||
from clerk_backend_api.security.types import AuthenticateRequestOptions
|
|
||||||
|
|
||||||
# Create a mock request with the Bearer token
|
|
||||||
mock_request = httpx.Request(
|
|
||||||
method="POST",
|
|
||||||
url="https://api.yargimcp.com/mock",
|
|
||||||
headers={"Authorization": f"Bearer {token}"}
|
|
||||||
)
|
|
||||||
|
|
||||||
request_state = clerk.authenticate_request(
|
|
||||||
mock_request,
|
|
||||||
AuthenticateRequestOptions()
|
|
||||||
)
|
|
||||||
|
|
||||||
if request_state.is_signed_in:
|
|
||||||
# Get user info from token payload
|
|
||||||
payload = getattr(request_state, 'payload', {})
|
|
||||||
|
|
||||||
|
if user_id:
|
||||||
# Extract user information from JWT payload
|
# Extract user information from JWT payload
|
||||||
user_email = payload.get('email') # Primary identifier
|
user_email = jwt_claims.get('email') # Primary identifier
|
||||||
user_name = payload.get('name')
|
user_name = jwt_claims.get('name')
|
||||||
user_plan = payload.get('plan', 'free') # Default to free plan
|
user_plan = jwt_claims.get('plan', 'free') # Default to free plan
|
||||||
scopes = payload.get('scopes', ['yargi.read'])
|
scopes = jwt_claims.get('scopes', ['yargi.read'])
|
||||||
|
|
||||||
# Use email as primary user identifier
|
# Use email as primary user identifier if available
|
||||||
user_id = user_email or request_state.user_id
|
user_id = user_email or user_id
|
||||||
|
|
||||||
logger.info(f"Clerk JWT token validated successfully")
|
logger.info(f"Clerk JWT token validated successfully")
|
||||||
logger.info(f"User: {user_email}")
|
logger.info(f"User: {user_email}")
|
||||||
@@ -172,7 +156,7 @@ async def mcp_protocol_handler(request: Request):
|
|||||||
request.state.user_plan = user_plan
|
request.state.user_plan = user_plan
|
||||||
request.state.token_scopes = scopes
|
request.state.token_scopes = scopes
|
||||||
else:
|
else:
|
||||||
logger.warning(f"Clerk JWT token validation failed. Reason: {getattr(request_state, 'reason', 'UNKNOWN')}")
|
logger.warning(f"Clerk JWT token validation failed - no user_id in claims")
|
||||||
user_id = None
|
user_id = None
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"Clerk Bearer token validation failed: {str(e)}")
|
logger.warning(f"Clerk Bearer token validation failed: {str(e)}")
|
||||||
|
|||||||
Reference in New Issue
Block a user