0

我有几个网站 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 转换为字符串,但上述方法中没有一个采用该字符串并返回一个 SecurityToken,而是采用 GenericXmlSecurityToken。该类的构造函数在这里并且依赖于多个参数。

https://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.genericxmlsecuritytoken.genericxmlsecuritytoken(v=vs.110).aspx

问题:

  1. 我是否需要在我的 webconfigs 中添加一些东西才能在
    没有 POST 的情况下实现这一点?
  2. 我可以序列化 SecurityToken 并将其发布到网站 B 并使用所有原始值再次反序列化它(这是这种情况下的方法)。
4

1 回答 1

0

正确的解决方案是使用两个网站都用于身份验证的 STS。手动发布令牌有点麻烦。

也就是说 - 您可以从 XML 字符串构造一个 GenericXmlSecurityToken。IIRC 你可以简单地传递null给你不知道的所有 ctor 参数。

于 2015-05-06T07:05:51.717 回答