Я работаю над кросс-платформенным веб-приложением, используя angular и webapi. Проблема в том, что приложение angular работает в контейнере Cordova. Чтобы хорошо работать с остальными приложениями на устройстве, мне необходимо использовать плагин для SSO. Этот плагин вызывает у меня проблемы, потому что он делает несколько вещей. Он перехватывает все HTTP-запросы и добавляет в заголовок токен-носитель, который генерируется сторонним поставщиком токенов, поэтому я не могу его декодировать и перезаписывает любой токен-носитель, который я установил в заголовке. печенье..
Поэтому это немного усложняет ситуацию, когда вы не можете отправить свои собственные локальные учетные данные.
Итак, я начал с https://coding.abel.nu/2014/06/writing-an-owin-authentication-middleware/ и http://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Security.OAuth/OAuthBearerAuthenticationHandler.cs
Поэтому я решил, что должен написать собственное промежуточное ПО, чтобы позаботиться об этом; Я подумал, что, поскольку стандартное промежуточное ПО oauth может работать без файлов cookie, мне не нужно слишком много времени, чтобы заставить свое немного отличающееся промежуточное ПО токена носителя сделать это. Но это не так... Написание собственного промежуточного ПО... поэтому я Я могу получить заголовок, проверить с помощью внешнего поставщика токенов, но я не могу войти в систему.
protected override async Task<AuthenticationTicket> AuthenticateCoreAsync()
{
try
{
// Find token in default location
string requestToken = null;
string authorization = Request.Headers.Get("Authorization");
if (!string.IsNullOrEmpty(authorization))
{
if (authorization.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase))
{
requestToken = authorization.Substring("Bearer ".Length).Trim();
}
}
.... Take the Request token call other Server, verify token...
Также
public override async Task<bool> InvokeAsync()
{
var ticket = await this.AuthenticateAsync();
if(ticket != null)
{
this.Context.Authentication.SignIn(new AuthenticationProperties(), grantIdentity);
return false;
}
}
Так что, в конце концов, SignIn не вызывает ошибки или чего-то еще, но фактически не входит в систему. Как только я перехожу к действию контроллера с атрибутом [Authorize], я получаю ошибку 401. У меня не включены внешние файлы cookie. Есть большая вероятность, что я на неправильном пути или слишком усложняю задачу.