2012-03-26 3 views
5

Мне нужно создать токен SAML с пользовательскими данными.Создание пользовательского токена SAML

Существует красивый пример на MSDN, но это не компиляции ....

ли кто-нибудь получил ЗПТ, чтобы прочитать о нем рабочем образце?

Или просто добавляет новые претензии в Assertion collection? Нужно ли описывать их в федеративных метаданных? Какие еще вопросы я должен делать? Был бы рад увидеть любую помощь.

ответ

12

Я помню, что в одном из образцов ACS есть какой-то пользовательский код генерации маркера SAML. Это было бы хорошим местом для начала. Вы можете скачать его here, найти OAuth2CertificateSample, SelfSignedSaml2TokenGenerator.cs. Код выглядит следующим образом:

/// <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); 
} 

Кроме того, процесс аутентификации не требует выданных требования, которые будут описаны в метаданных федерации. Заявки, опубликованные в метаданных федерации, являются лишь намеками для потребителя токенов относительно того, что они должны ожидать найти в выпуске маркера.

+0

Спасибо за интересное решение! –

+0

Как я и думал, единственная проблема, с которой я столкнулся в своем коде, - это забыть установить signcredentials. Великий снипп. Большая любовь. – Eon

+0

Новое местоположение загрузки ACS: https://code.msdn.microsoft.com/Windows-Azure-AD-Access-0dcde385 – fiat

Смежные вопросы