angular - Aktivere CORS på Azure Active Directory
Jeg prøver å få en tilgangstoken fra Azure Active Directory programmatisk ved å bruke følgende metode i en Angular 6-applikasjon.
let body1 = new FormData()
body1.append("resource", environment.config.clientId)
body1.append("grant_type", "client_credentials")
body1.append("client_id", environment.config.clientId)
body1.append("client_secret", "*****")
return this._http.post("https://login.microsoftonline.com/" + environment.config.tenant + "/oauth2/token", body1)
Jeg klarte å hente en tilgangstoken gjennom denne URL-en i Postman, men blir blokkert av CORS når jeg kaller den gjennom applikasjonen min. Feilen er nedenfor.
Failed to load https://login.microsoftonline.com/*****/oauth2/token:
Response to preflight request doesn't pass access control check: No 'Access-
Control-Allow-Origin' header is present on the requested resource. Origin
'http://localhost:4200' is therefore not allowed access.
Så, hvordan aktiverer jeg CORS på Azure Active Directory for alle domener?
Svar #1
Enkelt, du gjør ikke.
Det du gjør er å eksponere appens klienthemmelighet for offentligheten. Husk at forespørselen vil bli gjort fra brukerens enhet. Så de kan observere den og fange opp hemmeligheten din. Dette er grunnen til at token-endepunktet ikke støtter CORS, og sannsynligvis aldri vil gjøre det.
OPPDATERING: Token-endepunktet støtter nå CORS, hvis du konfigurerer en svar-URL med SPA-plattformen. Dette tillater bruk av autorisasjonskodeflyt med PKCE. MSAL.js 2.0 støtter denne flyten. Merk at dette fortsatt ikke involverer en klienthemmelighet.
Måten å skaffe tokens fra en front-end JS-app på er å bruke Implicit Grant Flow eller Authorization Code flow med PKCE. Eller hvis du trenger et app-only token, må du gjøre forespørselen du prøvde fra en back-end-applikasjon.
Implicit grant flow lar deg få tokens direkte fra autorisasjonsendepunktet når brukeren logger inn. Du kan bruke ADAL.JS/MSAL.JS for å hjelpe med dette. Du kan ikke ha tokens uten en brukeridentitet da din native app ikke kan bevise sin identitet.