使用自己的openid提供程序连接到Jenkins(simpleid)

时间:2012-09-10 20:39:39

标签: jenkins openid openid-provider

有人知道如何使用自己的openid提供程序连接Jenkins吗?

我们的网站上有一个openid提供商 - simpleid(http://simpleid.koinic.net/) 我尝试将它连接到Jenkins。 我已经检查过我可以用谷歌帐户连接到詹金斯,myopenid,.... 但是当我尝试将我的openidprovider URL添加到OpenID SSO并将这些更改保存在MYJENKINS / configure时,我得到一个Java异常:

Exception: java.lang.RuntimeException: Failed to instantiate class hudson.plugins.openid.OpenIdSsoSecurityRealm from {"endpoint":"MY_OPENID_URL","stapler-class":"hudson.plugins.openid.OpenIdSsoSecurityRealm","value":"4

当我尝试进入任何其他网站(我知道的每个网站)时,我都可以保存它。

我们的openid服务器配置有什么问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

我们遇到了同样的问题。这是我们发现的:

如果您仔细检查异常,您会注意到堆栈跟踪中描述了引发异常的根本原因

Caused by: org.openid4java.discovery.DiscoveryException: 0x70d: Error parsing XML document
.
.
.   
Caused by: org.xml.sax.SAXParseException; lineNumber: 4; columnNumber: 15; cvc-complex-type.2.4.a: Invalid content was found starting with element 'Type'. One of '{"xri://$xrd*($v*2.0)":Query, "xri://$xrd*($v*2.0)":Status, "xri://$xrd*($v*2.0)":ServerStatus, "xri://$xrd*($v*2.0)":Expires, "xri://$xrd*($v*2.0)":ProviderID, "xri://$xrd*($v*2.0)":Redirect, "xri://$xrd*($v*2.0)":Ref, "xri://$xrd*($v*2.0)":LocalID, "xri://$xrd*($v*2.0)":EquivID, "xri://$xrd*($v*2.0)":CanonicalID, "xri://$xrd*($v*2.0)":CanonicalEquivID, "xri://$xrd*($v*2.0)":Service, WC[##other:"xri://$xrd*($v*2.0)"], WC[""]}' is expected. at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException

似乎简单的id使用XRDS simple,这种格式在2008年末被取消了。我不确定它是否仍然是有效的OpenID 2.0响应,但我知道Jenkins无法解析它。

如果您要手动编辑XRDS文档(只需从文档中删除<Type>xri://$xrds*simple</Type>)并将Jenkins指向您编辑过的文件的位置(并在http服务器上提供),您将能够保存配置没有错误。

但不幸的是,这仍然无法奏效。尝试登录时,将显示以下错误:

javax.servlet.ServletException: org.openid4java.consumer.ConsumerException: 0xa00: Authentication cannot continue: no discovery information provided.

似乎SimpleID支持每用户端点,但不为多个用户提供单个端点 - 这正是Jeknins在SSO模式下所需要的。

底线 - 你必须使用另一个OpenID提供者而不是SimpleID