Encoding SonarQube 6.3 LDAP/SSO UTF-8编码

Encoding SonarQube 6.3 LDAP/SSO UTF-8编码,encoding,utf-8,ldap,sonarqube,single-sign-on,Encoding,Utf 8,Ldap,Sonarqube,Single Sign On,我们在我的公司中使用LDAP/SSO,它以UTF-8格式为SonarQube提供用户名 但是,LDAP/SSO在UFT-8中发送用户名,但SonarQube需要Latin1/ISO-8859。无法更改LDAP/SSO或SonarQube上的编码 结果错误umlauts: AndrüTingö=Andr«ÃTing¼Ã或ëüö=Ã195;«Ã¼Ã 有什么解决办法吗?我想把这篇文章作为评论发表,但我需要50个声誉来写评论 我们将simplesamlphp用于SSO作为IdP和SP。IdP从LDAP获

我们在我的公司中使用LDAP/SSO,它以UTF-8格式为SonarQube提供用户名

但是,LDAP/SSO在UFT-8中发送用户名,但SonarQube需要Latin1/ISO-8859。无法更改LDAP/SSO或SonarQube上的编码

结果错误umlauts:

AndrüTingö
=
Andr«ÃTing¼Ã或ëüö=Ã195;«Ã¼Ã


有什么解决办法吗?

我想把这篇文章作为评论发表,但我需要50个声誉来写评论

我们将simplesamlphp用于SSO作为IdP和SP。IdP从LDAP获取cn、givenName和sn,LDAP具有UTF-8值。登录名/用户名仅为美国ascii码

如果用户来到Sonar,则非美国ascii字符不正确-它们是从。。。对于utf-8,即使它们已经在utf-8中

如果我在PHP中使用IDP的属性,该属性以UTF-8发送页面,那么字符是正确的

我刚才做了一个测试。在我们的Apache配置中,我们将X-Forwarded-Name设置为MCAC\u ATTR\u CN属性SP从IdP获取的内容。原始配置为:

RequestHeader set X-Forwarded-Name "expr=%{reqenv:MCAC_ATTR_CN}"
现在我在UTF-8中添加了固定字符串:

RequestHeader set X-Forwarded-Name "expr=%{reqenv:MCAC_ATTR_CN} cäëöüc"
“c”字符只是为了更好地查看编码文本的分隔符

此配置行的hextump是:

0000750:        09 0909 5265 7175 6573 7448 6561     ...RequestHea
0000760: 6465 7220 7365 7420 582d 466f 7277 6172  der set X-Forwar
0000770: 6465 642d 4e61 6d65 2022 6578 7072 3d25  ded-Name "expr=%
0000780: 7b72 6571 656e 763a 4d43 4143 5f41 5454  {reqenv:MCAC_ATT
0000790: 525f 434e 7d20 63c3 a4c3 abc3 b6c3 bc63  R_CN} c........c
00007a0: 220a                                     ".              
如您所见,有固定的utf-8字符“ä”c3a4“ë”c3ab“ö”c3b6“ü”c3bc

来自LDAP的名称如下:

xxxxxx xxxxx xxxx äëüö
在Apache配置中,附加了“cäëöüc”,因此产生的名称应为:

xxxxxx xxxxx xxxx äëüö cäëöüc
但在声纳中,名称显示为

xxxxxx xxxxx xxxx äëüö cäëöüc
如果转换以下文本,则会得到类似的结果:

xxxxxx xxxxx xxxx äëüö cäëöüc
从ISO-8859-1到UTF-8:

echo "xxxxxx xxxxx xxxx äëüö cäëöüc" | iconv -f iso-8859-2 -t utf-8
xxxxxx xxxxx xxxx äÍßÜ cäÍÜßc
“·”字符为utf-8字符c2 a4:

00000000: c2a4 0a                                  ...
我已经在环回上进行了tcpdump,以获得从apache代理模块到sonarqube的通信,甚至在那里,您可以看到正确的UTF-8字符c3a4 c3ab c3bc c3b6从IdP提交,然后在“c”之间,您可以看到c3a4 c3ab c3b6 c3bc直接从apache提交

00000000  47 45 54 20 2f 61 63 63  6f 75 6e 74 20 48 54 54   GET /acc ount HTT
...
00000390  58 2d 46 6f 72 77 61 72  64 65 64 2d 4e 61 6d 65   X-Forwar ded-Name
000003A0  3a 20 72 6f 62 65 72 74  20 74 65 73 74 32 20 77   : xxxxxx  xxxxx x
000003B0  6f 6c 66 20 c3 a4 c3 ab  c3 bc c3 b6 20 63 c3 a4   xxx .... .... c..
000003C0  c3 ab c3 b6 c3 bc 63 0d  0a                        ......c. .       
...
如果这很重要,系统将locale设置为en_US.UTF-8

所以Sonar从Apache(直接配置或IdP)获得了真正的UTF-8文本,但随后可能有什么东西将这个UTF-8文本转换成了iso-8859文本,再次变成了UTF-8,这毫无意义

你现在知道了吗?这可能是声纳或包装器中的某些内容,或者某些选项设置不正确的地方吗

问候,


罗伯特。

你为什么说SonarQube需要拉丁文1/ISO-8859?UTF-8是应该在任何地方使用的编码。您好@JulienL.-SonarSourceTeam,因为LDAP/SSO发送的用户名似乎是用拉丁文1/ISO-8859编码的,即使它实际上是UTF-8。好的,我会调查一下,然后回到youHum,在我调查之前,您能告诉我您是如何使用LDAP和SSO的吗?您正在使用sonar.web.sso.enable吗?是的,我们正在使用设置为true的sonar.web.sso.enable。对于LDAP和SSO,我们使用simplesamlphp。1) 我们做了一些测试。我们100%确信来自SSO的用户名(AndrüTingö)是UTF-8格式的,它也会作为UTF-8转发给Sonarqube。2) SonarQube输出:Andr«ÃTing¼Ã-->因此字符串被转换为UFT-8两次。