Подтвердить что ты не робот

Какова идея IIdentity и IPrincipal в .NET.

Итак, какова цель существования как IIdentity, так и IPrincipal, а не некоторых IIdentityMergedWithPrincipal? Когда этого недостаточно для реализации в одном классе?

Кроме того, чтобы понять цель, я хотел бы знать, откуда взялась эта концепция:

  • Он создан в .Net
  • Существует концепция Identity/Principal как шаблон проектирования, который System.Security.Principal реализован в этих интерфейсах
  • Он создан в другом месте и поддерживается для совместимости.

Следовательно, UserPrincipal из System.DirectoryServices действует аналогично IPrincipal, но не реализует его случайно или намеренно?

P.S. Я ищу аргументы за идею, а не сравнение преимуществ/противоречий, поэтому, пожалуйста, постарайтесь не начинать дискуссионную дискуссию

4b9b3361

Ответ 1

IIdentity используется только для идентификации аутентифицированной пользователя, независимо от того, какие роли они могут иметь.

IPrincipal используется для объединения идентификатора пользователя с разрешенными ролями, которые у них есть в данном контексте безопасности.

Например, вы можете использовать сторонний логин, например Facebook или Google, чтобы получить идентификатор пользователя, но вы не получите принципала от этих поставщиков, поскольку они не предоставляют никаких ролей. Вы можете использовать собственное приложение или сторонний поставщик авторизации на основе ролей для применения ролей, например, FacebookIdentity или GoogleIdentity. Другое приложение может ожидать другого принципала с его собственными ролями, но по-прежнему использовать тот же идентификатор, что и в другом приложении.

Ответ 2

Принципом является контекст безопасности пользователя.

В случае .NET основной принцип поддерживает концепцию наличия более одного идентификатора (это еще не имеет отношения к претензиям). Это особенно важно, когда речь идет о семантике, с которой разработчикам нужно иметь дело, когда дело касается идентификации пользователя. Вы можете быть приглашены в качестве разработчика для поддержки нескольких идентификаторов, поступающих из разных источников (IdPs поставщиков удостоверений личности), например: Twitter, Google, что угодно.

Так что же такое между IPrincipal и IIDentity? IPrincipal - это контекст безопасности (для одного потока), а IIDentity - это набор атрибутов, связанных с этим пользователем, исходящих от конкретного поставщика/авторитета идентификации.

Ответ 3

Как Сайт MSDN говорит:

Объект identity инкапсулирует информацию об проверяемом пользователе или объекте. На самом базовом уровне объекты идентификации содержат имя и тип проверки подлинности.

тогда

Объект main представляет контекст безопасности, под которым выполняется код.

Подробнее см. ссылку выше.

НТН

Ответ 4

public class HBPrincipal : IPrincipal
{
     private HBIdentity _identity;

     public HBPrincipal(HBIdentity identity)
    {
        _identity = identity;
    }

    public IIdentity Identity
    {
        get
        {
            return _identity;
        }
    }

    public bool IsInRole(string role)
    {
        // TODO implement roles
        return false;
    }
}