Ansprüche Auth mit OWIN Self-Hosted WebApi

Ich bin self-hosting-WebApi mit der folgenden Konfiguration:

Visual Studio 2012 /.NET 4.0

public void Configuration(IAppBuilder appBuilder)
{
    var config = new HttpConfiguration();

    //authentication
    config.MessageHandlers.Add(new Shield.PresharedKeyAuthorizer());

    //routing
    config.Routes.MapHttpRoute(
        name: "Default",
        routeTemplate: "{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

    appBuilder.UseWebApi(config);
}

Habe ich einen einfachen test-setup mit den folgenden DelegatingHandler zu Anspruch und bringen es zu den aktuellen thread.

public class PresharedKeyAuthorizer : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
    {
        var claims = new List<Claim>();
        claims.Add(new Claim(ClaimTypes.Name, "superstar"));

        var identity = new ClaimsIdentity(claims, "PresharedKey");
        var principal = new ClaimsPrincipal(identity);

        Thread.CurrentPrincipal = principal;
        if (HttpContext.Current != null)
            HttpContext.Current.User = principal;

        return base.SendAsync(request, cancellationToken);
    }
}

Jedoch, wenn ich drücken Sie die ApiController gekennzeichnet ist, mit der Authorize Attribut, es nicht erkennt die Authentifizierung.

[Authorize]
public class FilesController : ApiController
{
    public IEnumerable<string> Get()
    {
        return new string[] { "Secure File A", "Secure File B" };
    }
}

Entfernen der Authorize Attribut und setzen Sie einen Haltepunkt kann ich sehen, dass RequestContext.Prinzipielle Eigenschaft ist in der Tat null. Die Anforderung funktioniert fin ohne die Authorize Attribut, so weiß ich das setup von der self-hosting ist richtig, aber ich muss fehlt etwas in der Authentifizierung pipeline.

Was bin ich, um zu ermöglichen, dass die Forderung gegen die Authorize Attribut?

Diesem Zusammenhang Antwort mit dem gleichen Ansatz scheint zu funktionieren, wenn die von IIS gehostet wird: https://stackoverflow.com/a/14872968/118224

InformationsquelleAutor Charlie Brown | 2014-01-28

Schreibe einen Kommentar