diff --git a/homeassistant/components/ondilo_ico/__init__.py b/homeassistant/components/ondilo_ico/__init__.py
index ddcd7ab8831bff76694fb63ca8285a6b4fb0c2c6..93aadb5b6ea8de1676633512a3d222f43ef1b0e6 100644
--- a/homeassistant/components/ondilo_ico/__init__.py
+++ b/homeassistant/components/ondilo_ico/__init__.py
@@ -1,27 +1,37 @@
 """The Ondilo ICO integration."""
 
+from homeassistant.components.application_credentials import (
+    ClientCredential,
+    async_import_client_credential,
+)
 from homeassistant.config_entries import ConfigEntry
 from homeassistant.const import Platform
 from homeassistant.core import HomeAssistant
-from homeassistant.helpers import config_entry_oauth2_flow
+from homeassistant.helpers import config_entry_oauth2_flow, config_validation as cv
+from homeassistant.helpers.typing import ConfigType
 
 from .api import OndiloClient
-from .config_flow import OndiloIcoOAuth2FlowHandler
-from .const import DOMAIN
+from .const import DOMAIN, OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET
 from .coordinator import OndiloIcoPoolsCoordinator
-from .oauth_impl import OndiloOauth2Implementation
 
+CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
 PLATFORMS = [Platform.SENSOR]
 
 
-async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
-    """Set up Ondilo ICO from a config entry."""
-
-    OndiloIcoOAuth2FlowHandler.async_register_implementation(
+async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
+    """Set up the Ondilo ICO integration."""
+    # Import the default client credential.
+    await async_import_client_credential(
         hass,
-        OndiloOauth2Implementation(hass),
+        DOMAIN,
+        ClientCredential(OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET, name="Ondilo ICO"),
     )
 
+    return True
+
+
+async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
+    """Set up Ondilo ICO from a config entry."""
     implementation = (
         await config_entry_oauth2_flow.async_get_config_entry_implementation(
             hass, entry
diff --git a/homeassistant/components/ondilo_ico/api.py b/homeassistant/components/ondilo_ico/api.py
index f6ab0baa57682cc242db9ed8863e113ae91bb3db..696acf1b2d664367bd89d53e35cda91cb15d6fba 100644
--- a/homeassistant/components/ondilo_ico/api.py
+++ b/homeassistant/components/ondilo_ico/api.py
@@ -1,15 +1,12 @@
 """API for Ondilo ICO bound to Home Assistant OAuth."""
 
 from asyncio import run_coroutine_threadsafe
-import logging
 
 from ondilo import Ondilo
 
 from homeassistant import config_entries, core
 from homeassistant.helpers import config_entry_oauth2_flow
 
-_LOGGER = logging.getLogger(__name__)
-
 
 class OndiloClient(Ondilo):
     """Provide Ondilo ICO authentication tied to an OAuth2 based config entry."""
diff --git a/homeassistant/components/ondilo_ico/application_credentials.py b/homeassistant/components/ondilo_ico/application_credentials.py
new file mode 100644
index 0000000000000000000000000000000000000000..5481a88bc1b603f3b8cc76cb87a01581072100ac
--- /dev/null
+++ b/homeassistant/components/ondilo_ico/application_credentials.py
@@ -0,0 +1,14 @@
+"""Application credentials platform for Ondilo ICO."""
+
+from homeassistant.components.application_credentials import AuthorizationServer
+from homeassistant.core import HomeAssistant
+
+from .const import OAUTH2_AUTHORIZE, OAUTH2_TOKEN
+
+
+async def async_get_authorization_server(hass: HomeAssistant) -> AuthorizationServer:
+    """Return authorization server."""
+    return AuthorizationServer(
+        authorize_url=OAUTH2_AUTHORIZE,
+        token_url=OAUTH2_TOKEN,
+    )
diff --git a/homeassistant/components/ondilo_ico/config_flow.py b/homeassistant/components/ondilo_ico/config_flow.py
index fe0b89e725873c36076571ee9b8be2c9ecc2aa53..6839d2089bfddce52804eb213d11ddfd9d99407e 100644
--- a/homeassistant/components/ondilo_ico/config_flow.py
+++ b/homeassistant/components/ondilo_ico/config_flow.py
@@ -3,11 +3,14 @@
 import logging
 from typing import Any
 
+from homeassistant.components.application_credentials import (
+    ClientCredential,
+    async_import_client_credential,
+)
 from homeassistant.config_entries import ConfigFlowResult
 from homeassistant.helpers.config_entry_oauth2_flow import AbstractOAuth2FlowHandler
 
-from .const import DOMAIN
-from .oauth_impl import OndiloOauth2Implementation
+from .const import DOMAIN, OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET
 
 
 class OndiloIcoOAuth2FlowHandler(AbstractOAuth2FlowHandler, domain=DOMAIN):
@@ -18,14 +21,13 @@ class OndiloIcoOAuth2FlowHandler(AbstractOAuth2FlowHandler, domain=DOMAIN):
     async def async_step_user(
         self, user_input: dict[str, Any] | None = None
     ) -> ConfigFlowResult:
-        """Handle a flow initialized by the user."""
-        await self.async_set_unique_id(DOMAIN)
-
-        self.async_register_implementation(
+        """Handle a flow start."""
+        # Import the default client credential.
+        await async_import_client_credential(
             self.hass,
-            OndiloOauth2Implementation(self.hass),
+            DOMAIN,
+            ClientCredential(OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET, name="Ondilo ICO"),
         )
-
         return await super().async_step_user(user_input)
 
     @property
diff --git a/homeassistant/components/ondilo_ico/const.py b/homeassistant/components/ondilo_ico/const.py
index 3c947776857573b2f5bc338c24a04841b4a609b5..8dec60725562594660637648d7be42fe2aa4acb5 100644
--- a/homeassistant/components/ondilo_ico/const.py
+++ b/homeassistant/components/ondilo_ico/const.py
@@ -4,5 +4,5 @@ DOMAIN = "ondilo_ico"
 
 OAUTH2_AUTHORIZE = "https://interop.ondilo.com/oauth2/authorize"
 OAUTH2_TOKEN = "https://interop.ondilo.com/oauth2/token"
-OAUTH2_CLIENTID = "customer_api"
-OAUTH2_CLIENTSECRET = ""
+OAUTH2_CLIENT_ID = "customer_api"
+OAUTH2_CLIENT_SECRET = ""
diff --git a/homeassistant/components/ondilo_ico/manifest.json b/homeassistant/components/ondilo_ico/manifest.json
index 84862a89fbb4788e10dc156155c218bf3e6aef9d..3553797b9cd5c6cd251b7d55ee75556fa0b9bbc2 100644
--- a/homeassistant/components/ondilo_ico/manifest.json
+++ b/homeassistant/components/ondilo_ico/manifest.json
@@ -3,7 +3,7 @@
   "name": "Ondilo ICO",
   "codeowners": ["@JeromeHXP"],
   "config_flow": true,
-  "dependencies": ["auth"],
+  "dependencies": ["application_credentials"],
   "documentation": "https://www.home-assistant.io/integrations/ondilo_ico",
   "integration_type": "hub",
   "iot_class": "cloud_polling",
diff --git a/homeassistant/components/ondilo_ico/oauth_impl.py b/homeassistant/components/ondilo_ico/oauth_impl.py
deleted file mode 100644
index e1c6e6fdb9071f00152da3147c49232781dbdeff..0000000000000000000000000000000000000000
--- a/homeassistant/components/ondilo_ico/oauth_impl.py
+++ /dev/null
@@ -1,32 +0,0 @@
-"""Local implementation of OAuth2 specific to Ondilo to hard code client id and secret and return a proper name."""
-
-from homeassistant.core import HomeAssistant
-from homeassistant.helpers.config_entry_oauth2_flow import LocalOAuth2Implementation
-
-from .const import (
-    DOMAIN,
-    OAUTH2_AUTHORIZE,
-    OAUTH2_CLIENTID,
-    OAUTH2_CLIENTSECRET,
-    OAUTH2_TOKEN,
-)
-
-
-class OndiloOauth2Implementation(LocalOAuth2Implementation):
-    """Local implementation of OAuth2 specific to Ondilo to hard code client id and secret and return a proper name."""
-
-    def __init__(self, hass: HomeAssistant) -> None:
-        """Just init default class with default values."""
-        super().__init__(
-            hass,
-            DOMAIN,
-            OAUTH2_CLIENTID,
-            OAUTH2_CLIENTSECRET,
-            OAUTH2_AUTHORIZE,
-            OAUTH2_TOKEN,
-        )
-
-    @property
-    def name(self) -> str:
-        """Name of the implementation."""
-        return "Ondilo"
diff --git a/homeassistant/generated/application_credentials.py b/homeassistant/generated/application_credentials.py
index b891e807a7fb745eab52e700b2745d892699a6c0..68c6de405e6d1938e0df88aa20bd872f44593b93 100644
--- a/homeassistant/generated/application_credentials.py
+++ b/homeassistant/generated/application_credentials.py
@@ -25,6 +25,7 @@ APPLICATION_CREDENTIALS = [
     "neato",
     "nest",
     "netatmo",
+    "ondilo_ico",
     "onedrive",
     "point",
     "senz",
diff --git a/tests/components/ondilo_ico/conftest.py b/tests/components/ondilo_ico/conftest.py
index d35e5ac000389193446adb4f8d40f6cb46a2ffb0..891f60eb5492bcb4a5b34a7e18707839fc418762 100644
--- a/tests/components/ondilo_ico/conftest.py
+++ b/tests/components/ondilo_ico/conftest.py
@@ -7,6 +7,7 @@ from unittest.mock import MagicMock, patch
 import pytest
 
 from homeassistant.components.ondilo_ico.const import DOMAIN
+from homeassistant.util.json import JsonArrayType
 
 from tests.common import (
     MockConfigEntry,
@@ -71,7 +72,7 @@ def ico_details2() -> dict[str, Any]:
 
 
 @pytest.fixture(scope="package")
-def last_measures() -> list[dict[str, Any]]:
+def last_measures() -> JsonArrayType:
     """Pool measurements."""
     return load_json_array_fixture("last_measures.json", DOMAIN)
 
diff --git a/tests/components/ondilo_ico/test_config_flow.py b/tests/components/ondilo_ico/test_config_flow.py
index deab2a8e0b9e4bf62717b8aeb0b653bfa91c833b..19407cecb9d8951614a184876d8f4888c4ecaf31 100644
--- a/tests/components/ondilo_ico/test_config_flow.py
+++ b/tests/components/ondilo_ico/test_config_flow.py
@@ -4,15 +4,13 @@ from unittest.mock import patch
 
 import pytest
 
-from homeassistant import config_entries, setup
+from homeassistant import config_entries
 from homeassistant.components.ondilo_ico.const import (
     DOMAIN,
     OAUTH2_AUTHORIZE,
-    OAUTH2_CLIENTID,
-    OAUTH2_CLIENTSECRET,
+    OAUTH2_CLIENT_ID as CLIENT_ID,
     OAUTH2_TOKEN,
 )
-from homeassistant.const import CONF_CLIENT_ID, CONF_CLIENT_SECRET
 from homeassistant.core import HomeAssistant
 from homeassistant.data_entry_flow import FlowResultType
 from homeassistant.helpers import config_entry_oauth2_flow
@@ -21,13 +19,12 @@ from tests.common import MockConfigEntry
 from tests.test_util.aiohttp import AiohttpClientMocker
 from tests.typing import ClientSessionGenerator
 
-CLIENT_ID = OAUTH2_CLIENTID
-CLIENT_SECRET = OAUTH2_CLIENTSECRET
 
-
-async def test_abort_if_existing_entry(hass: HomeAssistant) -> None:
+async def test_abort_if_existing_entry(
+    hass: HomeAssistant, config_entry: MockConfigEntry
+) -> None:
     """Check flow abort when an entry already exist."""
-    MockConfigEntry(domain=DOMAIN).add_to_hass(hass)
+    config_entry.add_to_hass(hass)
 
     result = await hass.config_entries.flow.async_init(
         DOMAIN, context={"source": config_entries.SOURCE_USER}
@@ -43,15 +40,6 @@ async def test_full_flow(
     aioclient_mock: AiohttpClientMocker,
 ) -> None:
     """Check full flow."""
-    assert await setup.async_setup_component(
-        hass,
-        DOMAIN,
-        {
-            DOMAIN: {CONF_CLIENT_ID: CLIENT_ID, CONF_CLIENT_SECRET: CLIENT_SECRET},
-            "http": {"base_url": "https://example.com"},
-        },
-    )
-
     result = await hass.config_entries.flow.async_init(
         DOMAIN, context={"source": config_entries.SOURCE_USER}
     )
diff --git a/tests/components/ondilo_ico/test_sensor.py b/tests/components/ondilo_ico/test_sensor.py
index 0043d22f6c0592f2cdfe58f0d53edfdcaafef0c1..c944353724edf564fafd9dafc59ac17a6c2d5fab 100644
--- a/tests/components/ondilo_ico/test_sensor.py
+++ b/tests/components/ondilo_ico/test_sensor.py
@@ -45,7 +45,9 @@ async def test_no_ico_for_one_pool(
     # Only the second pool is created
     assert len(hass.states.async_all()) == 7
     assert hass.states.get("sensor.pool_1_temperature") is None
-    assert hass.states.get("sensor.pool_2_rssi").state == next(
+    state = hass.states.get("sensor.pool_2_rssi")
+    assert state is not None
+    assert state.state == next(
         str(item["value"]) for item in last_measures if item["data_type"] == "rssi"
     )