web-dev-qa-db-fra.com

La fonction Azure avec l'authentification AD entraîne 401 non autorisé lors de l'utilisation de jetons au porteur

J'ai une fonction Azure très simple en C # pour laquelle j'ai configuré Azure AD Auth. Je viens d'utiliser les paramètres Express pour créer un enregistrement d'application dans la configuration des fonctions.

public static class IsAuthenticated
{
    [FunctionName("IsAuthenticated")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "options", Route = null)]
        HttpRequest req,
        ILogger log)
    {
        return new OkObjectResult("You are " + req.HttpContext.User.Identity.Name);
    }
}

Lorsque j'accède à la fonction dans mon navigateur, tout fonctionne comme prévu (si je ne suis pas connecté, je dois me connecter et être redirigé vers mon API). Mais si j'essaie d'accéder à ma fonction partout où un jeton au porteur est nécessaire, j'obtiens un 401 Unauthorized Erreur. Encore plus étrange, je ne peux pas non plus exécuter la fonction dans le portail Azure.

Mais le jeton a été acquis sans problème et ajouté à la demande:

enter image description here

J'ai essayé différentes choses pour résoudre ce problème. J'ai d'abord pensé que c'était peut-être un problème CORS (car j'en avais également quelques-uns) et j'ai simplement configuré CORS pour accepter *, mais rien n'a changé.

Ensuite, j'ai ajouté mes points de terminaison de connexion API à la redirection et essayé de définir l'attribution implicite pour accepter également les jetons d'accès, cela ne fonctionne toujours pas.

enter image description here

Y a-t-il quelque chose que j'ai oublié? La configuration express de l'enregistrement de l'application ne devrait-elle pas fonctionner uniquement avec les fonctions Azure?

MODIFIER:

Mettre l'URL de mon application de fonction dans les redirections comme suggéré par @ thomas-schreiter n'a rien changé (j'ai essayé la configuration dans la capture d'écran et j'ai également mis chacune de ces valeurs de son propre chef ).

enter image description here

EDIT 2:

J'ai maintenant également essayé d'acquérir un jeton Bearer de manière manuelle avec Postman , mais je rencontre toujours un 401 lors de l'appel de mon API.

13
Staeff

La seule chose à laquelle je peux penser en ce moment est le public autorisé.

Accédez à Vos paramètres Active Directory et cliquez sur Avancer. Sous Audience de jeton autorisée Ajoutez votre URL de fonction exacte. Il pourrait déjà être là avec l'URL de rappel, mais remplacez-le simplement par seulement l'URL de base de la fonction sans aucun rappel, comme indiqué dans l'image.

Assurez-vous que lorsque vous appuyez sur ok, vous enregistrez également votre paramètre d'authentification/autorisation pour prendre effet et réessayez après environ 1 min. J'ai testé en utilisant PostMan et en passant le jeton du porteur et cela fonctionne!

enter image description here

1
Imran Arshad