Добавить на запрос токен-аутентификацию на сайте asp.net mvc - PullRequest
2 голосов
/ 30 сентября 2010

У меня есть существующий веб-сайт asp.net mvc, который использует базовую аутентификацию форм. На сайте есть страница входа в систему, которая отправляет сообщение обратно в действие входа в систему, которое регистрирует пользователя через FormsAuthentication.SetAuthCookie (). Я ищу добавить API на сайт, как область mvc2, где пользователи будут проходить аутентификацию на основе токена, переданного в качестве заголовка http. Эта область будет состоять только из действий json, поэтому перенаправление пользователя на страницу входа не имеет смысла. Вместо этого я хочу, чтобы пользователи просто передавали токен вместе с каждым запросом. Этот токен сопоставляется с каждой учетной записью пользователя, и пользователь будет аутентифицироваться автоматически.

Я борюсь с тем, где поставить эту логику. На данный момент наилучшим выбором, по-видимому, является добавление логики поиска заголовка и аутентификации в Global.asax в методе Application_AuthenticateRequest. Я хочу избежать необходимости перенаправлять пользователя после вызова FormsAuthentication.SetAuthCookie (), хотя. Я хочу, чтобы действие при входе было прозрачным для них.

Неправильно ли я подхожу к этому?

В качестве примечания: запрос имени пользователя / пароля для запросов API невозможен, поскольку на сайте есть несколько пользователей. Некоторые присоединились с использованием OpenID, а остальные с именем пользователя / паролем.

Ответы [ 2 ]

4 голосов
/ 23 января 2012

Мы пошли по пути добавления поиска заголовка к событию Application_AuthenticateRequest в Global.asax.Код выглядит примерно так:

private const string AuthorizationHeader = "Authorization";

if (!string.IsNullOrWhiteSpace(request.Headers[AuthorizationHeader]))
{
  try
  {
    // Remove Basic from beginning and then decode the string
    var token = request.Headers[AuthorizationHeader].Substring(6);
    token = new ASCIIEncoding().GetString(Convert.FromBase64String(token)).Split(':')[0];

    return UserService.FetchByApiToken(token);
  }
  catch
  {
  }
}
1 голос
/ 30 сентября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...