为WIF自定义SecurityTokenHandler

本文关键字:SecurityTokenHandler 自定义 WIF | 更新日期: 2023-09-27 18:01:41

我正在尝试使用Microsoft为STS实现自定义SecurityToken和SecurityTokenHandler。IndentityModel (= Windows identity Foundation).

令牌序列化为带有签名的简单xml文档(使用X509证书),并且有时(并非总是)加密(取决于目标领域)。

直到现在它工作得很好,但我被困在SecurityTokenHandler。CreateSecurityTokenReference(SecurityToken令牌,bool附加),它应该返回一个SecurityKeyIndetifierClause

我的问题是:什么是SecurityKey, SecurityKeyIndentifier和SecurityKeyIndentifierClause一般和我的场景(rsa签名(和加密)xml令牌)在特定的?

MSDN中几乎没有文档,我找不到任何关于这个主题的有用的东西。

提前感谢。

注::我知道最简单和推荐的方法是使用像saml这样的令牌格式,但是令牌是由遗留系统评估的,该系统期望特定的格式,我无法影响。

为WIF自定义SecurityTokenHandler

与此同时,我自己也找到了问题的答案:

SecurityKey

SecurityKey用于加密操作。承载令牌实现不需要这样做。因此,您可以在SecurityToken:

的相应属性中返回一个空列表。
public override ReadOnlyCollection<SecurityKey> SecurityKeys
{
    get { return new List<SecurityKey>().AsReadOnly(); }
}

SecurityKeyIdentifierClause

正如另一个答案已经指出的,SecurityKeyIdentifierClause是安全令牌的唯一标识符。SecurityTokenResolver使用它为指定的SecurityKeyIdentifierClause返回相应的SecurityToken

可能您自己的SecurityTokenHandler实现的最佳解决方案是返回一个localidkeyidentifier子句,其中令牌的id为localId参数:

public override SecurityKeyIdentifierClause CreateSecurityTokenReference(SecurityToken token, bool attached)
{
    if (token == null)
        throw new ArgumentNullException("token");
    return new LocalIdKeyIdentifierClause(token.Id);
}

SecurityKeyIdentifier

A SecurityKeyIdentifierSecurityKeyIdentifierClauses的集合。当需要时,您可以使用System.IdentityModel中的实现。标记。通常你不需要自己处理这些

键标识符与自定义令牌一起用于完成几件事情。它们描述令牌,和/或指向其他相关的令牌(因为令牌可以只是指针——可能是出于性能原因等)。如果不需要键标识符,可以做两件事:

  • CanWriteKeyIdentifierClause:

    返回false

    public override bool CanWriteKeyIdentifierClause(SecurityKeyIdentifierClause){返回错误;}

  • 从CreateSecurityTokenReference返回一个默认(或空)值:

    public override SecurityKeyIdentifierClause CreateSecurityTokenReference(SecurityToken token, bool attached){返回默认(SecurityKeyIdentifierClause);}

相关文章:
  • 没有找到相关文章