我正在尝试为我们拥有的网站处理重定向身份验证。我在Server2012 R2上配置了ADFS来处理这个问题。我在我的域中设置了一个我正在发送请求的URL的依赖方信任。我将端点添加回他们来自的特定页面。
基本上,我在这里拿这些东西:How do I correctly prepare an 'HTTP Redirect Binding' SAML Request using C#
尝试通过简单的SAML请求令牌发送。
public static string SAMLRequest = @"<samlp:AuthnRequest
xmlns:samlp=""urn:oasis:names:tc:SAML:2.0:protocol""
xmlns:saml=""urn:oasis:names:tc:SAML:2.0:assertion""
ID=""{0}""
Version=""2.0""
AssertionConsumerServiceIndex=""0""
AttributeConsumingServiceIndex=""0"">
<saml:Issuer>URN:xx-xx-xx</saml:Issuer>
<samlp:NameIDPolicy
AllowCreate = ""true""
Format=""urn:oasis:names:tc:SAML:2.0:nameid-format:transient"" />
</samlp:AuthnRequest>";
这是我作为C#字符串发送的模板URL(对于转义字符,以及ID值的字符串替换)。
以下是我用于生成请求参数的代码,该参数将进入我的重定向网址:
public static string GetSAMLHttpRedirectUri(string idpUri)
{
var saml = string.Format(SAMLRequest, Guid.NewGuid());
var bytes = Encoding.UTF8.GetBytes(saml);
using (var output = new MemoryStream())
{
using (var zip = new DeflaterOutputStream(output))
{
zip.Write(bytes, 0, bytes.Length);
}
var base64 = Convert.ToBase64String(output.ToArray());
var urlEncode = HttpUtility.UrlEncode(base64);
return string.Concat(idpUri, "?SAMLRequest=", urlEncode);
}
}
完成所有操作后,页面会将我重定向到适当的端点,并且令牌base64编码正确。好吧,有点正确。
在AD FS方面,我在页面上出现错误,然后它就停止进行身份验证。查看AD FS的事件查看器,它给了我这个神秘的错误:
System.IO.InvalidDataException: Block length does not match with its complement.
我试图摆弄压缩和请求对象本身的一些属性,但无济于事。任何人都有任何想法,我可以尝试这个坏男孩?
答案 0 :(得分:2)