2013-04-09 2 views
2

В моем проекте asp.net mvc4 я использую ApiControllers для обслуживания как веб-клиентов, так и мобильных клиентов. Чтобы защитить веб-службы, я использую аннотацию [Авторизовать]. Итак, теперь веб-клиент работает нормально. Однако, когда я склонен ссылаться на некоторые веб-API из мобильного приложения (например, Android), у меня возникла ошибка. , когда я посмотрел на фрагмент кода:ASP.NET MVC4 Web API и переменные сеанса

[Authorize] 
    public List<double> GetSomeInfo(int param1, string param2) 
     { 
      User user = SessionData.CurrentUser; 
      // do something using user.UserId 
      // .... 

     } 

Data Session делает держать подключен пользовательские свойства только тогда, когда он подключен к Web App. Но в случае мобильных клиентов данные сеанса равны нулю. Итак, есть ли подходящий метод для решения этой проблемы. На мой взгляд, я считаю, что userId должен предоставляться в качестве параметра для любого веб-API, который может понадобиться для достижения определенного лечения. Как вы думаете?

+0

Вы проверили [IdentityModel] (https://github.com/thinktecture/Thinktecture.IdentityModel.45)? –

+0

, какую аутентификацию вы используете? Аутентификация формы не будет работать для мобильного клиента, попробуйте использовать базовую аутентификацию или цифровую аутентификацию. –

ответ

1

Вы говорите о двух разных вещах:

  • Session

Как сказал Даррел, Web Api не дизайн для поддержки сеанса ASP.NET. HTTP и Rest Services являются безстоящими - и в результате каждый HTTP-запрос должен нести достаточную информацию сам по себе для своего получателя, чтобы обработать его, чтобы он полностью соответствовал природе HTTP без атак. Итак, не полагайтесь на переменные сеанса, но добавляйте больше параметров в свой запрос. Конечно, есть способ использовать сеанс в Web Api, я предлагаю вам использовать его.

  • Authentication

Поскольку работает только с PARAMATERS (например, UserId, ACCOUNTID, ...) не очень безопасно, вы должны использовать проверку подлинности и авторизации. Я настоятельно рекомендую вам прочитать security section в веб-сайте asp.net web api. Web Api поддерживает многие аутентификации (Basic, OAuth, Windows, Custom, ...). Вы должны выбрать то, что лучше для вас.

+0

Да, вы абсолютно правы. Когда я разместил этот вопрос, я все еще узнавал о MVC4 и Web api. Но я знаю, что у меня есть более ясная идея, и я сделал именно то, что вы рекомендовали .. уважая определение без апатии Web api и для обеспечения безопасности я использовал обычную проверку подлинности. Теперь клиенты Web и Mobile работают нормально – mahoosh

+0

отлично, хорошая работа сэр! – Cybermaxs

0

Веб-интерфейс API не предназначен для поддержки сеансов, поскольку они являются анти-шаблонами HTTP. Вы можете получить текущий аутентифицированный пользователь, обратившись к Thread.CurrentPrincipal, если вы настроили необходимые механизмы аутентификации.

+0

Я, похоже, не понимаю, о чем вы говорите, пожалуйста, предоставьте мне ссылку или некоторые фрагменты кода? – mahoosh

Смежные вопросы