SecurityTokenService.GetOutputClaimsIdentity Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
При переопределении в производном классе этот метод возвращает коллекцию выходных субъектов, которые должны быть включены в выданный токен.
protected:
abstract System::Security::Claims::ClaimsIdentity ^ GetOutputClaimsIdentity(System::Security::Claims::ClaimsPrincipal ^ principal, System::IdentityModel::Protocols::WSTrust::RequestSecurityToken ^ request, System::IdentityModel::Scope ^ scope);
protected abstract System.Security.Claims.ClaimsIdentity GetOutputClaimsIdentity (System.Security.Claims.ClaimsPrincipal principal, System.IdentityModel.Protocols.WSTrust.RequestSecurityToken request, System.IdentityModel.Scope scope);
abstract member GetOutputClaimsIdentity : System.Security.Claims.ClaimsPrincipal * System.IdentityModel.Protocols.WSTrust.RequestSecurityToken * System.IdentityModel.Scope -> System.Security.Claims.ClaimsIdentity
Protected MustOverride Function GetOutputClaimsIdentity (principal As ClaimsPrincipal, request As RequestSecurityToken, scope As Scope) As ClaimsIdentity
Параметры
- principal
- ClaimsPrincipal
Объект ClaimsPrincipal, представляющий удостоверение стороны, запрашивающей токен.
- request
- RequestSecurityToken
Объект RequestSecurityToken, представляющий запрос токена безопасности. Содержит сообщение запроса, а также другую связанную с клиентом информацию, например контекст авторизации.
- scope
- Scope
Объект Scope, содержащий информацию о проверяющей стороне, связанной с данным запросом. Это объект Scope, возвращенный методом GetScope(ClaimsPrincipal, RequestSecurityToken).
Возвращаемое значение
ClaimsIdentity, содержащий коллекцию утверждений, которые будут помещены в выданный токен безопасности.
Примеры
Пример кода, используемый в этом разделе, взят из Custom Token
примера. В этом примере представлены пользовательские классы, которые позволяют обрабатывать простые веб-маркеры (SWT), и он включает реализацию пассивной службы sts, которая может обслуживать маркер SWT. Пример реализации активной службы маркеров sts можно найти в Federation Metadata
этом примере. Сведения об этих и других примерах, доступных для WIF, и о том, где их можно скачать, см. в разделе WiF Code Sample Index. В следующем коде показано, как переопределить GetOutputClaimsIdentity метод для возврата утверждений для службы sts. В этом примере сообщение запрос маркера безопасности (RST) игнорируется и возвращается коллекция утверждений на основе пользователя, прошедшего проверку подлинности в службе маркеров безопасности.
/// <summary>
/// This method returns the content of the issued token. The content is represented as a set of
/// IClaimIdentity intances, each instance corresponds to a single issued token. Currently, the Windows Identity Foundation only
/// supports a single token issuance, so the returned collection must always contain only a single instance.
/// </summary>
/// <param name="scope">The scope that was previously returned by GetScope method</param>
/// <param name="principal">The caller's principal</param>
/// <param name="request">The incoming RST, we don't use this in our implementation</param>
/// <returns></returns>
protected override ClaimsIdentity GetOutputClaimsIdentity( ClaimsPrincipal principal, RequestSecurityToken request, Scope scope )
{
//
// Return a default claim set which contains a custom decision claim
// Here you can actually examine the user by looking at the IClaimsPrincipal and
// return the right decision based on that.
//
ClaimsIdentity outgoingIdentity = new ClaimsIdentity();
outgoingIdentity.AddClaims(principal.Claims);
return outgoingIdentity;
}
Комментарии
Метод GetOutputClaimsIdentity вызывается из конвейера выдачи маркеров, который реализуется методом Issue . Он возвращает объект ClaimsIdentity , содержащий утверждения для включения в выданный маркер безопасности на основе инициатора запроса маркера ( principal
параметр), входящего RST ( request
параметр) и проверяющей стороны, для которой предназначен маркер ( scope
параметр ). Логика в этом методе в первую очередь связана с ответами на следующие вопросы:
Какие типы утверждений следует включить в ответ на основе RP, для которого он предназначен? Обычно это решение принимается на основе отдельных RP из списков типов утверждений, необходимых для каждого RP, или на основе каждого запроса путем проверки Claims свойства запроса. Однако логика и сведения для определения утверждений для включения в ответ полностью зависит от реализации.
Какие значения утверждений должны быть назначены утверждениям в ответе? Для поставщика удостоверений (IP-STS) обычно это означает использование одного или нескольких утверждений в запросиве ClaimsPrincipal (предоставляемых параметром
principal
) для доступа к хранилищу (или другой сущности) для возврата значений для требуемых типов утверждений. Для поставщика федерации (R-STS) это обычно означает выполнение какой-либо обработки входящих утверждений запрашивающей стороны для выполнения запроса; возможно выполнение фильтрации или преобразования для некоторых утверждений, представленных инициатором запроса, при одновременной передаче других через неизмененные. Конечно, как и в случае принятия решения о том, какие утверждения следует включить в ответ, сведения и логика определения значений этих утверждений зависит от реализации.
Примечания для тех, кто реализует этот метод
Этот метод необходимо переопределить при реализации класса SecurityTokenService.