I need to implement a convenient way to determine, whether a mobile app is being used by a valid customer or not. My customers told me that if they would lose their mobile phone, they definitely would contact the operator and lock the SIM card.
So, it seems natural to bind authentication to the SIM card validity (the app works as long as the correct SIM is present and not locked). Then, in case of loss the customer only needs to lock the SIM card, which he or she would do anyway (because internet banks send SMS for approving transactions to the mobile phone).
I tried to read SIM-card related data, but it works only on some phones and not on others (sometimes I get just empty strings instead of the IMEI number).
How can I implement an authentication mechanism, which is
- easy for the user (does not require the user to generate/enter a new password),
- provides the app with information whether the currently inserted SIM card is
- the same as the SIM that was there at the first start of the application and
- not locked?
If it's impossible, what authentication alternatives are there (apart from e-mail/password and phone number with SMS confirmation) ?
Update 1 (11.08.2013 14:17 MSK): One obvious solution is to use the phone number as a login name and server-generated 6-digits number as password.
Then, the authentication would work like this:
- At the first run, the user enters his or her mobile phone number.
- The server sends him or her a message (SMS) with a 6-digit password.
- The user enters that password and the app starts to work.
- In regular intervals the app asks the user to renew the password (new passwords are delivered via SMS as well).
What do you think about this option?
Can it be improved somehow?