Ultimate Guide For IDS Setup

:locked_with_key: IDS Setup for Production Apps — The Complete Walkthrough

Hey Neutrinos community! :waving_hand:

If you’ve been struggling with IDS (Identity Service) configuration — especially for production-based applications — this post is for you. I’ve put together everything you need, from registering your app all the way to wiring up standalone credentials and callback URIs. Let’s get into it! :rocket:


:compass: What We’re Covering

  • Registering your app with IDS

  • Frontend setup (environments + OAuth client)

  • Backend standalone credential config

  • Setting up login/logout callback URIs


STEP 1 — Register Your App with IDS :gear:

Head into your Neutrinos app settings and do the following:

:white_check_mark: Enable the IDS toggle — this activates identity service for your app

:white_check_mark: Add your Application Name — how your app identifies itself to IDS

:white_check_mark: Skip Team Check (optional) — turn this on if you want to allow external users to log in without going through Active Directory / team validation

:white_check_mark: Skip Consent (optional) — turn this on if your users already have an active IDS session and you want to skip the consent screen on re-login


STEP 2 — Frontend Setup :desktop_computer:

2a. Set the Environment Flag

In your app’s Environments config, add:

"isIDSEnabled": true


2b. Install the OAuth Client

npm i neutrinos-oauth-client


2c. Import It in onInit

Use a Dependency Node inside your onInit event to import neutrinos-oauth-client.

:warning: Don’t forget — the Injectable toggle must be ON, otherwise the module won’t be available across your pages!


2d. Use It Anywhere in Your Page

Once imported, you can call its methods freely. Here’s the basic login guard pattern most of us use:

if (!page.noc.isLoggedIn) {
  await page.noc.login("home")
}

Simple, clean, works great. :raising_hands:


:light_bulb: New to IDS? Before going further, complete the foundational setup from the official guide: :open_book: IDS Authentication Backend and Frontend Setup — Community / Training, Academy & Certifications Get that done first, then come back here for the production bits below :backhand_index_pointing_down:


STEP 3 — Production Config: Standalone IDS Credentials :key:

This is where most people get stuck. For production apps, you’re not using the shared platform IDS — you need to configure the standalone IDS credentials specific to your project.

There are two files you need to update in SSD:

What Where
config.ts server → src → config → config.ts
config.json designs → server → config.json

In both files, find the ids object and plug in your values:

config.ts

ids: {
  clientId: "YOUR_CLIENT_ID",
  secret: "YOUR_CLIENT_SECRET",
  issuerURL: "https://your-standalone-ids-url"
}

config.json

"ids": {
  "clientId": "YOUR_CLIENT_ID",
  "secret": "YOUR_CLIENT_SECRET",
  "issuerURL": "https://your-standalone-ids-url"
}

:pushpin: These credentials come from the standalone IDS instance created for your project — not the global Neutrinos platform IDS.


STEP 4 — Add Callback URIs in Your IDS Schema :link:

Almost there! Last step is registering your callback URLs inside your project’s IDS schema.

Where to find it: Go to the IDS schema created for your project → open the Client table → find the row for your clientId → add the URIs.

Add both localhost AND your production domain:

# Login Callback
http://localhost:<PORT>/login/cb
https://your-production-domain.com/login/cb

# Logout Callback  
http://localhost:<PORT>/logout/cb
https://your-production-domain.com/logout/cb

:warning: Replace <PORT> with your actual backend port (e.g. 3000, 8080) and the domain with wherever your IDS-configured backend is deployed.


:white_check_mark: Pre-Launch Checklist

Before you go live, run through this quick check:

Platform

  • [ ] IDS toggle ON

  • [ ] App name set

  • [ ] Skip Team Check / Skip Consent configured as needed

Frontend

  • [ ] isIDSEnabled: true in Environments

  • [ ] neutrinos-oauth-client installed

  • [ ] Dependency Node added in onInit

  • [ ] Injectable toggle ON

  • [ ] Login guard implemented on protected pages

Backend

  • [ ] clientId, secret, issuerURL set in config.ts

  • [ ] Same values set in config.json

IDS Schema

  • [ ] Login callback URIs added (localhost + production)

  • [ ] Logout callback URIs added (localhost + production)


:file_folder: Quick File Reference

designs/
└── server/
    └── config.json         ✏️ Add IDS credentials here

server/
└── src/
    └── config/
        └── config.ts       ✏️ Add IDS credentials here


That’s it! Hope this saves someone a few hours of digging around. :grinning_face_with_smiling_eyes:

If anything’s unclear or you hit a snag, drop a comment below — happy to help. And if this helped you, give it a :+1: so others can find it easily!

Happy building! :high_voltage:

— Posted in Community / Training, Academy & Certifications

Hey @Sidharth_K_P ,

Awesome guide!
You might need to keep up with this:

https://community.neutrinos.com/tag/identity-server/36

Hi @Sam
I have configured IDS authentication for my application by following the “Ultimate Guide for IDS Setup”.

The IDS authentication is working correctly in my local environment, but the same configuration is not working in the production environment.
Configuration Done

As mentioned in the IDS setup guide, I have configured the following:

1. Frontend

"isIDSEnabled": true

neutrinos-oauth-client is installed and configured.


my config.ts:
ids: {

client_id: 'v……………',

client_secret:

  'f2rrA…………………………….',

issuerURL: 'https://ids.neutrinos.co',

enabled: true,

}
config.json:
“ids”: {

    "client_id": "vkA……………",

    "client_secret": "f2rr………………",

    "issuerURL": "https://ids.neutrinos.co",

    "enabled": true

}


Issue

When I access the production application and try to log in, the IDS login flow starts, but after authentication the callback is not completed successfully.
api logs:
11:10:58 AM

============================================

11:10:58 AM

Nonce: c64dc093aa4ab47c08a65f92423c78f1

11:10:58 AM

State: 811e28b7eb5c3f0d3c98ec33407fc3dc

11:10:58 AM

}

11:10:58 AM

redirectTo: ’ N-App ’

11:10:58 AM

isMobile: undefined,

11:10:58 AM

nonce: ‘c64dc093aa4ab47c08a65f92423c78f1’,

11:10:58 AM

state: ‘811e28b7eb5c3f0d3c98ec33407fc3dc’,

11:10:58 AM

Session data: {

11:10:58 AM

Session ID: nYop4E0pZPa9eiNoYRRY5hIl8jz1Vi3U

11:10:58 AM

========== IDS LOGIN SESSION DEBUG ==========

11:11:01 AM

============================================

11:11:01 AM

Nonce: f8cd44f68e58e05459f2af02299e16ea

11:11:01 AM

State: 87733dcfee292f5181e9bcd269e9f5bf

11:11:01 AM

}

11:11:01 AM

redirectTo: undefined

11:11:01 AM

isMobile: undefined,

11:11:01 AM

nonce: ‘f8cd44f68e58e05459f2af02299e16ea’,

11:11:01 AM

state: ‘87733dcfee292f5181e9bcd269e9f5bf’,

11:11:01 AM

Session data: {

11:11:01 AM

Session ID: nYop4E0pZPa9eiNoYRRY5hIl8jz1Vi3U

11:11:01 AM

========== IDS LOGIN SESSION DEBUG ==========

11:11:01 AM

at async file:///home/api/build/sd-services/ids.js:107:22

11:11:01 AM

at async ids.sd_pHve0ZPaAyWTAxdi (file:///home/api/build/sd-services/ids.js:355:18)

11:11:01 AM

at process.callbackTrampoline (node:internal/async_hooks:130:17)

11:11:01 AM

at process.processImmediate (node:internal/timers:454:9)

11:11:01 AM

at runNextTicks (node:internal/process/task_queues:64:3)

11:11:01 AM

at processTicksAndRejections (node:internal/process/task_queues:95:5)

11:11:01 AM

at ids.sd_i2u5MMtHPw4W5BeQ (file:///home/api/build/sd-services/ids.js:370:29)

11:11:01 AM

at ids.sd_ctYfKQt9V0tX2Z49 (file:///home/api/build/sd-services/ids.js:383:52)

11:11:01 AM

TypeError: Cannot read properties of undefined (reading ‘nonce’)

11:11:01 AM

========================================

11:11:01 AM

Session data: undefined

11:11:01 AM

Session data exists: false

11:11:01 AM

Session ID: HuNvTEZEuZS3tfKo70xHNUTprjmlYwLz

11:11:01 AM

Session exists: true

11:11:01 AM

URL: https://motor-ui.neutrinos-apps.com/api/login/cb?code=yu6KH_-iFu8GDNGJ5h8lQWbxqSWf7foAPHRYwWMBwHH&state=811e28b7eb5c3f0d3c98ec33407fc3dc

11:11:01 AM

========== IDS CALLBACK DEBUG ==========

11:11:04 AM

============================================

11:11:04 AM

Nonce: 2c6382de5e983fad6a78c240e58cf2c0

11:11:04 AM

State: f3e64d00f3931178110c8ec87b3c5ae9

11:11:04 AM

}

11:11:04 AM

redirectTo: undefined

11:11:04 AM

isMobile: undefined,

11:11:04 AM

nonce: ‘2c6382de5e983fad6a78c240e58cf2c0’,

11:11:04 AM

state: ‘f3e64d00f3931178110c8ec87b3c5ae9’,

11:11:04 AM

Session data: {

11:11:04 AM

Session ID: nYop4E0pZPa9eiNoYRRY5hIl8jz1Vi3U

11:11:04 AM

========== IDS LOGIN SESSION DEBUG ==========

11:11:04 AM

at async file:///home/api/build/sd-services/ids.js:107:22

11:11:04 AM

at async ids.sd_pHve0ZPaAyWTAxdi (file:///home/api/build/sd-services/ids.js:355:18)

11:11:04 AM

at process.callbackTrampoline (node:internal/async_hooks:130:17)

11:11:04 AM

at process.processImmediate (node:internal/timers:454:9)

11:11:04 AM

at runNextTicks (node:internal/process/task_queues:64:3)

11:11:04 AM

at processTicksAndRejections (node:internal/process/task_queues:95:5)

11:11:04 AM

at ids.sd_i2u5MMtHPw4W5BeQ (file:///home/api/build/sd-services/ids.js:370:29)

11:11:04 AM

at ids.sd_ctYfKQt9V0tX2Z49 (file:///home/api/build/sd-services/ids.js:383:52)

11:11:04 AM

TypeError: Cannot read properties of undefined (reading ‘nonce’)

11:11:04 AM

========================================

11:11:04 AM

Session data: undefined

11:11:04 AM

Session data exists: false

11:11:04 AM

Session ID: 9b49wYNKgGD-chH0n1-dSTJdhWQF3Y2L

11:11:04 AM

Session exists: true

11:11:04 AM

URL: https://motor-ui.neutrinos-apps.com/api/login/cb?code=49lz4G-rfhxlEMsmfRo1Mq9fpKUbAe9NpGnYTf9DcMs&state=87733dcfee292f5181e9bcd269e9f5bf

11:11:04 AM

========== IDS CALLBACK DEBUG ==========

11:11:07 AM

============================================

11:11:07 AM

Nonce: f52976f47a94aab4a0329ea2da1071c3

11:11:07 AM

State: af41c8c4bff84c7dfe2ffb307752be5e

11:11:07 AM

}

11:11:07 AM

redirectTo: undefined

11:11:07 AM

isMobile: undefined,

11:11:07 AM

nonce: ‘f52976f47a94aab4a0329ea2da1071c3’,

11:11:07 AM

state: ‘af41c8c4bff84c7dfe2ffb307752be5e’,

11:11:07 AM

Session data: {

11:11:07 AM

Session ID: nYop4E0pZPa9eiNoYRRY5hIl8jz1Vi3U

11:11:07 AM

========== IDS LOGIN SESSION DEBUG ==========

11:11:07 AM

at async file:///home/api/build/sd-services/ids.js:107:22

11:11:07 AM

at async ids.sd_pHve0ZPaAyWTAxdi (file:///home/api/build/sd-services/ids.js:355:18)

11:11:07 AM

at process.callbackTrampoline (node:internal/async_hooks:130:17)

11:11:07 AM

at process.processImmediate (node:internal/timers:454:9)

11:11:07 AM

at runNextTicks (node:internal/process/task_queues:64:3)

11:11:07 AM

at processTicksAndRejections (node:internal/process/task_queues:95:5)

11:11:07 AM

at ids.sd_i2u5MMtHPw4W5BeQ (file:///home/api/build/sd-services/ids.js:370:29)

11:11:07 AM

at ids.sd_ctYfKQt9V0tX2Z49 (file:///home/api/build/sd-services/ids.js:383:52)

11:11:07 AM

TypeError: Cannot read properties of undefined (reading ‘nonce’)

11:11:07 AM

========================================

11:11:07 AM

Session data: undefined

11:11:07 AM

Session data exists: false

11:11:07 AM

Session ID: sbbNKHfua1FAHylAQbYuzzUsaf6jmnOf

11:11:07 AM

Session exists: true

11:11:07 AM

URL: https://motor-ui.neutrinos-apps.com/api/login/cb?code=tAl2RUO0Lnm7Rm8PSQBEHFD3vDmnKxQsuQFywwqQoox&state=f3e64d00f3931178110c8ec87b3c5ae9

11:11:07 AM

========== IDS CALLBACK DEBUG ==========

11:11:10 AM

at async file:///home/api/build/sd-services/ids.js:107:22

11:11:10 AM

at async ids.sd_pHve0ZPaAyWTAxdi (file:///home/api/build/sd-services/ids.js:355:18)

11:11:10 AM

at process.callbackTrampoline (node:internal/async_hooks:130:17)

11:11:10 AM

at process.processImmediate (node:internal/timers:454:9)

11:11:10 AM

at runNextTicks (node:internal/process/task_queues:64:3)

11:11:10 AM

at processTicksAndRejections (node:internal/process/task_queues:95:5)

11:11:10 AM

at ids.sd_i2u5MMtHPw4W5BeQ (file:///home/api/build/sd-services/ids.js:370:29)

11:11:10 AM

at ids.sd_ctYfKQt9V0tX2Z49 (file:///home/api/build/sd-services/ids.js:383:52)

11:11:10 AM

TypeError: Cannot read properties of undefined (reading ‘nonce’)

11:11:10 AM

========================================

11:11:10 AM

Session data: undefined

11:11:10 AM

Session data exists: false

11:11:10 AM

Session ID: EnwAxQ-G2vRrW8HoxwIMZaUutC2GNVRz

11:11:10 AM

Session exists: true

11:11:10 AM

URL: https://motor-ui.neutrinos-apps.com/api/login/cb?code=uMvLw4lmx9YlKNBJvKE8T6O1OiWszronMh72aNHHOTz&state=af41c8c4bff84c7dfe2ffb307752be5e

11:11:10 AM

========== IDS CALLBACK DEBUG ==========

11:11:11 AM

========================================

11:11:11 AM

}

11:11:11 AM

nonce: ‘f52976f47a94aab4a0329ea2da1071c3’

11:11:11 AM

state: ‘af41c8c4bff84c7dfe2ffb307752be5e’,

11:11:11 AM

Session data: {

11:11:11 AM

Session data exists: true

11:11:11 AM

Session ID: nYop4E0pZPa9eiNoYRRY5hIl8jz1Vi3U

11:11:11 AM

Session exists: true

11:11:11 AM

URL: https://motor-ui.neutrinos-apps.com/api/login/cb?code=uMvLw4lmx9YlKNBJvKE8T6O1OiWszronMh72aNHHOTz&state=af41c8c4bff84c7dfe2ffb307752be5e

11:11:11 AM

========== IDS CALLBACK DEBUG ==========

could you please verify:

  1. Whether the production clientId and secret are correct.

  2. Whether the configured issuerURL is correct for the standalone production IDS.

  3. Whether the production login/logout callback URLs are correctly registered.

  4. Whether any additional IDS configuration is required for production.

  5. Whether there are any reverse-proxy, HTTPS, host, or redirect-related configurations required.

  6. Whether the production backend is able to communicate with the standalone IDS instance.