GithubHelp home page GithubHelp logo

italia / cieid-ios-sdk Goto Github PK

View Code? Open in Web Editor NEW
3.0 14.0 4.0 46.76 MB

SDK CIEID per iOS

License: BSD 3-Clause "New" or "Revised" License

Swift 12.93% C++ 4.66% Objective-C 0.94% C 78.14% Objective-C++ 3.32%
cie

cieid-ios-sdk's Introduction

CieID-iOS-sdk

CieID-iOS-sdk è un SDK per smartphone iOS sviluppato in Swift che include le funzionalità di autenticazione di "Entra con CIE". Utilizzando questo kit gli sviluppatori di applicazioni terze iOS possono integrare nella propria app l'autenticazione mediante la cartà d'identità elettronica (CIE 3.0).

Requisiti tecnici

CieID-iOS-sdk richiede versione iOS 13.0 o successive, inoltre è necessario uno smartphone iOS con tecnologia NFC (iPhone 7 o successivo, non è compatibile con iPhone SE di prima generazione - mod 2016).

Requisiti di integrazione

Per integrare questo kit è necessario che l'integratore sia un Service Provider federato e che integri la tecnologia abilitante al flusso di autenticazione "Entra con CIE". Maggiori informazioni qui..

Come si usa

Il kit integra per il momento il solo flusso di autenticazione con reindirizzamento di seguito descritto. L'integrazione richiede pochi semplici passaggi:

  • Importazione del kit all'interno del progetto
  • Configurazione dell'URL Scheme
  • Configurazione dell'URL di un Service Provider valido all'interno del file Info.plist
  • Configurazione dello smart button Entra con CIE all'interno dello storyboard
  • Inizializzazione e presentazione della webView di autenticazione
  • Gestione dei delegati

Flusso con reindirizzamento

Il flusso di autenticazione con reindirizzamento permette ad un Service Provider accreditato di integrare l'autenticazione Entra con CIE nella propria app iOS, demandando le operazioni di autenticazione all'app CieID. Questo flusso di autenticazione richiede che l'utente abbia l'app CieID installata sul proprio smartphone in versione 1.2.1 o successiva.

Flusso interno

Non disponibile in questa versione.

Importazione

Trascinare la folder CieIDsdk all'interno del progetto xCode.

Configurazione URL Scheme

Nel flusso di autenticazione con reindirizzamento l'applicazione CieID avrà bisogno aprire l'app chiamante per potergli notificare l'avvenuta autenticazione. A tal fine è necessario configurare un URL Scheme nel progetto Xcode come segue:

Selezionare il progetto Target, aprire il pannello Info ed aprire poi il pannello URL Types. Compilare i campi Identifier e URL Scheme inserendo il Bundle Identifier dell'app, impostare poi su none il campo Role.

Il parametro appena inserito nel campo URL Scheme dovrà essere riportato nel file Info.plist, aggiungendo un parametro chiamato SP_URL_SCHEME di tipo String, come mostrato nell'esempio:

<key>SP_URL_SCHEME</key>
<string>Inserisci qui il parametro URL Scheme</string>

A seguito dell'apertura dell'app la webView dovrà ricevere un nuovo URL e proseguire la navigazione. Di seguito si riporta il metodo openUrlContext da importare nello SceneDelegate che implementa tale logica:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {

	guard let url = URLContexts.first?.url else {

		return

	}

	var urlString : String = String(url.absoluteString)
	if let httpsRange = urlString.range(of: "https://"){

	//Rimozione del prefisso dell'URL SCHEME
	let startPos = urlString.distance(from: urlString.startIndex, to: httpsRange.lowerBound)
	urlString = String(urlString.dropFirst(startPos))

	//Passaggio dell'URL alla WebView
	let response : [String:String] = ["payload": urlString]
	let NOTIFICATION_NAME : String = "RETURN_FROM_CIEID"

	NotificationCenter.default.post(name: 	Notification.Name(NOTIFICATION_NAME), object: nil, userInfo: response)

	}

}

Configurazione Service Provider URL

Entrambi i flussi vengono avviati tramite l'utilizzo di una WebView, per questo motivo è necessario caricare la URL dell'ambiente di produzione della pagina web del Service Provider che integra il pulsante "Entra con CIE" all'interno del file Info.plist, aggiungendo un parametro chiamato SP_URL di tipo String, come mostrato nell'esempio:

<key>SP_URL</key>
<string>Inserisci qui l'URL dell'ambiente di produzione del Service Provider</string>

Importazione del pulsante Entra con CIE

Aggiungere nello storyboard di progetto un oggetto di tipo UIButton ed inserire nella voce Class del menù Identity inspector la classe che lo gestisce: CieIDButton. L'oggetto grafico verrà automaticamente renderizzato con il pulsante ufficiale Entra con CIE.

Eseguire l'autenticazione

Di seguito un esempio di gestione dell'evento TouchUpInside per eseguire il codice necessario per inizializzare e presentare la WebView di autenticazione.

@IBAction func  startAuthentication(_ sender: UIButton){
    
    let cieIDAuthenticator = CieIDWKWebViewController()
    cieIDAuthenticator.modalPresentationStyle = .fullScreen
    cieIDAuthenticator.delegate = self
    present(cieIDAuthenticator, animated: true, completion: nil)

}

La classe chiamante dovrà essere conforme al protocollo CieIdDelegate come mostrato nell'esempio.

class  ExampleViewController: UIViewController, CieIdDelegate {
    ...
}

L'utente potrà navigare nella webView mostrata che lo indirizzerà sull'app CieID dove potrà eseguire l'autenticazione con la Carta di Identità Elettronica, al termine verrà nuovamente reindirizzato sull'app chiamante in cui potrà dare il consenso alla condivisione delle informazioni personali e portare al termine l'autenticazione.

Al termine dell'autenticazione verrà chiamato il delegato CieIDAuthenticationClosedWithSuccess. La chiamata di questo delegato proviene dalla classe CieIDWKWebViewController. Potrebbe rendersi necessario posticipare la chiamata di questo delegato in base alla logica di autenticazione del Service Provider.

Gestione eventi

Il protocollo impone la gestione dei seguenti eventi mediante delegati

func  CieIDAuthenticationClosedWithSuccess() {

	print("Authentication closed with SUCCESS")

}
func  CieIDAuthenticationCanceled() {
    
    print("L'utente ha annullato l'operazione")
	    
}
func  CieIDAuthenticationClosedWithError(errorMessage: String) {

	print("ERROR MESSAGE: \(errorMessage)")

}

Licenza

Il codice sorgente è rilasciato sotto licenza BSD (codice SPDX: BSD-3-Clause).

cieid-ios-sdk's People

Contributors

ebrienza avatar fventola-ipzs avatar ipzsmobileteam avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cieid-ios-sdk's Issues

Il riconoscimento dell TAG NFC fallisce.

L'app CieID come l'app CieSign sembrano condividere questo SDK.

La registrazione della carta non avviene, il messaggio di errore è "Hai rimosso la carta troppo presto" mentre telefono e carta restano immobili.

Ho replicato l'errore su iPhone 11 PRO e iPhone 12 con IOS 14 e 15, con due carte diverse.

Altre app come https://apps.apple.com/us/app/nfc-for-iphone/id1249686798 leggono il tag al volo, escludendo quindi che sia un errore di device, di versione IOS, cover o carta.

Questo problema impedisce agli utenti iPhone di utilizzare tutte le app che fanno uso dell'SDK.

Per replicare l'errore, provare il processo di registrazione di una carta di identità elettronica con app CieID e CieSign.

Parametro sourceApp per ritorno da CieID

Salve,
provando ad integrare l'SDK per effettuare l'autenticazione tramite CIE riscontro il seguente comportamento: l'app CieID viene aperta, si riesce ad effettuare l'autenticazione tramite CIE, ma dopo che appare l'avviso "Riapertura dell'app" si resta bloccati su CieID, senza tornare all'app chiamante.
L'URL Scheme è configurato correttamente e lo stesso comportamento avviene su più iPhone che rispettano i requisiti tecnici.

Nel file Extensions/QueryString.swift il parametro sourceApp viene così inserito nell'URL:

return self.appendingPathComponent("&\(SOURCE_APP)=\(urlSchemeString)",` isDirectory: false)

Generando ad esempio la seguente richiesta: CIEID://https://ios.idserver.servizicie.interno.gov.it/idp/login/app/&sourceApp=xxx?opId=...,
mentre generando l'URL in modo da ottenere la seguente struttura, l'autenticazione va a buon fine e si ritorna all'app chiamante: CIEID://https://ios.idserver.servizicie.interno.gov.it/idp/login/app?sourceApp=xxx&opId=...

IDP_URL_COMPONENT errato

Ciao , sto riscontrando dei problemi con iOS. In particolare mi sono accorto che le url che giungono in risposta all'app non sono formattate secondo quanto si aspetta la libreria cioè:

//IDP URL COMPONENT
let IDP_URL_COMPONENT : String = "ios.idserver.servizicie.interno.gov.it"

ma giungono url parametrizzate con host : "idserver.servizicie.interno.gov.it".
Mancherebbe dunque la parte iniziale "ios".

Come posso ottenere in risposta il corretto IDP_URL_COMPONENT?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.