在POST中将参数SecurityToken传递给不同的asp.net mvc网站不能允许Single Sing-On

时间:2015-03-17 15:26:06

标签: asp.net asp.net-mvc thinktecture-ident-server thinktecture-ident-model thinktecture

我有几个网站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。该类的构造函数在这里并依赖于多个参数。

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

问题:

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

1 个答案:

答案 0 :(得分:0)

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

那就是说 - 你可以从XML字符串构造一个GenericXmlSecurityToken。 IIRC您只需将null传递给您不了解的所有ctor参数。