none
Механизм аутентификации ASP.NET в деталях RRS feed

  • Вопрос

  • Вот у меня вопрос возник. Тут задам, потому что он по теме. Обращаюсь к профи Yatajga, ну если кто знает, буду рад выслушать ваше мнение.

    Когда пользователь ввел логин, пароль, эти данные отправляют на сервер, дальше они проверяются по БД, если такой пользователь есть, то создается аутентификационный билет, который представляет из себя аутентификационную информацию в зашифрованном виде + хэш-код этой аутентификационной информации. Вот, что из себя представляет аутентификационная информация? Это просто текстовое представление логина, или что вообще? (это первый вопрос)

    После этого этот билет идет от клиента к серверу при каждом запросе страницы. ASP.NET расшифровывает этот билет, проверяет его целостность сравнивая с вложенным хеш-кодом. Потом он изымает из расшифрованного билета аутентификационную информацию и ищет по базе данных совпадения, после чего определяет, что этот пользователь имеет доступ, ну итд, дальше понятно. Вопрос №2: asp.net модуль как шифрует и расшифровывает инфу? то есть у него есть два ключа (открытый, закрытый). по одному он шифрует и получается билет, а по второму он расшифровывает и получает аутентификационную информацию. если это так, то где открытый и закрытый ключи хранятся?


    • Изменено Higgs.Boson 30 августа 2013 г. 18:14 Корректировка
    • Разделено YatajgaEditor 2 сентября 2013 г. 5:44
    30 августа 2013 г. 18:10

Ответы

  • "Вот, что из себя представляет аутентификационная информация? Это просто текстовое представление логина, или что вообще? (это первый вопрос)" - да, данные пользователя, но только в зашифрованном виде.

    "Вопрос №2: asp.net модуль как шифрует и расшифровывает инфу? то есть у него есть два ключа (открытый, закрытый). по одному он шифрует и получается билет, а по второму он расшифровывает и получает аутентификационную информацию. если это так, то где открытый и закрытый ключи хранятся?" - вы немного перепутали с SSL, это там используется два ключа. А для шифрования куки используется MachineKey.


    Сделаем содержимое сообщества лучше, вместе!

    • Предложено в качестве ответа YatajgaEditor 7 сентября 2013 г. 7:27
    • Помечено в качестве ответа Higgs.Boson 10 сентября 2013 г. 6:42
    1 сентября 2013 г. 10:29
    Модератор
  • А для шифрования куки используется MachineKey - а где этот ключ хранится?
    В файлах web.config разных уровней, в том числе и уровня приложения.

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа Higgs.Boson 10 сентября 2013 г. 6:42
    1 сентября 2013 г. 15:53
    Модератор
  • "Что это означает Вы не могли бы объяснить? IlSpy'ем я нашел класс" - содержит корневую конфигурацию, которую все наследуют и могут переопределить. А класс System.Web.Configuration.MachineKeySection просто читает данный раздел конфигурации.

    По умолчанию ключи генерируются для каждого приложения автоматически и сохраняются в Windows (т.е. они по любому будут действительны на время сессии). Но вы можете задать ключ в файле web.config вашего приложения, и "он будет вечным". Существуют специальные сервисы для генерации ключей. Например этот. Скажем когда нужно организовать кластер из веб-ферм.


    Сделаем содержимое сообщества лучше, вместе!

    • Предложено в качестве ответа YatajgaEditor 7 сентября 2013 г. 7:27
    • Помечено в качестве ответа Higgs.Boson 10 сентября 2013 г. 6:42
    2 сентября 2013 г. 5:41
    Модератор
  • Посмотрите сюда в качестве отправной точки.

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа Higgs.Boson 10 сентября 2013 г. 6:41
    4 сентября 2013 г. 9:11
    Модератор
  • "Судя по конфигам у меня алгоритм шифрования AES"  - это общий стандарт шифрования, конкретные реализации могут оличаться. Поэтому нужен именно тот класс который его шифрует, и убедитесь, что именно он используется (прописан в конфиге, секция decryption). Посмотрите данный топик.

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа Higgs.Boson 10 сентября 2013 г. 6:41
    9 сентября 2013 г. 5:19
    Модератор

Все ответы

  • "Вот, что из себя представляет аутентификационная информация? Это просто текстовое представление логина, или что вообще? (это первый вопрос)" - да, данные пользователя, но только в зашифрованном виде.

    "Вопрос №2: asp.net модуль как шифрует и расшифровывает инфу? то есть у него есть два ключа (открытый, закрытый). по одному он шифрует и получается билет, а по второму он расшифровывает и получает аутентификационную информацию. если это так, то где открытый и закрытый ключи хранятся?" - вы немного перепутали с SSL, это там используется два ключа. А для шифрования куки используется MachineKey.


    Сделаем содержимое сообщества лучше, вместе!

    • Предложено в качестве ответа YatajgaEditor 7 сентября 2013 г. 7:27
    • Помечено в качестве ответа Higgs.Boson 10 сентября 2013 г. 6:42
    1 сентября 2013 г. 10:29
    Модератор
  • А для шифрования куки используется MachineKey - а где этот ключ хранится?
    1 сентября 2013 г. 14:27
  • А для шифрования куки используется MachineKey - а где этот ключ хранится?
    В файлах web.config разных уровней, в том числе и уровня приложения.

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа Higgs.Boson 10 сентября 2013 г. 6:42
    1 сентября 2013 г. 15:53
    Модератор
  • Так, хорошо...

    Первое: Посмотрел я значит в machine.config и обнаружил там только это

    <section name="machineKey" type="System.Web.Configuration.MachineKeySection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>

    Что это означает Вы не могли бы объяснить? IlSpy'ем я нашел класс 

    System.Web.Configuration.MachineKeySection

    И что он с ним делает?

    Второе: в Вашей Ссылке поле decryptionKey может быть настроено на автоматическое создание ключа... И тут я не совсем понял. Если при каждом новом запросе создавать новые ключи, то как он будет расшифровывать "старые" билеты приходящие от браузера в куки


    • Изменено Higgs.Boson 1 сентября 2013 г. 16:57 Дополнение
    1 сентября 2013 г. 16:47
  • "Что это означает Вы не могли бы объяснить? IlSpy'ем я нашел класс" - содержит корневую конфигурацию, которую все наследуют и могут переопределить. А класс System.Web.Configuration.MachineKeySection просто читает данный раздел конфигурации.

    По умолчанию ключи генерируются для каждого приложения автоматически и сохраняются в Windows (т.е. они по любому будут действительны на время сессии). Но вы можете задать ключ в файле web.config вашего приложения, и "он будет вечным". Существуют специальные сервисы для генерации ключей. Например этот. Скажем когда нужно организовать кластер из веб-ферм.


    Сделаем содержимое сообщества лучше, вместе!

    • Предложено в качестве ответа YatajgaEditor 7 сентября 2013 г. 7:27
    • Помечено в качестве ответа Higgs.Boson 10 сентября 2013 г. 6:42
    2 сентября 2013 г. 5:41
    Модератор
  • Спасибо за отделение обсуждения в отдельную ветку.

    А смогу ли я пощупать это руками? Ну, допустим, я объявлю в настройках статичные ключи, и на их основе у меня будут шифроваться билеты по какому-нибудь заранее известному алгоритму. Как могу я их расшифровать (шифрованные билеты которые посылаются на сервер)? есть ли такая утилитка какая-нибудь, чтобы я мог просмотреть результат расшифровки

    2 сентября 2013 г. 11:03
  • Посмотрите сюда в качестве отправной точки.

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа Higgs.Boson 10 сентября 2013 г. 6:41
    4 сентября 2013 г. 9:11
    Модератор
  • Прошу прощения за столь долгое отсутствие.

    Я провел несколько "исследований" в этой области.

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

     <machineKey validationKey="8607508315A207AA651CD0BCC0C55E9A3720075B9D64A8621421290F22B6C0EAB9A14F09B1253CED3B4E125DBFAB7D4AF8739319BA7614FC4D08D38FD2E2CD27" 
                    decryptionKey="4FB5ABC265BE123AA40063F37975A6C6DFADEB67B7255BE50EE7892BD61C852C" 
        validation="SHA1"
        decryption="AES" />

    вставил это в качестве элемента <system.web>. После этого я запустил проект (проект создал шаблонный mvc 4 с формами,где можно залогиниться). Вообщем, я получил вот такие куки в клиенте

    ASP.NET_SessionId=qp3fidagv1c4vfpk4pyt3tvh; .ASPXAUTH=852B26D59357286B3DB0109E49ED67456B54D8F227F04461FA85FBB2BEC3EEFF5B1582944B6BA1F4B572E3FF7DD720E5DC26ACD62A0D4CE608D4FF64303B62248236A6DB52022C079623045043D2D1272D6B38D4

    Теперь, мне нужно расшифровать эти данные, ключи я знаю, и алгоритм шифрования тоже. Судя по конфигам у меня алгоритм шифрования AES. Нашел онлайн сервис, который предоставляет возможность шифрования/расшифровки данных (ссылка).

    Вот, что получилось:

    Вообщем, не может он открыть. В чем дело? Может что-то не так делаю? Подскажите

    8 сентября 2013 г. 13:36
  • "Судя по конфигам у меня алгоритм шифрования AES"  - это общий стандарт шифрования, конкретные реализации могут оличаться. Поэтому нужен именно тот класс который его шифрует, и убедитесь, что именно он используется (прописан в конфиге, секция decryption). Посмотрите данный топик.

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа Higgs.Boson 10 сентября 2013 г. 6:41
    9 сентября 2013 г. 5:19
    Модератор
  • Спасибо. С вашей помощью разобрался.
    10 сентября 2013 г. 6:41