Vorgehensweise: Erstellen einer verwalteten Kartenausstellungssite

Eine verwaltete Karte stellt Metadaten über einen STS (Sicherheitstokendienst, Security Token Service) dar, z. B. die Adresse des Diensts, seine Authentifizierungsmethode und die ausgestellten Ansprüche. Wenn Sie einen Dienst erstellen, um Token für die Identitätsauswahl auszustellen, müssen Sie an die Benutzer auch verwaltete Informationskarten ausstellen. Dies wird in diesem Thema erläutert.

Ausstellen einer Karte

Das folgende Codebeispiel zeigt, wie auf der ASP.NET-Seite verwaltete Informationskarten mit hartcodierten Adressen für den STS und die vertrauende Seite ausgestellt werden.

protected void IssueCard() { // STS certificate X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); store.Open(OpenFlags.ReadOnly); X509Certificate2Collection certificateCollection = store.Certificates.Find(X509FindType.FindBySubjectDistinguishedName, "CN=localhost", true); store.Close(); X509Certificate2 stsCertificate = certificateCollection[0];

    // STS endpoint addresses string stsAddress = "https://localhost/Sts"; string stsMex = "https://localhost/mex"; // Initialisiert die Karte mit dem STS-Signaturzertifikat und dem STS-Austellernamen InformationCard card = new InformationCard(stsCertificate, "http://myissuer"); // Legt die vom STS unterstützten Anspruchstypen fest card.SupportedClaimTypeList.Add(new DisplayClaim(ClaimTypes.Role)); // Legt die vom STS unterstützten Tokentypen fest card.SupportedTokenTypeList.Add(Saml11SecurityTokenHandler.OasisWssSamlTokenProfile11); // Die TokenService-Klasse beschreibt die Endpunktinformationen eines STS // Dieser Code veranschaulicht, wie eine Karte für einen STS-Endpunkt eingerichtet wird, // der Kerberos-Authentifizierung erwartet TokenService stsEndpoint = new TokenService(new TokenServiceEndpoint(stsAddress, stsCertificate, stsMex, UserCredentialType.KerberosV5Credential)); card.TokenServiceList.Add(stsEndpoint); // Legt die Kartensprache fest card.Language = "en"; InformationCardSerializer cardSerializer = new InformationCardSerializer(); // Schreibt in das aktuelle Verzeichnis FileStream cardStream = new FileStream("InformationCard.crd", FileMode.Create, FileAccess.ReadWrite); cardSerializer.WriteCard(cardStream, card); cardStream.Close(); }

Hinweis

Es wird empfohlen, dass der STS einen Cache ausgestellter Informationskarten beibehält. Auf diese Weise kann der Dienst bei Empfang einer Anforderung zur Ausgabe eines Tokens überprüfen, ob die Anforderung einen Verweis auf eine bekannte und aktuelle Informationskarte enthält. Wenn sich der Verweis auf eine unbekannte bzw. abgelaufene Informationskarte bezieht, kann der STS die Anforderung entsprechend behandeln.