Java 如何使用Active Directory或LDAP登录到业务对象

Java 如何使用Active Directory或LDAP登录到业务对象,java,authentication,active-directory,sap,business-objects,Java,Authentication,Active Directory,Sap,Business Objects,编辑:在问题标题中添加“或LDAP”,表示我可以找到一个解决方案,使我能够使用LDAP凭据进行身份验证 我的问题:如何使用Active Directory中的凭据对证书进行身份验证 示例:关于如何在.NET中实现这一点,我(我想)有一个SAP示例,但我似乎找不到类似的Java解决方案。(请参阅并搜索“修改.NET Web应用程序以启用Kerberos”) 目前:我有一个使用企业帐户进行身份验证的解决方案: /** * Logs into BusinessObjects. Sets the rep

编辑:在问题标题中添加“或LDAP”,表示我可以找到一个解决方案,使我能够使用LDAP凭据进行身份验证

我的问题:如何使用Active Directory中的凭据对证书进行身份验证

示例:关于如何在
.NET
中实现这一点,我(我想)有一个SAP示例,但我似乎找不到类似的
Java
解决方案。(请参阅并搜索“修改.NET Web应用程序以启用Kerberos”)

目前:我有一个使用企业帐户进行身份验证的解决方案:

/**
* Logs into BusinessObjects. Sets the reportEngine and biPlatform
*/
public void loginToBusinessObjects() throws AxisFault, MalformedURLException, Exception {
  LogHelper.println("Server connection: " + boServer);

  URL boConURL = new URL(boServer);//set connection URL
  connection = new com.businessobjects.dsws.Connection(boConURL);

  boSession = new Session(connection); //setup new session

  EnterpriseCredential credential = EnterpriseCredential.Factory.newInstance();
  credential.setLogin(boUsername);
  credential.setPassword(boPassword);
  LogHelper.println(boUsername + ": ##password##");
  boSession.login(credential); //login to server
  ...
}
上面的代码非常有效

现在:我希望能够允许用户提供他们的Active Directory凭据并使用这些凭据进行身份验证。然而,我似乎找不到这样做的方法。有关上述代码的文档可以在搜索“登录到服务器”中找到


注意:我可能在这件事上完全错了。我的组织对Active Directory和LDAP身份验证使用相同的凭据。如果有一种方法可以使用LDAP实现这一点,那就足够了。谢谢。

答案假定您已为用户设置了Active Directory和/或LDAP身份验证,并且用户具有该身份验证方法的别名。这应该可以通过登录InfoView进行验证

您应该能够通过使用credential.setAuthType(authType)来完成此操作。
authType在哪里

  • “secEnterprise”默认值
  • “secLDAP”
  • “secWinAD”
默认情况下,AuthType设置为secEnterprise似乎是合理的

注意:我仍然使用R3,它有一个稍微不同的身份验证机制,我没有专门尝试过这个解决方案



重要编辑:文档(这对BusinessObjects来说很糟糕,任何阅读本文的人可能都知道)说,对于active directory,您使用“secAD”。然而,在我的测试中,我能够成功地使用“secWinAD”进行身份验证,这在他们的文档中根本没有出现:-/(我可以找到)。

谢谢!LDAP工作正常,但Active Directory不工作。我正在调查这个问题,但你找到了一个很好的解决方案。再次感谢:)由于某些原因,我无法编辑您的答案,但我发现了一些对未来用户有用的东西。他们的文档用于。它们有不同的
secActiveDirectory
(它们使用
secAD
)。但这仍然不起作用,所以我正在研究它。添加了一个
credential.setDomain(“mydomain.org”)行,它使线程挂起并最终超时。我猜这就是应该怎么做的,我有一个Active Directory问题…我用“secWinAD”解决了这个问题。不幸的是,文档中根本没有这一点。希望这个答案能在将来帮助人们!