Consider the following scenario. I am logging in using the platform authenticator as shown in img below
The following function was used to authenticate:
func authenticate() {
let _challenge: String = call.getString("challenge")!
let _rp: String = call.getString("rpId")!
let _prf = call.getObject("extensions")?["prf"] as? [String: Any]
let _eval = _prf?["eval"] as? [String: Any]
let challengeData = Base64URLUtils.decode(_challenge)!
let platformProvider = ASAuthorizationPlatformPublicKeyCredentialProvider(relyingPartyIdentifier: _rp)
let platformKeyRequest = platformProvider.createCredentialAssertionRequest(challenge: challengeData)
if let eval = _eval,
let first = eval["first"] as? String,
let saltData = Base64URLUtils.decode(first) {
let inputValues = ASAuthorizationPublicKeyCredentialPRFAssertionInput.InputValues(saltInput1: saltData)
let prfInput = ASAuthorizationPublicKeyCredentialPRFAssertionInput.inputValues(inputValues)
platformKeyRequest.prf = prfInput
} else {
NSLog("[PasskeyWallet] Failed to extract PRF data. eval: %@, first: %@", String(describing: _eval), String(describing: _eval?["first"]))
}
// Log input parameters for debugging
NSLog("[AuthenticationInput] Starting authentication with parameters")
NSLog("[AuthenticationInput] Challenge: %@", _challenge)
NSLog("[AuthenticationInput] Relying Party ID: %@", _rp)
NSLog("[AuthenticationInput] PRF Extension: %@", String(describing: _prf))
NSLog("[AuthenticationInput] PRF Eval Data: %@", String(describing: _eval))
let authController = ASAuthorizationController(authorizationRequests: [platformKeyRequest])
authController.delegate = self
authController.presentationContextProvider = self
authController.performRequests()
}
Logs:
Feb 5 11:26:27 App(Foundation)[32685] <Notice>: [AuthenticationInput] Starting authentication with parameters
Feb 5 11:26:27 App(Foundation)[32685] <Notice>: [AuthenticationInput] Challenge: randomChallenge123
Feb 5 11:26:27 App(Foundation)[32685] <Notice>: [AuthenticationInput] Relying Party ID: umbrellasoftware.ro
Feb 5 11:26:27 App(Foundation)[32685] <Notice>: [AuthenticationInput] PRF Extension: Optional(["eval": ["first": "MTI1LDMxLDUwLDYsMjQyLDE5Niw0NCw5OSwyMTIsMTQwLDEzLDEzNSwxNjUsNzYsMTM5LDIzNCwxMzAsMjM1LDE4OSwyNDYsMTMxLDM4LDIxNywyMzYsMTcyLDE3NCw2Nyw4MiwxODAsNzksMTM3LDE1MA=="]])
Feb 5 11:26:27 App(Foundation)[32685] <Notice>: [AuthenticationInput] PRF Eval Data: Optional(["first": **"MTI1LDMxLDUwLDYsMjQyLDE5Niw0NCw5OSwyMTIsMTQwLDEzLDEzNSwxNjUsNzYsMTM5LDIzNCwxMzAsMjM1LDE4OSwyNDYsMTMxLDM4LDIxNywyMzYsMTcyLDE3NCw2Nyw4MiwxODAsNzksMTM3LDE1MA=="])**
Topic:
Privacy & Security
SubTopic:
General
Tags: