为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这样的令牌格式,但是令牌是由遗留系统评估的,该系统期望特定的格式,我无法影响。
与此同时,我自己也找到了问题的答案:
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 SecurityKeyIdentifier是SecurityKeyIdentifierClauses的集合。当需要时,您可以使用System.IdentityModel中的实现。标记。通常你不需要自己处理这些
键标识符与自定义令牌一起用于完成几件事情。它们描述令牌,和/或指向其他相关的令牌(因为令牌可以只是指针——可能是出于性能原因等)。如果不需要键标识符,可以做两件事:
-
CanWriteKeyIdentifierClause:
返回falsepublic override bool CanWriteKeyIdentifierClause(SecurityKeyIdentifierClause){返回错误;}
-
从CreateSecurityTokenReference返回一个默认(或空)值:
public override SecurityKeyIdentifierClause CreateSecurityTokenReference(SecurityToken token, bool attached){返回默认(SecurityKeyIdentifierClause);}