SecurityTokenService.GetScope(ClaimsPrincipal, RequestSecurityToken) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Scope Získá objekt, který obsahuje informace o předávající straně (RP) přidružené k zadanému požadavku (RST). Tuto metodu musíte přepsat v implementaci SecurityTokenService třídy .
protected:
abstract System::IdentityModel::Scope ^ GetScope(System::Security::Claims::ClaimsPrincipal ^ principal, System::IdentityModel::Protocols::WSTrust::RequestSecurityToken ^ request);
protected abstract System.IdentityModel.Scope GetScope (System.Security.Claims.ClaimsPrincipal principal, System.IdentityModel.Protocols.WSTrust.RequestSecurityToken request);
abstract member GetScope : System.Security.Claims.ClaimsPrincipal * System.IdentityModel.Protocols.WSTrust.RequestSecurityToken -> System.IdentityModel.Scope
Protected MustOverride Function GetScope (principal As ClaimsPrincipal, request As RequestSecurityToken) As Scope
Parametry
- principal
- ClaimsPrincipal
A ClaimsPrincipal , který představuje klienta, který vytváří požadavek.
- request
- RequestSecurityToken
A RequestSecurityToken , který představuje příchozí požadavek (RST).
Návraty
A Scope , který zapouzdřuje informace poskytovatele prostředků přidružené k požadavku.
Příklady
Příklad kódu, který se používá v tomto tématu, je převzat z ukázky Custom Token
. Tato ukázka poskytuje vlastní třídy, které umožňují zpracování jednoduchých webových tokenů (SWT) a zahrnuje implementaci pasivní služby tokenů zabezpečení, která je schopna obsluhovat token SWT. Příklad implementace aktivní služby TOKENS najdete v ukázce Federation Metadata
. Informace o těchto ukázkách a dalších ukázkách dostupných pro WIF a o tom, kde je stáhnout, najdete v tématu Index vzorového kódu WIF.
Následující příklad kódu ukazuje implementaci GetScope metody . Tato implementace ověří, že služba STS rozpozná poskytovatele prostředků, ověří ReplyTo adresu v požadavku a nastaví Scope.ReplyToAddress vlastnost odpovídajícím způsobem a nastaví podpisové a šifrované přihlašovací údaje pro použití s poskytovatelem prostředků na základě certifikátů, které jsou pevně zakódované v souboru.
// Certificate Constants
private const string SIGNING_CERTIFICATE_NAME = "CN=localhost";
private const string ENCRYPTING_CERTIFICATE_NAME = "CN=localhost";
private SigningCredentials _signingCreds;
private EncryptingCredentials _encryptingCreds;
// Used for validating applies to address, set to URI used in RP app of application, could also have been done via config
private string _addressExpected = "http://localhost:19851/";
/// <summary>
/// This method returns the configuration for the token issuance request. The configuration
/// is represented by the Scope class. In our case, we are only capable of issuing a token to a
/// single RP identity represented by the _encryptingCreds field.
/// </summary>
/// <param name="principal">The caller's principal</param>
/// <param name="request">The incoming RST</param>
/// <returns></returns>
protected override Scope GetScope(ClaimsPrincipal principal, RequestSecurityToken request)
{
// Validate the AppliesTo address
ValidateAppliesTo( request.AppliesTo );
// Create the scope using the request AppliesTo address and the RP identity
Scope scope = new Scope( request.AppliesTo.Uri.AbsoluteUri, _signingCreds );
if (Uri.IsWellFormedUriString(request.ReplyTo, UriKind.Absolute))
{
if (request.AppliesTo.Uri.Host != new Uri(request.ReplyTo).Host)
scope.ReplyToAddress = request.AppliesTo.Uri.AbsoluteUri;
else
scope.ReplyToAddress = request.ReplyTo;
}
else
{
Uri resultUri = null;
if (Uri.TryCreate(request.AppliesTo.Uri, request.ReplyTo, out resultUri))
scope.ReplyToAddress = resultUri.AbsoluteUri;
else
scope.ReplyToAddress = request.AppliesTo.Uri.ToString() ;
}
// Note: In this sample app only a single RP identity is shown, which is localhost, and the certificate of that RP is
// populated as _encryptingCreds
// If you have multiple RPs for the STS you would select the certificate that is specific to
// the RP that requests the token and then use that for _encryptingCreds
scope.EncryptingCredentials = _encryptingCreds;
return scope;
}
/// <summary>
/// Validates the appliesTo and throws an exception if the appliesTo is null or appliesTo contains some unexpected address.
/// </summary>
/// <param name="appliesTo">The AppliesTo parameter in the request that came in (RST)</param>
/// <returns></returns>
void ValidateAppliesTo(EndpointReference appliesTo)
{
if (appliesTo == null)
{
throw new InvalidRequestException("The appliesTo is null.");
}
if (!appliesTo.Uri.Equals(new Uri(_addressExpected)))
{
throw new InvalidRequestException(String.Format("The relying party address is not valid. Expected value is {0}, the actual value is {1}.", _addressExpected, appliesTo.Uri.AbsoluteUri));
}
}
Poznámky
Metoda GetScope se volá z kanálu vystavování tokenů ValidateRequest po metodě a měla by vrátit Scope objekt nakonfigurovaný pro příchozí požadavek. (Kanál vystavování tokenů Issue je implementovaný v metodě .) Objekt Scope zapouzdřuje informace o RP přidruženém k požadavku tokenu zabezpečení (RST). To zahrnuje informace o šifrování a podepisování přihlašovacích údajů, které se mají použít s poskytovatelem prostředků, a o tom, zda se mají v odpovědi šifrovat všechny vydané tokeny a/nebo symetrické klíče. Mezi typické úlohy prováděné v GetScope metodě patří:
Určete, jestli rpéř, pro který je token určen, je rozpoznaný bod obnovení. Způsob provedení závisí na vaší implementaci. Pokud zamýšlený bod obnovení není platným poskytovatelem prostředků pro tuto službu STS, pak by metoda měla vyvolat InvalidRequestException.
Určete přihlašovací údaje pro podepisování, které se mají použít v odpovědi (RSTR), a nastavte SigningCredentials vlastnost odpovídajícím způsobem.
Určete, jestli má být zašifrovaná odpověď nebo jakékoli zahrnuté symetrické klíče a přihlašovací údaje, které se mají k šifrování použít. TokenEncryptionRequiredNastavte vlastnosti , SymmetricKeyEncryptionRequireda EncryptingCredentials odpovídajícím způsobem.
Důležité
Ve výchozím nastavení jsou vlastnosti a SymmetricKeyEncryptionRequired nastaveny
true
tak, TokenEncryptionRequired aby služba STS nemohla vydávat tokeny, které nejsou zabezpečené. Tyto vlastnosti se v produkčním prostředí nikdy nenastavují nafalse
hodnotu .Určete adresu, na kterou se má odpověď vrátit. Nastavte vlastnost nebo AppliesToAddressReplyToAddress odpovídajícím způsobem.
Poznámky pro implementátory
Tuto metodu musíte přepsat v implementaci SecurityTokenService třídy .