---
title: OATH Device Storage node
description: The OATH Device Storage node stores devices in the user profile after an OATH Registration node records them in the shared state.
component: auth-node-ref
version: 7.3
page_id: auth-node-ref::auth-node-oath-device-storage
canonical_url: https://docs.pingidentity.com/auth-node-ref/latest/oath-device-storage.html
llms_txt: https://docs.pingidentity.com/auth-node-ref/llms.txt
docs_for_agents: https://developer.pingidentity.com/build-with-ai/docs-for-agents.md
keywords: ["Nodes &amp; Trees", "Journeys", "Authentication", "OAuth 2.0"]
section_ids:
  compatibility: Compatibility
  authenticators: Authenticators
  inputs: Inputs
  dependencies: Dependencies
  configuration: Configuration
  outputs: Outputs
  outcomes: Outcomes
  errors: Errors
  example: Example
---

# OATH Device Storage node

The OATH Device Storage node stores devices in the user profile after an [OATH Registration node](auth-node-oath-registration.html) records them in the shared state.

## Compatibility

| Product                               | Compatible? |
| ------------------------------------- | ----------- |
| PingOne Advanced Identity Cloud       | Yes         |
| Access Management (self-managed)      | Yes         |
| Ping Identity Platform (self-managed) | Yes         |

### Authenticators

The OATH-related nodes can integrate with the following authenticator apps:

* The [ForgeRock Authenticator](https://docs.pingidentity.com/sdks/latest) app for Android and iOS.

* Third-party authenticator apps that support the following open standards:

  * [RFC 4226](https://tools.ietf.org/html/rfc4226): HMAC-Based One-Time Password (HOTP)

  * [RFC 6238](https://tools.ietf.org/html/rfc6238): Time-Based One-Time Password (TOTP)

## Inputs

This node reads the device profile as the value of the shared state attribute `oathDeviceProfile`.

## Dependencies

Precede this node in the flow with an [OATH Registration node](auth-node-oath-registration.html) with its Store device data in shared state setting enabled.

## Configuration

This node has no configurable properties.

## Outputs

This node doesn't change the shared state.

## Outcomes

* `Success`

  The node wrote the device profile to the user's account.

* `Failure`

  Any other case.

## Errors

This node logs a `No device profile found on shared state` error message if it can't get the device profile from the `oathDeviceProfile` shared state attribute.

## Example

The following journey includes both username-password and one-time passcode authentication:

![OATH journey with device registration](_images/oath-journey.png)

* The [Page node](auth-node-page.html) with the [Platform Username node](auth-node-platform-username.html) and the [Platform Password node](auth-node-platform-password.html) prompts for the user credentials.

* The [Data Store Decision node](auth-node-data-store-decision.html) confirms the username-password credentials.

* The first [OATH Token Verifier node](auth-node-oath-token-verifier.html) prompts for a one-time passcode with an option to use a recovery code.

* The [OATH Registration node](auth-node-oath-registration.html) prompts the user to register a device and includes its profile in the shared state.

* The [Recovery Code Display node](auth-node-recovery-code-display.html) shows the recovery codes and prompts the user to keep them safe.

* The second [OATH Token Verifier node](auth-node-oath-token-verifier.html) prompts for a one-time passcode using the newly registered device.

* The [OATH Device Storage node](auth-node-oath-device-storage.html) writes the device profile to the user's account.

* The [Recovery Code Collector Decision node](auth-node-recovery-code-collector-decision.html) prompts for a recovery code.

* The [Retry Limit Decision node](auth-node-retry-limit-decision.html) lets the user retry another code if they enter one incorrectly.
