Skip to main content

Dev Station Technology

Identity and access

Who is allowed to see what, enforced where it counts

We have shipped identity on both sides of the market: Azure AD B2C where customers sign themselves up, and Keycloak where one deployment serves several organisations that must never see each other.

Book a 30-minute scoping call See the implementations

A permission checked only in the interface is not a permission. That is where most of this work starts.

Access model, checked at the server on every request.
Engineer, own site Read and submit inspectionsAllowed
Engineer, another site Same role, different tenantDenied
Manager, whole region Read all, edit noneAllowed
Free tier user Premium feature requestedDenied
Shared device, shift change Session follows the personHandled
Every row is a server-side decision, not a hidden button.

Identity work we have delivered

  • Hydrajaws LimitedAzure AD B2C across free and paid tiers
  • Verify AutoAzure AD B2C on compliance software
  • IoT WorkzKeycloak, single sign-on, multi-tenant
  • Tenant isolationSeveral customers, one deployment

Two different problems

Staff identity and customer identity are not the same job

They use similar words and completely different products. Choosing the wrong one is expensive to reverse once accounts exist.

Staff and internal

People your organisation employs

  • Accounts created by IT, removed when someone leaves
  • Single sign-on against your existing directory
  • Roles map to job titles and departments
  • Volume in the hundreds or thousands

Usually your existing directory extended, rather than anything new built.

Customer facing

People who sign themselves up

  • Self-service registration, password reset, verification
  • Entitlements decide features, not job titles
  • Several organisations on one deployment, isolated
  • Volume unbounded, and every account is a support cost
  • Some buyers demand their own single sign-on

Both of our identity builds are this kind. Azure AD B2C for tiered products, Keycloak for multi-tenant platforms.

Plain definitions

Two questions worth settling before anyone builds a login

Both come up on the first call, and the second one gets answered with acronyms far more often than with reasons.

IAM or CIAM: what is the difference?

Identity and access management usually means staff. Accounts created by your IT team, removed when somebody leaves, mapped to job titles, sitting in a directory you already run. Volume is measured in hundreds.

Customer identity and access management means people who sign themselves up. Registration, verification, password reset, entitlements that decide features rather than job titles, and several organisations kept apart on one deployment. Volume is unbounded and every account carries a support cost. Both of our identity builds are the second kind.

OAuth, OIDC, SAML and SCIM: which do you need?

OAuth 2.0 grants an application limited access to something on your behalf. OpenID Connect sits on top of it and is how the application learns who you are, which makes it the default for anything new. SAML does the same job through older machinery and remains common inside large organisations.

SCIM is different. It synchronises accounts, so a person removed from a corporate directory disappears from your product without anybody remembering to do it. You need it the day a customer with thousands of staff asks how leavers are handled.

What we build

Six parts, and the order matters

The access model, written down
Roles, tenants and what each may do, agreed before any code. Most access bugs are modelling mistakes, not coding ones.
Server-side enforcement
Every request checked where the data is served. The interface hides things for convenience, never for security.
Tenant isolation
Customers separated so a query cannot cross the boundary even by accident. This is how the IoT platform runs several customers on one deployment.
Entitlements for tiers
Free and paid enforced server side, as on the Hydrajaws apps, so a premium feature cannot be switched on from the device.
Sign-up and recovery flows
Registration, verification, password reset and account recovery, which is where most customer identity projects actually leak.
Federation when a buyer demands it
Their directory, their single sign-on, without forking your product for one customer.

What people ask us for

Six identity jobs that arrive most often

The first three are the builds we have shipped. The rest are extensions of the same access model.

Self-service sign-up for a product
Registration, verification, password reset and recovery. This is where customer identity projects actually leak, rather than at the login screen.
Tiers enforced where they cannot be bypassed
Free and paid from one codebase, checked at the server. The Hydrajaws apps work this way, so the paid features cannot be switched on from the device.
Tenant isolation on one deployment
Several customers, one platform, no query able to cross the boundary even by accident. This is the Keycloak work on IoT Workz.
Federation to a buyer directory
A large customer wants their own single sign-on. Doing it without forking the product for one account is the whole trick.
Replacing a homegrown user table
The login somebody wrote in a fortnight three years ago, now holding real accounts. Migration has to keep everyone signed in and lose nobody.
Adding multi-factor or passkeys
Usually driven by a customer security questionnaire rather than by an internal decision, which means a deadline arrives with it.

Tell us who signs in

Three fields. An engineer reads it, not a sales rep. You get an answer within one working day.

  • We map roles, tenants and entitlements
  • You get a written access model and a cost band
  • No obligation, and no phone number needed to start

Our work

Two identity builds, two different shapes

Case study, United Kingdom

One codebase, two tiers, enforced properly

Hydrajaws wanted a free app that reached the market and a premium app that justified its price. We put user management behind Azure AD B2C and enforced entitlements server side, so the free tier cannot become the paid tier on a device. The premium tier reads torque values directly from the instrument through the KTC SDK.

  • Azure AD B2C
  • Xamarin
  • .NET
  • Angular
Increase in potential clients after launch
500%
Tiers from one shared codebase
2
Entitlements enforced
Server side

Case study, IoT platform

Several customers, one deployment, no leakage

IoT Workz needed enterprise identity without paying a SaaS vendor for the privilege. We built single sign-on through Keycloak with tenant isolation, so each customer sees only their own devices and data, on infrastructure the client owns.

  • Keycloak
  • OAuth2
  • Vault
  • Kubernetes
Tenants isolated on one deployment
Multi
Platform and identity ownership
100%
Critical alarms in live operation
Zero

Technology

What we build identity on

Two products cover almost everything we are asked for, and we pick between them by who is signing in.

Azure AD B2C
Where customers sign themselves up and tiers decide what they can do. Shipped on the Hydrajaws apps and on Verify Auto.
Keycloak
Where one deployment serves several organisations that must never see each other, self-hosted so identity is not rented. Shipped on IoT Workz.
Protocols
OAuth 2.0 and OpenID Connect by default. SAML where a corporate buyer requires it, which both products support.
Provisioning
SCIM where a customer needs joiners and leavers synchronised from their own directory rather than handled by email.
Enforcement
Every request checked where the data is served. The interface hides things for convenience, never for security.
Session handling
Sessions that follow the person rather than the handset, which matters the moment engineers start sharing a device between shifts.

Who does the work

Twenty engineers, eight of them senior

Access bugs are modelling mistakes far more often than coding mistakes, so the useful work happens in a conversation before anybody opens an editor. That conversation goes better with the engineer who will build it than with an account manager.

Engineers in Ho Chi Minh City
20
Senior engineers
8
Average experience
5+ yrs
Working with US, UK and EU teams
10+ yrs

You interview whoever we put forward. Ask them to describe how one tenant could see another, because an engineer who has thought about it will have an answer ready.

How we work

Five engagement models, and you pick how much you keep

The models differ in one thing: how much of the management you hand over. Everything else, including who owns the code, is the same in all five.

Changing model later is normal. Augmentation into a dedicated team is the common direction, and the people stay.

Engineers join your team and work inside your process, your board and your code review.

Team control
You manage the day to day
Pricing
Monthly per person, by role and seniority
Minimum
1 month

A team that works only on your product, with a lead on our side running delivery.

Team control
Shared. Our lead runs delivery, you set priorities
Pricing
Monthly per role, lead included
Minimum
3 months

A long-term engineering site under your standards, where we carry recruitment, HR, payroll and equipment.

Team control
You direct the work, we run operations
Pricing
Monthly per role plus site costs
Minimum
6 months

One price for a scope that is genuinely settled, with the overrun carried by us.

Team control
We deliver, you accept against written criteria
Pricing
Fixed bid, paid against milestones
Minimum
Project based, usually 10 to 14 weeks

Everything in the centre model, with the whole team moving into your own Vietnamese entity on an agreed date.

Team control
Transfers from us to you
Pricing
Monthly per role, transfer price agreed up front
Minimum
2 to 6 years

FAQs

Questions we get on the first call

Should we build our own login?

No. Use a provider. Password storage, reset flows, verification and account recovery are solved problems with expensive failure modes.

Azure AD B2C, Keycloak, or something else?

B2C where you are already in Azure and want a managed service. Keycloak where you need to self-host or avoid per-user pricing. We have shipped both in production.

Can one customer demand their own single sign-on?

Yes, and large ones will. We build federation in from the start so it does not mean a separate version of your product.

How do you stop one tenant seeing another?

Isolation enforced where data is served, plus tests that specifically attempt to cross the boundary. Assuming a filter will always be applied is how leaks happen.

Can you fix an access model we already have?

Yes. We start by writing down what the current rules actually are, which is often the first time anyone has.

What about staff accounts?

Usually your existing directory, extended rather than replaced. We will say if that is the cheaper answer.

What does an identity build cost, and how long does it take?

Adding self-service sign-up and roles to an existing product is usually three to five weeks. A full access model with tenant isolation, entitlements and federation, designed and enforced across an existing system, takes longer. Replacing identity inside a live product with existing accounts is longer again, because migration has to keep everybody signed in. How it is billed follows the engagement model above.

Should we use Auth0 or Okta instead?

Often, yes, and it is a fair question to put to us. They are good products and they remove work. The cases where they stop making sense are per-user pricing at consumer volumes, a buyer who will not accept identity sitting in a third-party cloud, and self-hosted delivery where your customer runs the whole platform. That last one is why IoT Workz runs Keycloak rather than a hosted service.

What about multi-factor authentication and passkeys?

Both Azure AD B2C and Keycloak support them, so the build cost is small and the real work is the policy. Who is forced to use it, what happens when somebody loses a device, and whether an engineer standing on a roof with no signal can still get in. Decide those three and the implementation follows.

Describe who must never see what

That sentence is the access model. Thirty minutes is usually enough to write it down properly and spot where the current system does not hold it.

Book a 30-minute scoping call Staff or customer identity

Let's Talk