0

我正在尝试编写一个客户端来使用 DFS(Documentum 基础服务)并尝试使用 Kerberos 进行单点登录。文档中的 Java 和 C# 示例代码(生产力层)都提供了获取 Kerberos 二进制令牌的以下行:

字节 [] 票 = ...

我不确定如何实际获取二进制令牌,并且“...”对我没有帮助。有谁知道如何使用 Java 或 C# 获取实际票证(Kerberos 令牌)?

以下是 Java 和 C# 的示例:

Java:使用 Kerberos 身份验证调用服务

KerberosTokenHandler handler = new KerberosTokenHandler();
IObjectService service = ServiceFactory
.getInstance().getRemoteService(..., contextRoot, Arrays.asList((Handler) handler));
byte[] ticket = ...;
handler.setBinarySecurityToken(
new KerberosBinarySecurityToken(ticket, KerberosValueType.KERBEROSV5_AP_REQ));
service.create(...)

C#:使用 Kerberos 身份验证调用服务

KerberosTokenHandler handler = new KerberosTokenHandler();
List<IEndpointBehavior> handlers = new List<IEndpointBehavior>();
handlers.Add(handler);
IObjectService service = ServiceFactory
.Instance.GetRemoteService<IObjectService>(..., contextRoot, handlers);
byte[] ticket = ...;
handler.SetBinarySecurityToken(
new KerberosBinarySecurityToken(ticket, KerberosValueType.GSS_KERBEROSV5_AP_REQ));
service.create(...);
4

1 回答 1

0

我只是为 .NET 解决了这个问题,并希望与可能感兴趣的人分享。需要的是 WSE3 库。确保为 Kerberos 委派配置您的 DFS 服务帐户。

所以需要做的是用 Kerberos 令牌设置你的 KerberosTokenHandler。KerberosBinarySecurityToken 来自 WSE3。代码看起来像这样:

KerberosTokenHandler kerberosTokenHandler = new KerberosTokenHandler();

String servicePrincipalName = “DFS/example66”;  // this is the service principal name for your DFS service account in Active Directory.
using (KerberosClientContext kerberosClientContext = new KerberosClientContext(servicePrincipalName, true, ImpersonationLevel.Delegation))
{
      KerberosBinarySecurityToken token = new KerberosBinarySecurityToken(kerberosClientContext.InitializeContext(), KerberosValueType.KERBEROSV5_AP_REQ);
      kerberosTokenHandlerandler.SetBinarySecurityToken(token);
}
于 2011-02-03T19:29:19.947 回答