Wie verwenden von Api-key in der Web-Api, die für service-Authentifizierung verwenden der Formularauthentifizierung

Ich bin mit MVC 4 Web Api und ich möchte, dass Benutzer authentifiziert werden, bevor Sie mit meinem service.

Implementierte ich eine Genehmigung message handler, der ganz gut funktioniert.

public class AuthorizationHandler : DelegatingHandler
{
    private readonly AuthenticationService _authenticationService = new AuthenticationService();

    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        IEnumerable<string> apiKeyHeaderValues = null;
        if (request.Headers.TryGetValues("X-ApiKey", out apiKeyHeaderValues))
        {
            var apiKeyHeaderValue = apiKeyHeaderValues.First();

            //... your authentication logic here ...
            var user = _authenticationService.GetUserByKey(new Guid(apiKeyHeaderValue));

            if (user != null)
            {

                var userId = user.Id;

                var userIdClaim = new Claim(ClaimTypes.SerialNumber, userId.ToString());
                var identity = new ClaimsIdentity(new[] { userIdClaim }, "ApiKey");
                var principal = new ClaimsPrincipal(identity);

                Thread.CurrentPrincipal = principal;
            }
        }

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

Das problem ist, dass ich die Verwendung der Formularauthentifizierung.

[HttpPost]
    public ActionResult Login(UserModel model)
    {
        if (ModelState.IsValid)
        {
            var user = _authenticationService.Login(model);
            if (user != null)
            {
                //Add the api key to the HttpResponse???
            }
            return View(model);
        }

        return View(model);
    }

Wenn ich meinen api:

 [Authorize]
public class TestController : ApiController
{
    public string GetLists()
    {
        return "Weee";
    }
}

Den handler nicht finden können, die X-ApiKey header.

Ist es ein Weg, um fügen Sie den Benutzer der api-Schlüssel, um die http-header der Antwort und halten Sie die Taste gibt es, solange der Benutzer angemeldet ist?
Gibt es eine andere Möglichkeit um diese Funktionalität zu implementieren?

Schreibe einen Kommentar