У меня есть приложение, основанное на веб-API, которое в настоящее время настроено с использованием удивительной модели Thinktecture IdentityModel 4.5.Thinktecture IdentityModel AuthenticationConfiguration Mapping для Cookie - как?
Он настроен для проверки подлинности на основе утверждений, принимая базовые учетные данные аутентификации, отправленные в заголовок авторизации. Клиент javascript сохраняет возвращаемый токен сеанса и использует его для последующих запросов, включив его в заголовок авторизации, которому предшествует сеанс в качестве схемы.
Клиент javascript также сохраняет токен в файл cookie для поиска, если окно закрыто и быстро открывается, или когда открываются новые окна, чтобы пользователь не мог повторно аутентифицироваться. Файл cookie называется sessionToken, и его значение является фактическим токеном.
Все работает прекрасно.
Проблема заключается в том, что у меня есть ссылка на странице приложения, которая ссылается на прямой адрес (/ api/controller/id/pdfdocument) и открывает его в новом окне (цель: _blank). Поэтому нет способа включить заголовок авторизации в этот запрос. Однако cookie передается правильно, поскольку сеанс все еще активен.
Я попытался добавить сопоставление в коллекцию AuthenticationConfig.Mappings, чтобы добавить поддержку для сбора маркера из файла cookie, однако я просто не могу получить правильную конфигурацию, чтобы заставить это работать, и havn't был в состоянии найти любые другие ресурсы в Интернете. Я предполагаю, что есть что-то очень простое, что нужно исправлять.
Мой код:
private static AuthenticationConfiguration CreateAuthenticationConfiguration()
{
var sessionTokenConfiguration = new SessionTokenConfiguration();
sessionTokenConfiguration.EndpointAddress = "/Authenticate";
sessionTokenConfiguration.DefaultTokenLifetime = new TimeSpan(1, 0, 0);
var authenticationConfig = new AuthenticationConfiguration
{
ClaimsAuthenticationManager = _authenticationManager,
RequireSsl = false,
EnableSessionToken = true,
SessionToken = sessionTokenConfiguration,
SendWwwAuthenticateResponseHeaders = false
};
var securityTokenHandler = new Thinktecture.IdentityModel.Tokens.Http.BasicAuthenticationWithRoleSecurityTokenHandler(_userService.ValidateUser, _userService.GetRolesForUser);
securityTokenHandler.RetainPassword = false;
var realm = "localhost";
var authorizationMapping = new AuthenticationOptionMapping
{
Options = AuthenticationOptions.ForAuthorizationHeader(scheme: "Basic"),
TokenHandler = new System.IdentityModel.Tokens.SecurityTokenHandlerCollection { securityTokenHandler },
Scheme = AuthenticationScheme.SchemeAndRealm("Basic", realm)
};
authenticationConfig.AddMapping(authorizationMapping);
var cookieMapping = new AuthenticationOptionMapping
{
Options = AuthenticationOptions.ForCookie("sessionToken"),
TokenHandler = new System.IdentityModel.Tokens.SecurityTokenHandlerCollection { securityTokenHandler },
Scheme = AuthenticationScheme.SchemeOnly(scheme: "Session")
};
authenticationConfig.AddMapping(cookieMapping);
//authenticationConfig.AddBasicAuthentication(_userService.ValidateUser, _userService.GetRolesForUser);
return authenticationConfig;
}
Эта конфигурация затем применяется следующим образом:
HttpConfiguration config;
var authenticationConfig = CreateAuthenticationConfiguration();
config.MessageHandlers.Add(new AuthenticationHandler(authenticationConfig));
И это то, что печенье выглядит в заголовке запроса:
Cookie: sessionToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjEzNzM2NDA5NjgsImlzcyI6InNlc3Npb24gaXNzdWVyIiwiYXVkIjoiaHR0cDovL3Nlc3Npb24udHQvIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6ImEiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2F1dGhlbnRpY2F0aW9ubWV0aG9kIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2F1dGhlbnRpY2F0aW9ubWV0aG9kL3Bhc3N3b3JkIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9hdXRoZW50aWNhdGlvbmluc3RhbnQiOiIyMDEzLTA3LTEyVDEzOjU2OjA4LjA5N1oiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL3JvbGUiOiJBZG1pbmlzdHJhdG9yIiwiSWQiOiIyIn0.UlPeD9HzduQfwHE7NuXi9eMVo40hypi_LBK-f76VYFI; username=a
Любой Помогите!
Ibraheem, если вам посчастливилось прочитать этот комментарий, я думаю, вы можете мне помочь с этим вопросом http://stackoverflow.com/questions/27731539 –