fix(webauthn): accept unsolicited client extension outputs from WebKit clients (#39792) (#39806)

Backport #39792

Fixes #39790

Signed-off-by: choksi2212 <choksi2212@users.noreply.github.com>
Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Manas Choksi <162600900+choksi2212@users.noreply.github.com>
Co-authored-by: choksi2212 <choksi2212@users.noreply.github.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
Giteabot
2026-10-16 09:28:24 +00:00
committed by GitHub
co-authored by Manas Choksi choksi2212 wxiaoguang
parent 02b18a0c8e
commit 96cb6cd16f
2 changed files with 10 additions and 0 deletions
+8
View File
@@ -32,6 +32,14 @@ func Init() {
RPID: setting.AppDomain,
RPOrigins: []string{appURL},
AttestationPreference: protocol.PreferNoAttestation, // Gitea never verifies attestation
// WebKit (Safari on iOS and macOS) returns an unsolicited "appid" client
// extension output even when the relying party did not request it. Since the
// webauthn library upgrade to v0.18, the default policy fails such ceremonies
// ('Client returned the appid extension output which was not requested'), breaking
// every passkey and security-key login from Safari on iOS. Ignore unsolicited
// extension outputs, the same policy other relying parties adopted for the
// same WebKit behavior.
ExtensionsUnsolicitedOutputPolicy: protocol.UnsolicitedOutputPolicyIgnore,
},
}
}
+2
View File
@@ -8,6 +8,7 @@ import (
"gitea.dev/modules/setting"
"github.com/go-webauthn/webauthn/protocol"
"github.com/stretchr/testify/assert"
)
@@ -22,4 +23,5 @@ func TestInit(t *testing.T) {
assert.Equal(t, setting.AppDomain, WebAuthn.Config.RPID)
assert.Equal(t, setting.AppName, WebAuthn.Config.RPDisplayName)
assert.Equal(t, rpOrigin, WebAuthn.Config.RPOrigins)
assert.Equal(t, protocol.UnsolicitedOutputPolicyIgnore, WebAuthn.Config.ExtensionsUnsolicitedOutputPolicy)
}