Skip to content

dandresini/azuredayb2c2022

Repository files navigation

Proteggere una Function con Azure Active Directory B2C

Il presente progetto spiega come proteggere le Azure Function con Azure Active Directory B2C.

Prepariamo il Tenant configurando:

  1. Un applicazione di tipo Web che chiameremo Azure Function senza alcun URI di reindirizzamento per esporre il nostro ambito di utilizzo (function.read);

app_azure_function

ambito

  1. Un applicazione di tipo Web che chiameremo Test Function con reindirizzamento a jwt.ms per testare la nostra Azure Function;

Test Function

  1. Un applicazione di tipo SPA (single page application) che chiameremo React Appt con reindirizzamento alla nostra app di test in react in locale http://localhost:3000;

reactapp

Per gli ultimi 2 punti sopra elencati:

  1. nella sezione "Authentication" dell'App registrata verificate di avere selezionato quali token rilasciare (nel nostro caso spuntare le voci Access Tokens e ID Tokens);

token

  1. nella sezione "Api Permission" dell'App registrata verificate di aver fornito il consenso ammministrativo all'ambito (function.read).

auth1

auth2

Terminato il Tenant con la configurazione degli User Flows, passate alla creazione della Function:

function

authfunction

Inserire nella sezione
  1. Application (client) ID: il Client ID dell App registrata in Azure B2C come Azure Function;
  2. Client secret (recommended): lasciare vuoto;
  3. Issuer URL: inserire l'Endpoint Azure AD B2C OpenID Connect metadata document ricordandosi di sostituire <policy-name> con il campo Name dello User Flow "Sign up and sign in" configurato in precedenza;
  4. Allowed token audiences: il Client ID dell App registrata in Azure B2C come Azure Function.

authfunction2

Codice di prova da inserire come primo test

using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using System.Linq;


[FunctionName("UserInformationSimple")]
public static Task<IActionResult> Run(
    HttpRequest req,
    ILogger log)
{

    log.LogInformation("C# HTTP trigger function processed a request.");
    var User = req.HttpContext.User;
    if (User.Identity.IsAuthenticated)
    {
        log.LogInformation("Utente Autenticato");
        var claims = User.Claims;

        var returnValue = new
        {
            Name = claims.Where(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname").FirstOrDefault()?.Value,
            Surname = claims.Where(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname").FirstOrDefault()?.Value,
            City = claims.Where(c => c.Type == "city").FirstOrDefault()?.Value,
            Email = claims.Where(c => c.Type == "emails").FirstOrDefault()?.Value
        };

        return Task.FromResult<IActionResult>(new ObjectResult(returnValue));
    }
    log.LogInformation("Utente non Autenticato");
    return Task.FromResult<IActionResult>(new ObjectResult("Forbidden") { StatusCode = 403 });
}

Link per scaricare il progetto react dalla documentazione ufficiale Microsoft: msal react project

Link problema noto del non funzionamento della "RequiredScope" in una Azure Function: RequiredScope not work

About

Progetto Azure Function protetta da Azure B2C e chiamata da un progetto react

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published