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.

Relaterte artikler