Test API authentication security. Args: api: Parsed API specification Returns: Scan result with findings
(self, api: ParsedAPI)
| 65 | async def test_api_auth(self, api: ParsedAPI) -> ScanResult: |
| 66 | """Test API authentication security. |
| 67 | |
| 68 | Args: |
| 69 | api: Parsed API specification |
| 70 | |
| 71 | Returns: |
| 72 | Scan result with findings |
| 73 | """ |
| 74 | target = Target.from_string(api.base_url) |
| 75 | self.logger.info(f"Testing authentication for {api.title}") |
| 76 | |
| 77 | findings = [] |
| 78 | |
| 79 | # Test authentication bypass |
| 80 | bypass_findings = await self._test_auth_bypass(api) |
| 81 | findings.extend(bypass_findings) |
| 82 | |
| 83 | # Test for broken authentication |
| 84 | broken_auth_findings = await self._test_broken_auth(api) |
| 85 | findings.extend(broken_auth_findings) |
| 86 | |
| 87 | # Test JWT security if applicable |
| 88 | jwt_findings = self._analyze_jwt_security(api) |
| 89 | findings.extend(jwt_findings) |
| 90 | |
| 91 | # Test rate limiting on auth endpoints |
| 92 | rate_limit_findings = await self._test_auth_rate_limiting(api) |
| 93 | findings.extend(rate_limit_findings) |
| 94 | |
| 95 | return ScanResult( |
| 96 | module="apisec.auth_tester", |
| 97 | target=target, |
| 98 | success=True, |
| 99 | findings=findings, |
| 100 | data={"api_title": api.title}, |
| 101 | ) |
| 102 | |
| 103 | async def _test_auth_bypass(self, api: ParsedAPI) -> list[Finding]: |
| 104 | """Test for authentication bypass vulnerabilities.""" |
| 105 | findings = [] |
| 106 |
no test coverage detected