Backend Integration Helpers
iOS (Swift)
BackendApiClient
import Foundation
class BackendApiClient {
private let baseUrl: String
private var sessionCookies: String?
init(baseUrl: String) {
self.baseUrl = baseUrl
}
func clearSessionCookies() {
sessionCookies = nil
}
func registerBegin(username: String, displayName: String, rpId: String) async throws -> [String: Any] {
let url = URL(string: "\(baseUrl)/fido/register")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let body: [String: Any] = [
"operation": "register",
"username": username,
"displayName": displayName,
"rpId": rpId
]
request.httpBody = try JSONSerialization.data(withJSONObject: body)
let (data, _) = try await URLSession.shared.data(for: request)
guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] else {
throw NSError(domain: "BackendApiClient", code: -1, userInfo: [NSLocalizedDescriptionKey: "Invalid response"])
}
// Extract cookies from JSON response body
extractAndStoreCookies(from: json)
return json
}
func registerComplete(username: String, cardResponseData: [String: Any]) async throws -> [String: Any] {
let url = URL(string: "\(baseUrl)/fido/register")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
var body: [String: Any] = [
"operation": "register",
"username": username,
"cardResponseData": cardResponseData
]
if let cookies = sessionCookies {
body["cookies"] = cookies
request.setValue(cookies, forHTTPHeaderField: "Cookie")
}
request.httpBody = try JSONSerialization.data(withJSONObject: body)
let (data, _) = try await URLSession.shared.data(for: request)
guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] else {
throw NSError(domain: "BackendApiClient", code: -1, userInfo: [NSLocalizedDescriptionKey: "Invalid response"])
}
return json
}
func authenticateBegin(username: String, rpId: String) async throws -> [String: Any] {
let url = URL(string: "\(baseUrl)/fido/authenticate")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let body: [String: Any] = [
"operation": "authenticate",
"username": username,
"rpId": rpId
]
request.httpBody = try JSONSerialization.data(withJSONObject: body)
let (data, _) = try await URLSession.shared.data(for: request)
guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] else {
throw NSError(domain: "BackendApiClient", code: -1, userInfo: [NSLocalizedDescriptionKey: "Invalid response"])
}
// Extract cookies from JSON response body
extractAndStoreCookies(from: json)
return json
}
func authenticateComplete(
cardResponseData: [String: Any],
sessionId: String?,
username: String
) async throws -> [String: Any] {
let url = URL(string: "\(baseUrl)/fido/authenticate")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
var body: [String: Any] = [
"operation": "authenticate",
"username": username,
"cardResponseData": cardResponseData
]
if let sessionId = sessionId {
body["sessionId"] = sessionId
}
if let cookies = sessionCookies {
body["cookies"] = cookies
request.setValue(cookies, forHTTPHeaderField: "Cookie")
}
request.httpBody = try JSONSerialization.data(withJSONObject: body)
let (data, _) = try await URLSession.shared.data(for: request)
guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] else {
throw NSError(domain: "BackendApiClient", code: -1, userInfo: [NSLocalizedDescriptionKey: "Invalid response"])
}
return json
}
private func extractAndStoreCookies(from response: [String: Any]) {
if let cookies = response["cookies"] as? String, !cookies.isEmpty {
sessionCookies = cookies
}
}
}createOptionsResponseFromBackend
Android (Java)
BackendApiClient
FidoOptionsHelper
Desktop (Java)
BackendApiClient
FidoOptionsHelper
Related Documentation
Last updated

