【问题标题】:Custom SecurityTokenHandler for WIFWIF 的自定义 SecurityTokenHandler
【发布时间】:2011-08-03 01:26:39
【问题描述】:
【问题讨论】:
标签:
c#
.net
wif
sts-securitytokenservice
【解决方案1】:
与此同时,我自己找到了问题的答案:
安全密钥
SecurityKey 用于加密操作。不记名令牌实现不需要这。因此,您可以在 SecurityToken 的相应属性中返回一个空列表:
public override ReadOnlyCollection<SecurityKey> SecurityKeys
{
get { return new List<SecurityKey>().AsReadOnly(); }
}
SecurityKeyIdentifierClause
正如另一个答案已经指出的那样,SecurityKeyIdentifierClause 是一种安全令牌的唯一标识符。 SecurityTokenResolver 使用它来为指定的 SecurityKeyIdentifierClause 返回相应的 SecurityToken。
您自己的 SecurityTokenHandler 实现的最佳解决方案可能是返回一个 LocalIdKeyIdentifierClause,并将您的令牌 ID 作为 localId 参数:
public override SecurityKeyIdentifierClause CreateSecurityTokenReference(SecurityToken token, bool attached)
{
if (token == null)
throw new ArgumentNullException("token");
return new LocalIdKeyIdentifierClause(token.Id);
}
安全密钥标识符
SecurityKeyIdentifier 是 SecurityKeyIdentifierClauses 的集合。如有需要,您可以在此处使用 System.IdentityModel.Tokens 中的实现。通常不需要您自己处理。
【解决方案2】:
密钥标识符与自定义令牌一起使用来做一些事情。它们描述了令牌,和/或指向其他相关的令牌(因为令牌可以只是指针 - 可能是出于性能原因等)。如果你不需要密钥标识符,你可以做两件事:
-
从 CanWriteKeyIdentifierClause 返回 false:
public override bool CanWriteKeyIdentifierClause(SecurityKeyIdentifierClause securityKeyIdentifierClause)
{
返回假;
}
-
从 CreateSecurityTokenReference 返回一个默认(或 null)值:
public override SecurityKeyIdentifierClause CreateSecurityTokenReference(SecurityToken token, bool attach)
{
返回默认值(SecurityKeyIdentifierClause);
}