【问题标题】:How to read claims from SamlSecurityToken如何从 SamlSecurityToken 读取声明
【发布时间】:2017-02-20 22:39:41
【问题描述】:

我通过代码在 ADFS 上进行身份验证并获得解密的 SamlSecurityToken

var factory = new WSTrustChannelFactory(
    new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential),
    "https://my-adfs-domain.com/adfs/services/trust/13/UserNameMixed")
{
    TrustVersion = System.ServiceModel.Security.TrustVersion.WSTrust13,
    Credentials =
    {
        UserName =
        {
            UserName = "username",
            Password = "password"
        }
    }
};

var token = (GenericXmlSecurityToken)factory.CreateChannel().Issue(
    new RequestSecurityToken
    {
        RequestType = RequestTypes.Issue,
        AppliesTo = new EndpointAddress("https://my-service-domain.com"),
        KeyType = KeyTypes.Symmetric,
        RequestDisplayToken = true
    });

SamlSecurityToken decryptedToken;

using (var stream = new MemoryStream())
{
    using (var writer = XmlWriter.Create(stream))
        token.TokenXml.WriteTo(writer);

    stream.Seek(0, SeekOrigin.Begin);

    using (var reader = XmlReader.Create(stream))
        decryptedToken = (SamlSecurityToken)FederatedAuthentication
            .FederationConfiguration.IdentityConfiguration
            .SecurityTokenHandlers.ReadToken(reader);
}

var userEmail = decryptedToken.Assertion.Statements
    .OfType<SamlAttributeStatement>().Single()
    .Attributes[0].AttributeValues[0];

下一步,我将从颁发的令牌中读取声明(例如用户电子邮件)。

我可以通过上面的代码提取部分相关信息。

但是,我正在寻找一种更直接、更安全的方法来从已发布的SamlSecurityToken 中提取完整的声明列表。

【问题讨论】:

    标签: c# saml wif claims-based-identity adfs


    【解决方案1】:

    到目前为止,阅读这些声明的最简单方法是使用 Saml2SecurityTokenHandler 的内置 Validate 方法。这会将您的安全令牌转换为 ClaimsIdentity 对象的列表(通常是 1 元素列表),这反过来 有一个Claims 集合。从头开始配置这样的处理程序可能是一个挑战。因此,您可以使用您用于读取令牌的方法。拨打ValidateToken on

    FederatedAuthentication
        .FederationConfiguration.IdentityConfiguration
        .SecurityTokenHandlers.ValidateToken()
    

    得到相同的结果。 Validate 方法这个转换的名字有点怪,让人去搜索它。

    【讨论】:

      猜你喜欢
      • 2018-03-04
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 2010-09-10
      相关资源
      最近更新 更多