2015-05-06 3 views
0

Учитывая следующий сценарий:Как обрабатывать идентификатор для аутентификации asp.net формы вызова BACKEND Service

У меня есть веб-приложение MVC, написанный на asp.net 4.5, который использует проверку подлинности в формах.

Для аутентификации текущего пользователя я вызываю метод веб-службы, который говорит мне, является ли логин действительным, и если это я устанавливаю идентификатор в веб-приложении после получения ответа от веб-службы.

Моя проблема заключается в том, что я хочу, чтобы иметь возможность идентифицировать пользователя как в веб-приложении MVC, так и во внутренних службах, когда пользователь помещает вызовы, предпочтет сделать это из конфигурации, если это возможно.

Другая проблема заключается в том, где я должен создавать токен сеанса и выполнять управление сеансом? Не хотите, чтобы мой метод аутентификации вызывался при каждом отдельном запросе, поэтому я предполагаю, что мне нужен механизм кэширования токенов сеанса, а также не хочу устанавливать учетные данные для прокси на каждый запрос, если это возможно, я хочу, чтобы это было сделано из конфигурации, можно ли использовать WIF, и если да, то как?

Что будет считаться хорошим подходом к реализации этого?

ответ

1

Подход, который я решил использовать следующий: не

  • Использование Owin аутентификации печенья (без модулей, только с использованием промежуточного ПО)
  • решил, что нет смысла сейчас использовать любые веб-сервисы, получили избавиться от дополнительного физического уровня, это должно принести лучшую производительность
  • Для хранения билетов аутентификации, я реализовать интерфейс IAuthenticationSessionStore

Пример:

public void ConfigureAuth(IAppBuilder app) 
{ 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
     LoginPath = new PathString("/Account/Login"), 
     CookieSecure = CookieSecureOption.Always, 
     SessionStore = new MyAuthenticationSessionStore() 
    }); 
}  

О методе Вход я сделать что-то вроде следующего:

var claims = new List<Claim>(); 
claims.Add(new Claim(ClaimTypes.Name, "Brock")); 
claims.Add(new Claim(ClaimTypes.Email, "[email protected]")); 
var id = new ClaimsIdentity(claims, 
         DefaultAuthenticationTypes.ApplicationCookie); 

var ctx = Request.GetOwinContext(); 
var authenticationManager = ctx.Authentication; 
authenticationManager.SignIn(id); 

И получить текущего пользователя с его претензии я могу сделать следующее:

OwinContext ctx = Request.GetOwinContext(); 
ClaimsPrincipal user = ctx.Authentication.User; 
IEnumerable<Claim> claims = user.Claims; 

Некоторые ссылки, может быть полезным:

Owin cookie authentication middleware for asp.net

Owin protocol middleware cookies and session

Leastprivilege blog

brockallen.com

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