2012-03-26 32 views
5

Necesito crear token SAML con datos personalizados.Crear token SAML personalizado

Hay un buen ejemplo buscando en MSDN pero no es la compilación ....

tiene a nadie consiguió SMT leer sobre él de la muestra de trabajo?

¿O simplemente está agregando nuevos reclamos a la colección Assertion? ¿Debo describirlos en los metadatos de la federación? ¿Qué otros problemas debo hacer? Estaría encantado de ver cualquier ayuda.

Respuesta

12

Recuerdo que hay algunos códigos de generación de tokens SAML personalizados en uno de los ejemplos de ACS. Ese sería un buen lugar para comenzar. Puede descargarlo here, busque OAuth2CertificateSample, SelfSignedSaml2TokenGenerator.cs. El código es el siguiente: reclamaciones

/// <summary> 
/// Creates a SAML assertion signed with the given certificate. 
/// </summary> 
public static Saml2SecurityToken GetSamlAssertionSignedWithCertificate(String nameIdentifierClaim, byte[] certificateWithPrivateKeyRawBytes, string password) 
{ 
    string acsUrl = string.Format(CultureInfo.InvariantCulture, "https://{0}.{1}", SamplesConfiguration.ServiceNamespace, SamplesConfiguration.AcsHostUrl); 

    Saml2Assertion assertion = new Saml2Assertion(new Saml2NameIdentifier(nameIdentifierClaim)); 

    Saml2Conditions conditions = new Saml2Conditions(); 
    conditions.NotBefore = DateTime.UtcNow; 
    conditions.NotOnOrAfter = DateTime.MaxValue; 
    conditions.AudienceRestrictions.Add(new Saml2AudienceRestriction(new Uri(acsUrl, UriKind.RelativeOrAbsolute))); 
    assertion.Conditions = conditions; 

    Saml2Subject subject = new Saml2Subject(); 
    subject.SubjectConfirmations.Add(new Saml2SubjectConfirmation(Saml2Constants.ConfirmationMethods.Bearer)); 
    subject.NameId = new Saml2NameIdentifier(nameIdentifierClaim); 
    assertion.Subject = subject; 

    X509SigningCredentials clientSigningCredentials = new X509SigningCredentials(
      new X509Certificate2(certificateWithPrivateKeyRawBytes, password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable)); 

    assertion.SigningCredentials = clientSigningCredentials; 

    return new Saml2SecurityToken(assertion); 
} 

Además, el proceso de autenticación no requiere que se emiten en los metadatos describen federación. Los reclamos publicados en los metadatos de federación son solo sugerencias para el consumidor de tokens en cuanto a lo que deberían esperar encontrar en el token emitido.

+0

¡Gracias por una solución interesante! –

+0

Tal como pensaba, el único problema que tenía en mi código era olvidarme de configurar las credenciales de firma. Gran Snippit. Mucho amor. – Eon

+0

Nueva ubicación de descarga de ACS: https://code.msdn.microsoft.com/Windows-Azure-AD-Access-0dcde385 – fiat