创建自定义SAML令牌。

6
我需要创建带有自定义数据的SAML令牌。
MSDN上有一个很好的例子,但它无法编译....
是否有人有关于这方面的工作示例或相关阅读材料?
还是只需将新声明添加到Assertion集合中? 我需要在联合元数据中描述它们吗? 我还需要处理哪些其他问题? 非常感谢任何帮助。
1个回答

13

我记得在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);
}

另外,身份验证过程不需要在联合元数据中描述已发布声明。在联合元数据中公布的声明仅是对令牌消费者应该在发放的令牌中找到什么的提示。


正如我所想,我代码中唯一的问题是忘记设置签名凭据。很棒的代码片段。非常感谢。 - Eon
新的ACS下载地址:https://code.msdn.microsoft.com/Windows-Azure-AD-Access-0dcde385 - fiat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接