Создание собственного токена SAML - PullRequest
5 голосов
/ 26 марта 2012

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

На MSDN есть красивый пример, но он не компилируется ...

Кто-нибудь мог прочитать об этом рабочего образца?

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

1 Ответ

12 голосов
/ 27 марта 2012

Я помню, что в одном из примеров ACS есть некоторый пользовательский код генерации токена SAML.Это было бы хорошим местом для начала.Вы можете скачать его здесь , ищите 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);
}

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

...