Как да боравя с 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