Как использовать Систему. IdentityModel в собственном клиент-серверном приложении

Вышеупомянутый подход работает, но это не лучшая практика и, следовательно, имеет некоторые ограничения. Я бы посоветовал вам использовать шаблон компоновщика, где вы можете использовать компоновщик для создания объекта, а затем иметь метод, который определяет поведение. Вы сможете расширить это, чтобы добавить переменные / бизнес-логику в будущем.

Я думаю, что паттерн «Фабрика» также хорош, чтобы на него смотреть

13
задан dtb 14 March 2009 в 18:08
поделиться

1 ответ

Мое нечто Google было действительно слабо. Ответ является правильным позади ссылки в моем вопросе. Таким образом, вот несколько ссылок на этот блог в случае, если у кого-то есть тот же вопрос в конечном счете.

Во-первых, необходимо попытаться понять, "что требование установило материал":

Затем необходимо знать, куда наборы требования прибывают из:

Вооруженный этим знанием, это на самом деле становится довольно простым.

Если бы я понимаю это правильно, основной рабочий процесс был бы чем-то вроде этого:

  1. Клиент создает a SecurityToken использование a SecurityTokenProvider
  2. Клиент сериализирует SecurityToken использование a SecurityTokenSerializer
  3. Сервер десериализовывает SecurityToken использование a SecurityTokenSerializer
  4. Сервер создает IAuthorizationPolicys использующий a SecurityTokenAuthenticator
  5. Сервер создает AuthorizationContext от IAuthorizationPolicys
  6. Готово

Пример:

// Create the SecurityTokenProvider
var p = new UserNameSecurityTokenProvider("username", "password");

// Get the SecurityToken from the SecurityTokenProvider
var t = p.GetToken(TimeSpan.FromSeconds(1.0)) as UserNameSecurityToken;

// ... transmit SecurityToken to server ...

// Create the SecurityTokenAuthenticator
var a = new CustomUserNameSecurityTokenAuthenticator(
    UserNamePasswordValidator.None);

// Create IAuthorizationPolicies from SecurityToken
var i = a.ValidateToken(t);

// Create AuthorizationContext from IAuthorizationPolicies
var c = AuthorizationContext.CreateDefaultAuthorizationContext(i);
ShowClaims(c.ClaimSets);

Для X509SecurityTokens используют a X509SecurityTokenProvider/Authenticator. Для WindowsSecurityTokens существует a WindowsSecurityTokenAuthenticator но не поставщик; вместо этого, используйте WindowsSecurityToken конструктор:

var t = new WindowsSecurityToken(WindowsIdentity.GetCurrent());

Это работает вполне хорошо. Единственной вещью, которую я опустил до сих пор выше, является маркерная сериализация. Существует a SecurityTokenSerializer класс, который имеет одну реализацию в платформе.NET: WSSecurityTokenSerializer класс, который идет с WCF.

Сериализация UserNameSecurityTokens и X509SecurityTokens работы как очарование (не попробовали десериализацию), но WindowsSecurityTokens, по-видимому, не поддерживаются сериализатором. Это оставляет меня с двумя методами аутентификации, которые я уже имею (сертификаты и имя пользователя/пароль) и, поскольку я не хотел это AuthorizationContext так или иначе я буду придерживаться с тем, что я имею :)

17
ответ дан 1 December 2019 в 21:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: