2017-08-25 4 views
1

Lors de l'utilisation d'une stratégie d'autorisation, est-il possible de comprendre quelle stratégie n'a pas abouti?Aspnet Core identifier quelle stratégie d'exigence a échoué

Idéalement, j'aimerais pouvoir modifier les données dans le pipeline de middleware afin de mieux comprendre pourquoi un 403 est renvoyé au consommateur de l'API.

Tout ce qui est retourné pour le moment est un 403; Interdit. Est-il possible de comprendre la raison de l'échec de la politique dans la méthode configure de Statup.cs?

app.Use(async (context, next) => 
{ 
    await next(); 

    if (context.Response.StatusCode == 403) 
    { 
     // which policy failed? need to inform consumer which requirement was not met 
     await next() 
    } 

}); 

Répondre

2

De ASPNET base Docs

L'utilisation de la propriété des ressources est cadre spécifique. L'utilisation d'informations dans la propriété Resource limitera vos stratégies d'autorisation à des cadres particuliers. Vous devez convertir la propriété Resource en utilisant le mot-clé as, puis vérifiez que la distribution a réussi à garantir que votre code ne plante pas avec InvalidCastExceptions lorsqu'il est exécuté sur d'autres frameworks;

Ma mise en œuvre

context.Fail(); 

    if (context.Resource is Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext mvcContext) {   
     mvcContext.HttpContext.Response.StatusCode = 403; 
     await mvcContext.HttpContext.Response.WriteAsync($"Forbidden; No valid Transaction Session Id for {context.User.Identity.Name}");       
    }