Является ли защита на основе токенов в WebAPI2 без сохранения состояния? - PullRequest
0 голосов
/ 03 февраля 2020

Я просто пытался понять приведенный ниже код:

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();

        ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);

        if (user == null)
        {
            context.SetError("invalid_grant", "The user name or password is incorrect.");
            return;
        }

        ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,
           OAuthDefaults.AuthenticationType);
        ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
            CookieAuthenticationDefaults.AuthenticationType);

        AuthenticationProperties properties = CreateProperties(user.UserName);
        AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
        context.Validated(ticket);
        context.Request.Context.Authentication.SignIn(cookiesIdentity);
    }

На основе этой строки

context.Request.Context.Authentication.SignIn(cookiesIdentity);

Похоже, что он сохраняет информацию об идентификации утверждений для каждого токена (до тех пор, пока токен истекает) где-то в куки на сервере (сеансы). Это может быть словарь с ключом в качестве токена и значением в качестве объекта ClaimsIdentity.

1 Ответ

1 голос
/ 05 февраля 2020
  1. на основе имени пользователя / пароля и секретного ключа, для которого создается токен
  2. Этот токен передается при каждом запросе.
  3. Этот токен нельзя изменить, если он токен объявлен недействительным.
  4. Таким образом, сессионный идентификатор не требуется, сам токен достаточен для всех. Обратитесь к https://jwt.io/. На его домашней странице вы можете визуализировать создание токена и визуализацию токена

Дипак Мишра Когда вы включаете Oauth от третьей стороны, такой как Google, он отправляет большую часть Инфо с помощью строки запроса с обратным вызовом действием / функция как эти

1015 *https://accounts.google.com/signin/oauth/oauthchooseaccount?client_id=696554540965-tuss1evt7rbudu8rknmh0vb3bvpi8buv.apps.googleusercontent.com&as=zknK7Evpniq6-shKdvjSPQ&destination=https%3A%2F%2Fwww.foo.com%3A433&approval_state=! ChRpV1JYckwtUTZmaGxNSkk1aVRWXxIfVTdvZEdUU2xsa1VaOEhuU1JuY2dubXItM3JDU0FSYw% E2% 88% 99AJDr988AAAAAXj0CaAvlDBEoTUtus4huzvphtBXXPAK7 & oauthgdpr = 1 & xsrfsig = ChkAeAh8Tz2ZsIc_iVmqimfC6hrE25szMVwwEg5hcHByb3ZhbF9zdGF0ZRILZGVzdGluYXRpb24SBXNvYWN1Eg9vYXV0aHJpc2t5c2NvcGU & flowName = GeneralOAuthFlow

библиотека OAuth имеет встроенную возможность декодирования вставки объекта

в таблицу AspNetUsers с идентификатором и отметкой безопасности (НЕ SID GOOGLE)

и делает запись в файлах cookie в браузере и локальном хранилище для характера без состояния

И "Если случайно я знаю ваш алгоритм шифрования ....."

, даже если вы в состоянии знать шифрование al go (в чем я очень сомневаюсь поскольку у них есть глубокий механизм глубины.) / Их ключ безопасности (который я снова сильно сомневаюсь), если вы измените его, он станет измененным или недействительным .....

Если вы создадите свою собственную библиотеку и разрешите недействительный затем снова вы игнорируете всю цель Oauth

Аутентификация: функциональность промежуточного ПО аутентификации, доступная для текущего запроса.

    SignIn:
        Add information to the response environment that will cause the appropriate authentication
             middleware to grant a claims - based identity to the recipient of the response.
             The exact mechanism of this may vary. Examples include setting a cookie, to adding
             a fragment on the redirect url, or producing an OAuth2 access code or token response.

    cookiesIdentity:
        Determines which claims are granted to the signed in user.The ClaimsIdentity.AuthenticationType
             property is compared to the middleware's Options.AuthenticationType value to
             determine which claims are granted by which middleware. The recommended use is
             to have a single ClaimsIdentity which has the AuthenticationType matching a specific
             middleware.
...