50 messaggi dal 06 giugno 2002
Salve a tutti, ho un applicazione Angular 13 e api .net core 6 con autenticazione basata su Azure AD B2C.

Nel lato client Angular gestisco il tutto con la libreria Msal secondo l'esempio indicato da Microsoft che ho copiato da qui

https://github.com/Azure-Samples/ms-identity-javascript-angular-tutorial/tree/main/3-Authorization-II/2-call-api-b2c

Il tutto funziona, nel localStorage del browser una volta autenticato ci finiscono diverse chiavi tra le quali anche il token inserito insieme ad altri dati. L'esempio preso in considerazione integra già un httpinterceptor fatto con la libreria msal sul quale però non credo si possa intervenire ad esempio per gestire in maniera custom gli errori 500 del browser.

Vorrei lato Angular entrare in possesso del token, solo che non è messo in una chiave facile tipo "token" in local storage, ma il nome della chiave è composto da diversi elementi.

Sono riuscito in qualche modo ad arrivare lo stesso al token valutando le chiavi nel local storage che iniziano per ...

for (var i = 0; i < window.localStorage.length; i++) {
var key = window.localStorage.key(i);
if (key?.startsWith(this.account.homeAccountId + "-" + b2cPolicies.authorityDomain.toLowerCase() + "-idtoken")) {
var x = window.localStorage.getItem(key);
if (x) {
this.token = JSON.parse(x.toString()).secret;
}
}
}

In questo modo avendo il token potrei in linea di principio farmi il mio interceptor come al solito.

Solitamente quando mi imbatto in cose del genere, o c'era un metodo che non ho visto nella libreria che fà il lavoro in maniera facile, oppure era meglio non farlo.

Cosa ne pensate ?
50 messaggi dal 06 giugno 2002
Alla fine ho scoperto come effettuare l'acquiresilent token

const account = this.authService.instance.getAllAccounts()[0];

const accessTokenRequest = {
scopes: ["https://xxxxxxxxxx.onmicrosoft.com/api/demo.read"],
account: account
}

this.authService.instance.acquireTokenSilent(accessTokenRequest).then(function(accessTokenResponse) {
// Acquire token silent success
// Call API with token
let accessToken = accessTokenResponse.accessToken;
// Call your API with token
console.log(accessToken);
}).catch(function (error) {
//Acquire token silent failure, and send an interactive request
console.log(error);
if (error instanceof InteractionRequiredAuthError) {
// this.authService.instance.acquireTokenRedirect(accessTokenRequest);

}
});


Questo fà la chiamata (non prende il token dal local storage). Va quindi pensato dove parcheggiarlo (probabilmente in altro item local storage) se si intende costruire un proprio interceptor

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.