通过SAML使用包含特殊字符的密码通过SAML请求STS令牌 - c#

编辑:我注意到错误不仅发生在五个XML保留字符上,而且在其他特殊字符上也发生了。

我用于获取STS令牌的SAML请求有问题。

SAML请求以XML格式。
如果随请求发送的密码包含XML保留的字符,则登录失败。我试图转义字符(&= &)或使用CDATA

lBuilder.Append('<o:Password type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"><![CDATA[').Append(lPassword).Append(']]></o:Password>');

但是显然密码无法正确识别,并且登录仍然失败。
如果我使用CDATA,则即使使用有效的密码登录也无法成功。该请求通过发布命令发送到https://login.microsoftonline.com/RST2.srf(cDefaultSTS)。

有没有一种方法可以正确地转义密码中的特殊字符而不会发生冲突?
该代码是用Delphi编写的,我正在使用以下客户端设置来发送post命令(lSAMLRequestStream包含XML格式的请求)。

lConnection.Client.Accept := '*/*';
lConnection.Client.AcceptLanguage := 'en-US';
lConnection.Client.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)';
lConnection.Client.ContentType := 'application/soap+xml';
lConnection.Client.HandleRedirects := True;
lConnection.Client.AcceptEncoding := '';
lSTSResponse := lConnection.Post(cDefaultSTS, lSAMLRequestStream);

我使用Microsoft.SharePoint库在C#中尝试了相同的操作,但是如果密码包含保留字符之一,则身份验证仍然会失败。转义在这里也不起作用。

using (ClientContext clientContext = new ClientContext("https:[email protected]"))
{
  var passWord = new SecureString();
  string passwrd = "Password&";

  string encodedXml = HttpUtility.HtmlEncode(passwrd);

  foreach (char c in encodedXml.ToCharArray()) passWord.AppendChar(c);

  clientContext.Credentials = new SharePointOnlineCredentials("[email protected]",passWord);

   Web web = clientContext.Web;
   Console.WriteLine(clientContext.Site);
   clientContext.Load(web);

   clientContext.ExecuteQuery();

   Console.WriteLine(web.Title);
   Console.ReadLine();
}

参考方案

通过CDATA标记转义实际上是解决方案并起作用。我使用的测试帐户还有一个额外的问题,那就是由于密码的原因,它似乎仍然失败。顺便说一下,C#代码不需要任何其他转义。

将字符串分配给numpy.zeros数组[重复] - python

This question already has answers here: Weird behaviour initializing a numpy array of string data                                                                    (4个答案)         …

TypeError:'str'对象不支持项目分配,带有json文件的python - python

以下是我的代码import json with open('johns.json', 'r') as q: l = q.read() data = json.loads(l) data['john'] = '{}' data['john']['use…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

如何用'-'解析字符串到节点js本地脚本? - python

我正在使用本地节点js脚本来处理字符串。我陷入了将'-'字符串解析为本地节点js脚本的问题。render.js:#! /usr/bin/env -S node -r esm let argv = require('yargs') .usage('$0 [string]') .argv; console.log(argv…

如果我得到url(''),我该如何使用另一个URL - javascript

我是新手,正在写这篇文章,但是如果源上没有图像,那么我只有空白。有人可以告诉我,如果我正在获取背景图像,如何获取/images/no-image.jpg:url();这是我的代码:<div class="uk-clearfix uk-position-relative"> <div class="recipeb…