Dela via


Gör så här: Skapa en stödjande autentiseringsuppgift

Det är möjligt att ha ett anpassat säkerhetsschema som kräver mer än en autentiseringsuppgift. En tjänst kan till exempel kräva av klienten, inte bara ett användarnamn och lösenord, utan även en autentiseringsuppgift som bevisar att klienten är över 18 år. Den andra autentiseringsuppgiften är en stödjande autentiseringsuppgift. I det här avsnittet beskrivs hur du implementerar sådana autentiseringsuppgifter i en WCF-klient (Windows Communication Foundation).

Kommentar

Specifikationen för stöd för autentiseringsuppgifter är en del av WS-SecurityPolicy-specifikationen. Mer information finns i Säkerhetsspecifikationer för Web Services.

Stödtoken

När du använder meddelandesäkerhet används i korthet alltid en primär autentiseringsuppgift för att skydda meddelandet (till exempel ett X.509-certifikat eller en Kerberos-biljett).

Enligt specifikationen använder en säkerhetsbindning token för att skydda meddelandeutbytet. En token är en representation av en säkerhetsautentiseringsuppgift.

Säkerhetsbindningen använder en primär token som identifieras i säkerhetsbindningsprincipen för att skapa en signatur. Den här signaturen kallas för meddelandesignaturen.

Ytterligare token kan anges för att utöka anspråken som tillhandahålls av den token som är associerad med meddelandesignaturen.

Endorsing, Signing och Encrypting

En stödjande autentiseringsuppgift resulterar i en stödtoken som överförs i meddelandet. WS-SecurityPolicy-specifikationen definierar fyra sätt att koppla en stödtoken till meddelandet enligt beskrivningen i följande tabell.

Syfte beskrivning
Undertecknat Den stödjande token ingår i säkerhetsrubriken och signeras av meddelandesignaturen.
Stödja En sluten token signerar meddelandesignaturen.
Signerad och sluten Signerade, sluten token signerar hela ds:Signature elementet som skapats från meddelandesignaturen och signeras själva av den meddelandesignaturen, det vill sa att båda token (token som används för meddelandesignaturen och den signerade endorsing-token) signerar varandra.
Signerad och krypterad Signerade, krypterade stödtoken är signerade stödtoken som också krypteras när de visas i wsse:SecurityHeader.

Autentiseringsuppgifter för programmering

Om du vill skapa en tjänst som använder stödtoken måste du skapa en customBinding>.< (Mer information finns i Gör så här: Skapa en anpassad bindning med securityBindingElement.)

Det första steget när du skapar en anpassad bindning är att skapa ett säkerhetsbindningselement, som kan vara en av tre typer:

Alla klasser ärver från SecurityBindingElement, som innehåller fyra relevanta egenskaper:

Omfattningar

Det finns två omfång för stöd för autentiseringsuppgifter:

  • Slutpunktsstöd för token stöder alla åtgärder för en slutpunkt. Det innebär att autentiseringsuppgifterna som den stödjande token representerar kan användas när alla slutpunktsåtgärder anropas.

  • Åtgärden som stöder token stöder endast en specifik slutpunktsåtgärd.

Som anges av egenskapsnamnen kan stödautentiseringsuppgifter vara antingen obligatoriska eller valfria. Om den stödjande autentiseringsuppgiften används om den finns, men det inte är nödvändigt, men autentiseringen misslyckas inte om den inte finns.

Förfaranden

Skapa en anpassad bindning som innehåller stödautentiseringsuppgifter

  1. Skapa ett säkerhetsbindningselement. Exemplet nedan skapar en SymmetricSecurityBindingElement med autentiseringsläget UserNameForCertificate . Använd metoden CreateUserNameForCertificateBindingElement.

  2. Lägg till den stödjande parametern i samlingen med typer som returneras av lämplig egenskap (Endorsing, , SignedSignedEncryptedeller SignedEndorsed). Typerna System.ServiceModel.Security.Tokens i namnområdet innehåller vanliga typer, till exempel X509SecurityTokenParameters.

Exempel

beskrivning

I följande exempel skapas en instans av SymmetricSecurityBindingElement och en instans av KerberosSecurityTokenParameters klassen läggs till i samlingen som egenskapen Endorsing returnerade.

Code

public static Binding CreateMultiFactorAuthenticationBinding()
{
    HttpTransportBindingElement httpTransport = new HttpTransportBindingElement();

    // The message security binding element will be configured to require 2 tokens:
    // 1) A user name/password encrypted with the service token.
    // 2) A client certificate used to sign the message.

    // Instantiate a binding element that will require the user name/password token
    // in the message (encrypted with the server certificate).
    SymmetricSecurityBindingElement messageSecurity = SecurityBindingElement.CreateUserNameForCertificateBindingElement();

    // Create supporting token parameters for the client X.509 certificate.
    X509SecurityTokenParameters clientX509SupportingTokenParameters = new X509SecurityTokenParameters();
    // Specify that the supporting token is passed in the message send by the client to the service.
    clientX509SupportingTokenParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient;
    // Turn off derived keys.
    clientX509SupportingTokenParameters.RequireDerivedKeys = false;
    // Augment the binding element to require the client's X.509 certificate as an
    // endorsing token in the message.
    messageSecurity.EndpointSupportingTokenParameters.Endorsing.Add(clientX509SupportingTokenParameters);

    // Create a CustomBinding based on the constructed security binding element.
    return new CustomBinding(messageSecurity, httpTransport);
}

Se även