Пользовательский SecurityTokenHandler для WIF - PullRequest
1 голос
/ 11 июля 2011

Я пытаюсь реализовать пользовательские SecurityToken и SecurityTokenHandler для STS с использованием Microsoft.IndentityModel (= Windows Indentity Foundation).

Маркер сериализуется в простой XML-документс подписью (с использованием сертификата X509) и иногда (не всегда) шифруется (зависит от целевой области).

До сих пор это работало довольно хорошо, но я застрял на SecurityTokenHandler.CreateSecurityTokenReference (SecurityToken)токен, бул прилагается) , который должен возвращать SecurityKeyIndetifierClause.

Мой вопрос: что такое SecurityKey, SecurityKeyIndentifier и SecurityKeyIndentifierClause в целом и для моего sceanrio(rsa подписал (и зашифровал) xml-токен) в частности?

В MSDN почти нет документации, и я не смог найти ничего более полезного по этой теме.

Заранее спасибо.

PS: я знаю, что самый простой и рекомендуемый способ - использовать формат токена сборки, такой как saml, но токен оценивается устаревшей системой,воздействует на определенный формат, на который я не имею никакого влияния.

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

Тем временем я нашел ответы на свои вопросы:

SecurityKey

SecurityKey используется для криптографических операций.Это не требуется для реализации токенов на предъявителя.Поэтому вы можете просто вернуть пустой список в соответствующем свойстве SecurityToken :

public override ReadOnlyCollection<SecurityKey> SecurityKeys
{
    get { return new List<SecurityKey>().AsReadOnly(); }
}

SecurityKeyIdentifierClause

Как уже указывалосьдругой ответ SecurityKeyIdentifierClause является своего рода уникальным идентификатором токена безопасности.Он используется SecurityTokenResolver для возврата соответствующего SecurityToken для указанного SecurityKeyIdentifierClause .

Вероятно, лучшее решение для ваших собственных Реализация SecurityTokenHandler возвращает LocalIdKeyIdentifierClause с идентификатором вашего токена в виде localId параметр:

public override SecurityKeyIdentifierClause CreateSecurityTokenReference(SecurityToken token, bool attached)
{
    if (token == null)
        throw new ArgumentNullException("token");

    return new LocalIdKeyIdentifierClause(token.Id);
}

SecurityKeyIdentifier

A SecurityKeyIdentifier представляет собой набор SecurityKeyIdentifierClauses .При необходимости вы можете использовать реализацию в System.IdentityModel.Tokens здесь.Обычно нет необходимости заботиться об этом самостоятельно.

0 голосов
/ 27 июля 2011

Ключевые идентификаторы используются с пользовательскими токенами для выполнения нескольких действий.Они описывают токен и / или указывают на другие связанные токены (потому что токены могут быть просто указателями - возможно, по причинам производительности и др.).если вам не нужен идентификатор ключа, вы можете сделать две вещи:

  • Вернуть false из CanWriteKeyIdentifierClause:

    public override bool CanWriteKeyIdentifierClause (SecurityKeyIdentifierClause securityKeyIdentifierClause) {return false;}

  • Возвращает значение по умолчанию (или ноль) из CreateSecurityTokenReference:

    публичное переопределение SecurityKeyIdentifierClause CreateSecurityTokenReference (токен SecurityToken, bool присоединен) {вернуть значение по умолчанию (SecurityKeyIdentifierClause);}

...