You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OneAuth/scripts/tests/00_none_auth.sh

68 lines
1.8 KiB
Bash

#!/bin/bash
#
# 未登录访问测试
# 测试内容:验证受保护接口在未登录状态下拒绝访问
#
set -e
# 加载公共库
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/lib.sh"
test_start "未登录访问测试 (None Auth)"
# 检查服务
check_service
# 定义要测试的受保护接口列表
# 格式: "METHOD PATH [BODY]"
PROTECTED_ENDPOINTS=(
"GET /api/auth/me"
"POST /api/auth/logout {}"
"GET /api/users"
"POST /api/users {}"
"GET /api/orgs"
"POST /api/orgs {}"
"GET /api/roles"
"POST /api/roles {}"
"GET /api/settings"
"GET /api/oauth/clients"
"GET /api/oauth/providers"
)
# 遍历测试
for endpoint in "${PROTECTED_ENDPOINTS[@]}"; do
read -r method path body <<< "$endpoint"
step "测试 $method $path (未登录)"
if [ "$method" == "GET" ]; then
RES=$(api_get "$path" "")
elif [ "$method" == "POST" ]; then
RES=$(api_post "$path" "${body:-{}}" "")
elif [ "$method" == "PATCH" ]; then
RES=$(api_patch "$path" "${body:-{}}" "")
elif [ "$method" == "DELETE" ]; then
RES=$(api_delete "$path" "")
fi
# 提取状态码
# 注意Vigo 框架可能返回 HTTP 401 或 JSON code 40100
# check_http_code 默认提取 JSON 中的 code
code=$(echo "$RES" | jq -r '.code // 200')
# 允许 401 (Standard HTTP) 或 40100 (Vigo Unauthorized)
if [[ "$code" == "401" || "$code" == "40100" ]]; then
success "访问被拒绝 (Code: $code)"
else
error "期望 401/40100, 实际: $code"
info "响应: $RES"
# 标记失败但不立即退出,以便测试所有接口?
# 这里为了严格性,还是退出吧,或者用 fail_flag
exit 1
fi
done
test_end