
a4o0e (a4o0e) asked a question.
Hello.
We have a unique situation where we wish to authenticate Android devices. This authentication will only authenticate the device itself, not a user (thus this has nothing to do with MFA). Is there any way to do this in Okta? Ideally it would be integrated with the device so we could register and later verify the Android Device ID to ensure it really is the same device.
The idea is that these devices are Point of Sale systems. Anyone using them should be able to run transactions.
Thank you.

That's an interesting challenge, Mike. There are standards for machine authentication, but they assume that the machine in question is secure and can protect a secret. So when you said Android device, I immediately assume mobile device where the secrets can be got at. i.e. On an app pushed to an Android device.
If your devices are PoS and can be considered secure, then take a look at the OpenID Connect Client Credentials flow. That authenticates the machine/device, not the user. Okta supports it.
Depending on the number of machines, and the lifecycle of those machines, you would need to the configuration effort in Okta but I can easily see that automated with a process tied to you bringing a POS online or deploying to a warehouse or outlet.
The trouble we had with OAuth2 client_credentials flow was that it authorizses a client application, not an actual device. That application will be installed on all of the POS machines. Since all instances of that client application would share a client_id and client_secret, we would not be able to tell which POS device was being authorized. Since we need to support multiple merchants, we need to understand which POS belongs to which merchant. All devices and all merchantes will all have the same application installed.
The solution we have so far is to create a service account user (person in Okta) for each POS device. The username and password for this "user" will be stored as securely as possible on the Android device. We then use OAuth2 resource_owner_password flow to authorize the POS device. I do not like this solution because:
I am hoping one of these might be an option:
Any further thoughts or ideas?
Do you control the app in question ? I was thinking that you would have a deployment step that assigned the clientid/secret at build/deployment time per device. That was associated with a unique OIDC app in Okta for machine to machine giving you the device identification you're after.
MDM might be a route. As might looking at Okta behaviours ( adaptive MFA ) which would provide more controls over the service account signin policy.
https://help.okta.com/en-us/Content/Topics/Security/behavior-detection/configure-behavior-detection.htm
But still an interesting challenge. Not something Okta is setup for. I'll have a think about whether Auth0 ( Okta CIC ) might give you any other options.
Yeah, I suppose I could create an Okta Application per device. That seems a bit messy/confusing, but could work.
Behavior Detection looks interesting. I will look into that. Thanks.