Skip to content

Commit c9e3daf

Browse files
Fix auth validation to fail closed when user has no scopes
1 parent 9ccbda6 commit c9e3daf

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

auth_server/server.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,7 @@ async def validate_request(request: Request):
725725

726726
# Validate scope-based access if we have server/tool information
727727
user_scopes = validation_result.get('scopes', [])
728-
if request_payload and server_name and tool_name and user_scopes:
728+
if request_payload and server_name and tool_name:
729729
# Extract method and actual tool name
730730
method = tool_name # The extracted tool_name is actually the method
731731
actual_tool_name = None
@@ -737,6 +737,15 @@ async def validate_request(request: Request):
737737
actual_tool_name = params.get('name')
738738
logger.info(f"Extracted actual tool name for tools/call: '{actual_tool_name}'")
739739

740+
# Check if user has any scopes - if not, deny access (fail closed)
741+
if not user_scopes:
742+
logger.warning(f"Access denied for user {validation_result.get('username')} to {server_name}.{method} (tool: {actual_tool_name}) - no scopes configured")
743+
raise HTTPException(
744+
status_code=403,
745+
detail=f"Access denied to {server_name}.{method} - user has no scopes configured",
746+
headers={"Connection": "close"}
747+
)
748+
740749
if not validate_server_tool_access(server_name, method, actual_tool_name, user_scopes):
741750
logger.warning(f"Access denied for user {validation_result.get('username')} to {server_name}.{method} (tool: {actual_tool_name})")
742751
raise HTTPException(

0 commit comments

Comments
 (0)