我有几个网站A,B,C ...... 网站A:是一个认证网站,具体取决于用户名,密码和额外参数;网站A将成功用户登录重定向到网站B. 当用户登录时,我在网站A中获得从System.IdentityModel.Tokens.SecurityToken派生的令牌。我的第一种方法是尝试通过POST请求将该令牌传递到另一个网站,但没有成功,因为令牌太大。首先我认为它是可序列化的但不是:GenericXmlSecurityToken可以使用ToTokenXmlString()转换为XML。这是一个关于Thinktecture.IdentityModel.Extensions的扩展方法,下面我附上了类的描述
public static class SecurityTokensExtensions
{
public static ClaimsPrincipal ToClaimsPrincipal(this SecurityToken token, SecurityTokenHandlerCollection handler);
public static ClaimsPrincipal ToClaimsPrincipal(this SecurityToken token, X509Certificate2 signingCertificate);
public static ClaimsPrincipal ToClaimsPrincipal(this SecurityToken token, X509Certificate2 signingCertificate, string audienceUri);
public static SecurityToken ToSecurityToken(this GenericXmlSecurityToken token);
public static SecurityToken ToSecurityToken(this GenericXmlSecurityToken token, SecurityTokenHandlerCollection handler);
public static SecurityToken ToSecurityToken(this GenericXmlSecurityToken token, X509Certificate2 decryptionCertificate);
public static string ToTokenXmlString(this GenericXmlSecurityToken token);
public static string ToTokenXmlString(this SecurityToken token);
public static string ToTokenXmlString(this SecurityToken token, SecurityTokenHandlerCollection handler);
}
正如您所看到的,我们可以将XML转换为String,但上述方法不会将该字符串转换为SecurityToken,而是采用GenericXmlSecurityToken。该类的构造函数在这里并依赖于多个参数。
问题:
答案 0 :(得分:0)
正确的解决方案是使用两个网站用于身份验证的STS。手动发布令牌有点笨拙。
那就是说 - 你可以从XML字符串构造一个GenericXmlSecurityToken。 IIRC您只需将null
传递给您不了解的所有ctor参数。