Error Handling Test Case Reviewer
Review test cases for error handling in OpenID Connect Basic OP.
Scope
- Feature: Error Responses
- Specifications: OAuth 2.1 Section 4.1.2.1, 5.2; OIDC Core 1.0 Section 3.1.2.6
- Profile: Basic OP (Authorization Code Flow)
Review Process
- Identify which error scenario the test targets
- Check against the checklist below
- Verify correct error code is returned
- Ensure response format matches specification
- Report gaps with specific spec section references
Authorization Endpoint Errors
OAuth 2.1 Error Codes (Section 4.1.2.1)
| Error Code | Condition | Spec |
|---|
invalid_request
| Missing/malformed parameter, duplicate parameter | OAuth 2.1 4.1.2.1 |
unauthorized_client
| Client not authorized for grant type | OAuth 2.1 4.1.2.1 |
access_denied
| Resource owner or AS denied request | OAuth 2.1 4.1.2.1 |
unsupported_response_type
| response_type not supported | OAuth 2.1 4.1.2.1 |
invalid_scope
| Invalid, unknown, or malformed scope | OAuth 2.1 4.1.2.1 |
server_error
| Unexpected condition (use sparingly) | OAuth 2.1 4.1.2.1 |
temporarily_unavailable
| Server temporarily overloaded | OAuth 2.1 4.1.2.1 |
OIDC-Specific Error Codes (Section 3.1.2.6)
| Error Code | Condition | Spec |
|---|
interaction_required
| prompt=none but End-User interaction needed | OIDC Core 3.1.2.6 |
login_required
| prompt=none but End-User not authenticated | OIDC Core 3.1.2.6 |
account_selection_required
| prompt=none but account selection needed | OIDC Core 3.1.2.6 |
consent_required
| prompt=none but consent required | OIDC Core 3.1.2.6 |
invalid_request_uri
| request_uri invalid or unreachable | OIDC Core 3.1.2.6 |
invalid_request_object
| Request Object invalid | OIDC Core 3.1.2.6 |
request_not_supported
| OP doesn't support request parameter | OIDC Core 3.1.2.6 |
request_uri_not_supported
| OP doesn't support request_uri parameter | OIDC Core 3.1.2.6 |
registration_not_supported
| OP doesn't support registration parameter | OIDC Core 3.1.2.6 |
Authorization Error Response Format
For Authorization Code flow, errors returned in query component:
HTTP/1.1 302 Found
Location: https://client.example.org/cb?
error=invalid_request
&error_description=Unsupported%20response_type%20value
&state=af0ifjsldkj
Token Endpoint Errors
OAuth 2.1 Error Codes (Section 5.2)
| Error Code | Condition | Spec |
|---|
invalid_request
| Missing/malformed parameter | OAuth 2.1 5.2 |
invalid_client
| Client authentication failed | OAuth 2.1 5.2 |
invalid_grant
| Invalid/expired code, redirect_uri mismatch, PKCE failure | OAuth 2.1 5.2 |
unauthorized_client
| Client not authorized for grant type | OAuth 2.1 5.2 |
unsupported_grant_type
| grant_type not supported | OAuth 2.1 5.2 |
invalid_scope
| Requested scope exceeds grant | OAuth 2.1 5.2 |
Token Error Response Format
Errors returned as JSON with HTTP 400 (or 401 for invalid_client):
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
{
"error": "invalid_grant",
"error_description": "Authorization code expired"
}
HTTP Status Codes
| Error | HTTP Status |
|---|
invalid_client
| 401 (if via Authorization header) or 400 |
| All others | 400 |
Error Response Parameters
| Parameter | Required | Description |
|---|
error
| REQUIRED | ASCII error code |
error_description
| OPTIONAL | Human-readable description (ASCII) |
error_uri
| OPTIONAL | URI with error information |
state
| REQUIRED if in request | Exact value from request |
Test Cases Checklist
Missing Required Parameters
| Scenario | Expected Error | Endpoint |
|---|
| [ ] Missing response_type | invalid_request
| Authorization |
| [ ] Missing client_id | invalid_request
| Authorization |
| [ ] Missing scope | invalid_request
| Authorization |
| [ ] Missing openid in scope | invalid_scope
| Authorization |
| [ ] Missing grant_type | invalid_request
| Token |
| [ ] Missing code | invalid_request
| Token |
| [ ] Missing code_verifier (when required) | invalid_grant
| Token |
Invalid Parameters
| Scenario | Expected Error | Endpoint |
|---|
| [ ] Unknown response_type | unsupported_response_type
| Authorization |
| [ ] Unregistered redirect_uri | invalid_request
| Authorization |
| [ ] Invalid redirect_uri format | invalid_request
| Authorization |
| [ ] Invalid client_id | unauthorized_client or invalid_request
| Authorization |
| [ ] Invalid/expired code | invalid_grant
| Token |
| [ ] Code already used | invalid_grant
| Token |
| [ ] PKCE verification failure | invalid_grant
| Token |
| [ ] Client authentication failure | invalid_client
| Token |
prompt=none Specific Errors
| Scenario | Expected Error |
|---|
| [ ] User not authenticated | login_required
|
| [ ] Consent not yet given | consent_required
|
| [ ] Multiple accounts, selection needed | account_selection_required
|
| [ ] Any interaction needed | interaction_required
|
Redirect URI Edge Cases
| Scenario | Expected Behavior |
|---|
| [ ] Invalid/unregistered redirect_uri | MUST NOT redirect, display error |
| [ ] Valid redirect_uri but error occurred | Redirect with error in query |
| [ ] Error with state in request | Include state in error response |
Error Response Validation Checklist
| Check | Requirement |
|---|
[ ] error parameter present | |
[ ] error value is valid code | |
[ ] state returned if sent | |
| [ ] No redirect for invalid redirect_uri | |
| [ ] Correct HTTP status code | |
| [ ] JSON Content-Type for token endpoint | |
| [ ] No caching headers (Cache-Control: no-store) | |
Conformance Test IDs
| Test ID | Scenario |
|---|
| OP-Response-Missing | Missing response_type → error |
| OP-redirect_uri-NotReg | Unregistered redirect_uri → error |
| OP-OAuth-2nd | Reused code → error |
| OP-OAuth-2nd-30s | Code reuse after 30s → error |
Review Output Format
## Test Case: [Name]
### Target Feature: Error Handling - [specific scenario]
### Test ID: OP-Error-[xxx]
### Spec Compliance:
- [x] Covers required behavior per [spec section]
- [ ] Missing: [specific requirement]
### Error Response:
- [x/blank] Correct error code
- [x/blank] Correct HTTP status
- [x/blank] state included if sent
### Verdict: PASS / FAIL / PARTIAL
### Recommendations: [if any]