我正在使用MVC 4 Web Api,並且希望用戶在使用我的服務之前進行身份驗證。如何在Web API中使用Api密鑰進行使用表單身份驗證的服務身份驗證
我已經實現了一個授權消息處理程序,工作得很好。
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);
}
}
問題是,我使用表單身份驗證。
[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);
}
當我打電話給我的API:
[Authorize]
public class TestController : ApiController
{
public string GetLists()
{
return "Weee";
}
}
處理程序無法找到X-ApiKey頭。
只要用戶登錄,是否有方法將用戶的api密鑰添加到http響應頭並保留密鑰? 是否有另一種實現此功能的方式?
謝謝!你是對的我的意思是表單身份驗證。我編輯了我的問題。我沒有使用成員資格提供程序,而是創建了自定義身份驗證邏輯。 我不能使用HttpRequestMessage,因爲我正在使用MVC控制器進行身份驗證,並返回一個Action Result(或者我不知道如何使用它)。 – 2013-04-26 18:18:10