OWIN и индивидуальное понимание промежуточного программного обеспечения для внешнего входа - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь полностью понять 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?

Я знаю, что есть много вопросов, и я действительно пытаюсь понять, как работает код и вообще весь поток.

Я надеюсь, что любой, кто обладает большими знаниями, захочет найти время для подробного ответа на мои вопросы.Я действительно пытаюсь понять.

Заранее спасибо.Отказ от ответственности: я уже прочитал десятки статей, но, похоже, не могу понять.

...