2016-01-28 13 views
8

Ho un caso d'uso che richiede all'utente di confermare le credenziali del dispositivo e il metodo createConfirmDeviceCredentialIntent in KeyguardManager soddisfa perfettamente le mie necessità. Tuttavia, questo metodo è stato aggiunto dall'API 21. (reference link) Quindi, come posso ottenere la stessa funzionalità prima di Android 5.0? Voglio anche supportare versioni come Android 4.X.Come confermare le credenziali del dispositivo prima di Android 5.0 (API 21)?

Grazie!

+1

Potrebbe essere necessario implementarlo da soli. – tynn

+0

Hai avuto fortuna con questo @ danny-zheng? – Beth

risposta

4

Prima di 21 livello questo non è certamente possibile su dispositivi non root e non ci sono alternative con permessi regolari.

Se è ok per richiedere i permessi di amministratore in più, probabilmente è possibile emulare la conferma delle credenziali molto vagamente, con molta più fatica, mediante l'attuazione di DeviceAdminReceiver.onPasswordSucceeded. Blocca lo schermo, quando la password è riuscita eseguire l'azione richiesta. Ciò può rivelarsi relativamente complesso perché l'azione non viene sempre ricevuta (solo se lo stato è cambiato), è necessario mantenere l'ultimo successo, comunicare con il ricevente, ecc.

Come nota a margine, ricontrollare il caso d'uso e il tuo progetto, nella maggior parte dei casi in cui viene utilizzato createConfirmDeviceCredentialIntent, non è in realtà richiesto e altre scelte di progettazione potrebbero eliminarne la necessità.

È stato meglio fornire dettagli su cosa esattamente si sta tentando di proteggere. Se si tratta di uno scenario per l'accesso accidentale al dispositivo da parte di una persona non autorizzata e un token permanente viene generato, ad esempio, da qualche servizio oauth, può essere ragionevole riautorizzare attraverso lo stesso flusso di accesso al servizio o memorizzare alcune hmac di credenziali originali. insieme al token, quindi, richiede e riconvalida le credenziali invece di richiedere le credenziali del dispositivo. In alternativa, se questo è sufficiente per il caso d'uso, puoi utilizzare google login per autorizzare l'accesso alla tua app/token e verificare che l'utente google sia lo stesso per il token memorizzato.

1

La risposta migliore che ho visto per questa situazione è descritta in un post sul blog:

Android Secrets

Tuttavia, ricrea classi di sistema che sono private e chiama il codice AOSP che non è pubblico. La mia taglia è per una risposta migliore che non richiederebbe una denominazione di classe esplicita all'interno del progetto. Forse è possibile utilizzare Smart Lock o un'altra fantastica libreria di sicurezza per la compatibilità con le versioni precedenti di cui ho bisogno.

+0

Il problema sembra non esserci modo di forzare la conferma dei pin con queste API private. È sbloccato una volta allo sblocco del telefono, in modo da ottenere il negozio sicuro senza problemi di protezione sul telefono aperto. Se il tuo scopo è proprio questo, stai cercando di rispondere a una domanda diversa, si differenzia da ciò che è stato chiesto in quanto non si tratta di una sostituzione per la conferma createConfirmDeviceCredentialIntent. –

+0

Ma è ... L'interfaccia utente conferma pin è nel post del blog è su un sentiero pericoloso con sistema Android: 'try { se (Build.VERSION.SDK_INT Beth

+0

Non solo è un percorso pericoloso (beh, non * così * pericoloso), non funziona nel modo in cui si potrebbe pensare. Una volta che il negozio è sbloccato (incluso lo sblocco del telefono) non richiederà più il pin, l'invio dell'intenzione UNLOCK non farà apparire nulla e AFAIK non c'è modo di forzare l'autenticazione a pop-up in questo modo. Quindi la risposta alla domanda originale - non c'è sostituzione (quindi la tua domanda è diversa). –

Problemi correlati