Blazor : API + custom domain name = 401 ?
Nous allons parler de la mise en production d'une application Blazor Asp.Net Hosted (donc une application client WASM + une application serveur ASP.NET) sur Azure.
L'application web Blazor se connecte à une API hostée elle aussi sur Azure (via un Private Network, on en reparlera danbs un billet ultérieur).
Par défaut, à la mise en production, l'App Service a une URL du type :
https://monsite.azurewebsites.net
Elle se connecte à l'API accessible via :
https://monsite-api.azurewebsites.net
Tout va bien, une fois publiée, l'application se comporte normalement et accède bien à l'API.
Tout va bien.
Jusqu'à ce que... Il nous prenne l'envie d'associer un nom de domaine à l'application.
https://monnomdedomaine.xyz
Et là... C'est l'accident. L'application Blazor web qui tournait parfaitement dans un navigateur ne fonctionne plus : une litanie d'erreurs 401.3 dans l'inspecteur.
Impossible d'accéder à l'API à partir du web.
En fait, tout simplement, l'accès à l'API est refusé car le nom de domaine appelant n'est plus le même que le nom en
https://monsite.azurewebsites.net/
La solution ?
Il faut définir la variable IssuerUri dans Program.cs (du projet Server) en spécifiant le nouveau nom de domaine.
builder.Services.AddIdentityServer(options =>
{
var issuerUri = builder.Configuration.GetValue<string?>("IssuerUri");
if (issuerUri != null)
options.IssuerUri = issuerUri;
})
.AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
Ici, l'url spécifée par IssuerUri a été mise dans le fichier appsettings.json - on pourrait écrire directement :
builder.Services.AddIdentityServer(options =>
{
options.IssuerUri = "https://monsite.azurewebsites.net";
})
.AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
mais il y a un bémol : le IssuerUri ne fonctionne pas en Debug !!! Uniquement en production.
Nous avons donc laissé la clé vide / null dans le appsettings.Development.json et mis la bonne url - "https://monsite.azurewebsites.net" dans le appsettings.json.
Avec ça, vous ne devriez plus avoir de 401 en production.