Cut user-owned API keys; redesign subject model
Removes the APIKey primitive entirely (Auth.IssueAPIKey/AuthenticateAPIKey/
RevokeAPIKey, APIKeyStore, Deps.APIKeys, Stores.APIKeys, Tables.APIKeys,
ErrAPIKeyInvalid, AuthMethodAPIKey, Principal.{APIKeyID, Abilities, HasAbility},
prefixAPIKey, RequireAPIKey, and the 6 SQL templates). Migration
0003_drop_api_keys.sql hard-drops authkit_api_keys.
The new subject model: *Principal carries identity only (sessions, JWTs);
*ServiceKey is the only abilities-bearing credential and gains a
HasAbility(name) method. RequireAbility now reads *ServiceKey from context
(user principals 403 by design). RequireRole/RequirePermission stay
Principal-only. New RequireServiceKey + ServiceKeyFrom + MustServiceKey,
and a heterogeneous RequireAnyOrServiceKey for routes that accept either.
RequireAny is now Principal-only (default [Session, JWT]).
Adds 7 middleware tests (auth, revoked, ability accept/reject across
subjects, role rejects service key, RequireAnyOrServiceKey both paths) and
1 (*ServiceKey).HasAbility unit test. Existing API-key tests deleted.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
4942e4dbdc
commit
7f1db871bc
24 changed files with 773 additions and 496 deletions
|
|
@ -33,7 +33,7 @@ func TestParseSecretWrongPrefix(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatalf("mintSecret: %v", err)
|
||||
}
|
||||
if _, ok := parseSecret(prefixAPIKey, plaintext); ok {
|
||||
if _, ok := parseSecret(prefixServiceKey, plaintext); ok {
|
||||
t.Fatalf("parseSecret should reject mismatched prefix")
|
||||
}
|
||||
if _, ok := parseSecret(prefixSession, "sessXXXX"); ok {
|
||||
|
|
@ -44,7 +44,7 @@ func TestParseSecretWrongPrefix(t *testing.T) {
|
|||
func TestMintSecretUniqueness(t *testing.T) {
|
||||
seen := make(map[string]struct{}, 100)
|
||||
for i := 0; i < 100; i++ {
|
||||
p, _, err := mintSecret(prefixAPIKey, nil)
|
||||
p, _, err := mintSecret(prefixServiceKey, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("mintSecret: %v", err)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue