eID mSDK knižnica pre iOS a Demo aplikácia demonštrujúca použitie eID mSDK.
Knižnica je vybuildovaná ako eID.framework
v adresári eIDmSDKDemoApp/Frameworks
- Drag’n‘Drop
eID.framework
súbor do xCode projektu - pridať framework do
Target Dependencies
a nastaviťEmbed & Sign
- v
Signing & Capabilities
pridaťNear Field Communication Tag Reading
(bude vygenerovaný.entitlements
súbor - v
Info.plist
pridaťNFCReaderUsageDescription
s textom popisujúcim účel použitia NFC - do
Info.plist
súboru doplniť zoznam podporovaných AIDs na kartách<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key> <array> <string>A0000000770108700A1000FE00000400</string> <string>E80704007F00070302</string> </array>
- pre účely zabránenia MITM útokom nastaviť "CA Pinning" pridaním snippetu do súboru
Info.plist
<key>NSAppTransportSecurity</key> <dict> <key>NSPinnedDomains</key> <dict> <key>eid.plaut.sk</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSPinnedCAIdentities</key> <array> <dict> <key>SPKI-SHA256-BASE64</key> <string>47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>C5+lpZ7tcVwmwQIMcRtPbsQtWLABXhQzejna0wHFr8M=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>cCEWzNi/I+FkZvDg26DtaiOanBzWqPWmazmvNZUCA4U=</string> </dict> </array> </dict> <key>apigw.eid.plaut.sk</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSPinnedCAIdentities</key> <array> <dict> <key>SPKI-SHA256-BASE64</key> <string>47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>C5+lpZ7tcVwmwQIMcRtPbsQtWLABXhQzejna0wHFr8M=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>cCEWzNi/I+FkZvDg26DtaiOanBzWqPWmazmvNZUCA4U=</string> </dict> </array> </dict> <key>login.eid.plaut.sk </key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSPinnedCAIdentities</key> <array> <dict> <key>SPKI-SHA256-BASE64</key> <string>47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>C5+lpZ7tcVwmwQIMcRtPbsQtWLABXhQzejna0wHFr8M=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>cCEWzNi/I+FkZvDg26DtaiOanBzWqPWmazmvNZUCA4U=</string> </dict> </array> </dict> <key>identity.eid.plaut.sk </key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSPinnedCAIdentities</key> <array> <dict> <key>SPKI-SHA256-BASE64</key> <string>47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>C5+lpZ7tcVwmwQIMcRtPbsQtWLABXhQzejna0wHFr8M=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>cCEWzNi/I+FkZvDg26DtaiOanBzWqPWmazmvNZUCA4U=</string> </dict> </array> </dict> <key>eidas.minv.sk</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSPinnedCAIdentities</key> <array> <dict> <key>SPKI-SHA256-BASE64</key> <string>47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>C5+lpZ7tcVwmwQIMcRtPbsQtWLABXhQzejna0wHFr8M=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>cCEWzNi/I+FkZvDg26DtaiOanBzWqPWmazmvNZUCA4U=</string> </dict> </array> </dict> <key>teidas.minv.sk</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSPinnedCAIdentities</key> <array> <dict> <key>SPKI-SHA256-BASE64</key> <string>47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>C5+lpZ7tcVwmwQIMcRtPbsQtWLABXhQzejna0wHFr8M=</string> </dict> <dict> <key>SPKI-SHA256-BASE64</key> <string>cCEWzNi/I+FkZvDg26DtaiOanBzWqPWmazmvNZUCA4U=</string> </dict> </array> </dict> </dict> </dict>
- eID.framework vyžaduje 3 dependencies, ktoré môžu byť integrované cez Swift Package Manager, CocoaPods, Carthage alebo ako zbuildovaný framework:
eID mSDK poskytuje nasledujúce hlavné okruhy funkcionalít:
- Autentifikácia osoby na najvyššej úrovni zabezpečenia (Vysoká) podľa eIDAS
- Zobrazenie certifikátov z občianskeho preukazu
- Vyhotovenie kvalifikovaného elektronického podpisu
- Manažment znalostných faktorov (BOK, KEP PIN, PUK)
Kompletná API a integračnú dokumentácia je dostupná na https://github.com/eIDmSDK/eID-mSDK-Dokumentacia
eIDHandler().startAuth(from: self,
environment: .plautDev,
clientID: "aclientid",
clientSecret: "aclientsecret",
apiKeyId: "apiKeyId",
apiKeyValue: "apiKeyValue",
nonce: UUID().uuidString,
completion: { res in
print(">> result: \(res)")
}
eIDHandler().getCertificates(from: self,
types: [.ES, .QES],
completion: { res in
print(">> result: \(res)")
}
eIDHandler().signData(from: self,
certIndex: 1,
signatureScheme: "1.2.840.113549.1.1.11",
dataToSign: "base64hashedData",
completion: { res in
print(">> result: \(res)")
}
eIDHandler().startPinManagement(from: self,
completion: { res in
print(">> result: \(res)")
}
eID mSDK v rámci svojej funkčnosti používa nasledujúce knižnice s otvoreným zdrojovým kódom:
- OpenSSL (Apache License 2.0) - https://github.com/krzyzanowskim/OpenSSL/blob/main/LICENSE.txt
- Lottie (Apache License 2.0) - https://github.com/airbnb/lottie-ios/blob/master/LICENSE
- JWTDecode (MIT license) - https://github.com/auth0/JWTDecode.swift/blob/master/LICENSE
iOS aplikácia, ktorá integruje eID mSDK API a demonštruje funkcionalitu tejto knižnice.
- aplikáciu je možné spustiť len na iOS zariadení, nie v simulátore
- v xCode je potrebné si nastaviť
bundleId
a nakonfigurovaťSigning
- v prípade potreby zvoliť reset packages (cez SPM sú nalinkované 3 dependencies)
- v súbore
Environments.swift
zadaťclientId
aclientSecret
pre jednotlivé prostredia (viac v integračnej dokumentácii na https://github.com/eIDmSDK/eID-mSDK-Dokumentacia)
ViewController.swift
- autentifikácia, certifikáty, manažment znalostných kódov, tutoriálSignViewController.swift
- načítanie certifikátu, overenie certifikátu, podpisDecryptViewController.swift
- overenie certifikátu, dešifrovanie