Я пытаюсь полностью понять OWIN и настроить внешний вход в систему.Чтобы быть более конкретным, я пытаюсь разработать внешний сервис входа в систему как Google или Facebook.Это где мои знания спускаются.
Я знаю, что в реализации есть 4 класса, которые являются нормальными в реализации, то есть Extension, Handler, Middleware и Options.Классы расширений и Middleware, с которыми я могу иметь дело.В классе Option я не уверен, что здесь поставить?Я знаю, что он содержит конфигурацию для промежуточного программного обеспечения, но какие конфигурации обычно требуются?Может быть, путь обратного вызова и режим аутентификации?
В моем руководстве класс-обработчик содержит 3 различных метода: AuthenticateCoreAsync, ApplyResponseChallenge и InvokeAsync.Что делают 3, и как бы я их использовал?
AuthenticateCoreAsync возвращает AuthenticationTicket, который принимает идентификатор и свойства.Является ли личность той, которую я получаю от внешнего провайдера?А что такое свойства?Метод выглядит следующим образом:
var identity = new ClaimsIdentity(Options.SignInAsAuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, Options.UserId, null, Options.AuthenticationType));
identity.AddClaim(new Claim(ClaimTypes.Name, Options.UserName));
var properties = Options.StateDataFormat.Unprotect(Request.Query["state"]);
return Task.FromResult(new AuthenticationTicket(identity, properties));
Следующий метод, ApplyResponseChallenge, выглядит следующим образом:
if (Response.StatusCode == 401)
{
var challenge = Helper.LookupChallenge(Options.AuthenticationType, Options.AuthenticationMode);
// Only react to 401 if there is an authentication challenge for the authentication
// type of this handler.
if (challenge != null)
{
var state = challenge.Properties;
if (string.IsNullOrEmpty(state.RedirectUri))
{
state.RedirectUri = Request.Uri.ToString();
}
var stateString = Options.StateDataFormat.Protect(state);
Response.Redirect(WebUtilities.AddQueryString(Options.CallbackPath.Value, "state", stateString));
}
}
return Task.FromResult<object>(null);
Что в мире является проблемой, и как мне использовать этот метод?Последний метод, InvokeAsync, выглядит следующим образом:
if (Options.CallbackPath.HasValue && Options.CallbackPath == Request.Path)
{
var ticket = await AuthenticateAsync();
if (ticket != null)
{
Context.Authentication.SignIn(ticket.Properties, ticket.Identity);
Response.Redirect(ticket.Properties.RedirectUri);
// Prevent further processing by the owin pipeline.
return true;
}
}
// Let the rest of the pipeline run.
return false;
Опять же, какой цели он служит и что делает SignIn в отношении предоставленных идентификаторов и свойств?
Еще один вопрос, который имеетarisen - это то, что называется AuthenticationResponseGrant.Что это в контексте OWIN?
Я знаю, что есть много вопросов, и я действительно пытаюсь понять, как работает код и вообще весь поток.
Я надеюсь, что любой, кто обладает большими знаниями, захочет найти время для подробного ответа на мои вопросы.Я действительно пытаюсь понять.
Заранее спасибо.Отказ от ответственности: я уже прочитал десятки статей, но, похоже, не могу понять.