Logga in via google och microsoft samt SSO

Permalänk
Medlem

Logga in via google och microsoft samt SSO

Utvecklar en liten webbtjänst med stängd registrering / användarhantering.

Tjänsten riktar sig till företag.

Enbart jag som admin ska kunna bjuda in och ge nya användare tillträdde till tjänsten.

Jag skulle vilja att användarna loggas in via sitt företagskonto hos Google eller Microsoft. Kan givetvis få fungera även med inbjudna privata gmail eller outlook konton också.

Gärna SSO så att det slipper logga in på min tjänst om de redan är inloggade på sin dator eller någon annan webbtjänst.

Någon som har erfarenhet av detta?

Hur ska man ge användare tillträdde, d.v.s hur ska Google eller Microsoft veta vilka användare i ett domän som ska ha tillträdde till min tjänst? Jag vill kanske inte ge alla användarna i ett helt domän tillträdde.

Behöver företagen ("mina kunder") göra något i sin ända för att det ska fungera och i synnerhet med avseende på SSO? Tjänsten riktar sig inte till företag utan enskilda användare på företag - så helst vill jag inte blanda in deras IT-avdelning för att en endaste sketen användare ska kunna använda min tjänst.

I övrigt söker jag lite inspiration, råd och och dåd på upplägg för att få den så enkelt, smutt och minimalistiskt som möjligt utan att ge användaren ytterligare ett konto att hålla reda på.

Permalänk
Medlem

Du vill läsa på om OIDC och OAuth 2.0

Sånt här är inte så svårt att få igång, men att göra det på rätt sätt är lite knixigt, så det är väl värt att läsa på ordentligt och förstå hur alla pusselbitar sitter ihop.

Visa signatur

:(){ :|:& };:

🏊🏻‍♂️   🚴🏻‍♂️   🏃🏻‍♂️   ☕

Permalänk
Medlem

Om du utvecklar en webtjänst i JavaScript så kan jag tipsa om Auth.js.

Som @GLaDER sa, tekniken under huven baseras på OAuth 2.0 och OpenID Connect och jag skulle starkt rekommendera att läsa på om tekniken så att du inte introducerar säkerhetsproblem.

Permalänk
Medlem
Skrivet av orp:

Om du utvecklar en webtjänst i JavaScript så kan jag tipsa om Auth.js.

Som @GLaDER sa, tekniken under huven baseras på OAuth 2.0 och OpenID Connect och jag skulle starkt rekommendera att läsa på om tekniken så att du inte introducerar säkerhetsproblem.

Auth.js verkar väldigt smutt men har ingen koppling med Microsoft?

Permalänk
Medlem

Kortfattat behöver dina kunders IT koppla din applikation mot t.ex Entra ID i Microsofts fall, där registreras det som en App. Kundens IT i sin ände stryper vilka som har tillgång i form av en grupp i Entra.

Visa signatur

- Xbox One Series X -
- Mac Mini M1 -
- MacBook Pro 14 M3 Pro -
- iPhone 15 Pro -

Permalänk
Medlem
Skrivet av KaakaaN:

Kortfattat behöver dina kunders IT koppla din applikation mot t.ex Entra ID i Microsofts fall, där registreras det som en App. Kundens IT i sin ände stryper vilka som har tillgång i form av en grupp i Entra.

Mmm jag märkte det nu när jag testade auth.js demo och försökte använda MS Entra ID med mitt jobbkonto:

Det är lite synd för steget via kundens IT-avdelningen känns alldeles för jobbigt och krävande.

Testa med Google via mitt andra jobbkonto (Google Workspace) och det fungerade fint utan error eller problem att logga in.

Problemet är väl att typ 99% kör Microsoft och bara några få unicorns som jag kör Google eller bägge...

Permalänk

Jag använder mig utav Auth.js på jobbet för att limitera att enbart konton som tillhör företaget kan logga in, jag använder mig utav Microsoft Entra ID för att logga in och jag gör det på följande sätt:
(Detta är byggt i ett NextJS projekt)

Auth.ts:

import NextAuth from "next-auth" import MicrosoftEntraID from "@auth/core/providers/microsoft-entra-id"; export const { handlers, signIn, signOut, auth } = NextAuth({ providers: [ MicrosoftEntraID({ clientId: process.env.AUTH_MICROSOFT_ENTRA_ID_ID, issuer: process.env.AUTH_MICROSOFT_ENTRA_ID_ISSUER, clientSecret: process.env.AUTH_MICROSOFT_ENTRA_ID_SECRET, authorization: { params: { scope: "openid profile email User.Read", }, }, }), ], secret: process.env.AUTH_SECRET })

Middleware.ts

export { auth as middleware } from "@/auth"

Sedan så finns det en API endpoint:

// API path: /app/api/auth/[...nextauth]/route.ts import { handlers } from "@/auth" // Refererar till auth.ts som ligger i root mappen export const { GET, POST } = handlers

Sedan för att logga in en användare så kan du i en React komponent göra:

<form action={async () => { "use server"; await signIn("microsoft-entra-id", { redirectTo: "/", }); }} > <Button type="submit" className="w-full"> Sign in with Microsoft </Button> </form>

För att sedan kolla ifall en person har en valid session så kan du exempelvis göra:

const session = await auth(); if (!session) { return redirect("/login"); }

Detta är högst troligen inte det bästa och smidigaste sättet att kontrollera samt sköta autentisering, du skulle i din middleware kontrollera API endpoint och sidor som du vill skydda ifall en person har en giltig session där igenom istället.

Se till också att du registrerar din applikation i Microsoft Azure portalen och att du använder korrekta secrets!