Как обрабатывать токены ActAs в WIF 4.5?

Я создаю STS, используя классы WIF (System.IdentityModel) в .NET 4.5. Эта STS должна обрабатывать токен ActAs. Я успешно создал прототип клиента для отправки токена ActAs, и это приводит к следующему сообщению об ошибке на стороне сервера:

ID3265: элемент ActAs найден, но не было зарегистрированных обработчиков токенов для чтения элемента ActAs. Рассмотрите возможность добавления допустимой коллекции SecurityTokenHandlerCollection в SecurityTokenHanderCollectionManager для использования ActAs.

Однако я не вижу способа добавить SecurityTokenHandlerCollection к SecurityTokenHanderCollectionManager. Как это делается?

Я попробовал то, что предлагается в этой документации:

<securityTokenHandlers name="ActAs">
    ...
</securityTokenHandlers>

Но это приводит к этой ошибке:

ID0005: входная коллекция configElement.ElementInformation.Properties не содержит свойства с именем ActAs.

«Эквивалентное» (согласно этой документации) заклинание ServiceConfiguration.SecurityTokenHandlerCollectionManager["ActAs"] одинаково бесполезно:

Необработанное исключение: System.Collections.Generic.KeyNotFoundException: данный ключ отсутствует в словаре. в System.Collections.Generic.Dictionary`2.get_Item (ключ TKey) в System.IdentityModel.Tokens.SecurityTokenHandlerCollectionManager.get_Item (использование строки)

Обратите внимание, что эта документация содержит практически ту же информацию, что и 1, но специально для .NET 4.5.

Как обращаться с токенами ActAs?


person Mark    schedule 30.01.2013    source источник


Ответы (1)


Индексатор на SecurityTokenHandlerCollectionManager доступен не только для чтения:

// Summary:
//     Returns the security token handler collection for the specified usage.
//
// Parameters:
//   usage:
//     The usage name for the token handler collection.
//
// Returns:
//     The token handler collection associated with the specified usage.
public SecurityTokenHandlerCollection this[string usage] { get; set; }

Просто установите SecurityTokenHandlerCollection для данного ключа в желаемую коллекцию:

SecurityTokenHandlerCollectionManager["ActAs"] = new SecurityTokenHandlerCollection();
// or:
SecurityTokenHandlerCollectionManager[SecurityTokenHandlerCollectionManager.Usage.ActAs] = new SecurityTokenHandlerCollection();
person Mark    schedule 30.01.2013