Как получить токен, необходимый для аутентификации DFS Kerberos? - PullRequest
0 голосов
/ 01 сентября 2010

Я пытаюсь написать клиент для использования DFS (Documentum Foundation Services) и пытаюсь использовать Kerberos для единого входа. Пример кода Java и C # (уровень производительности) в документации дает следующую строку, которая получает двоичный токен Kerberos:

byte [] ticket = ...

Я не уверен, как фактически получить двоичный токен , и "..." мне не помогает. Кто-нибудь знает, как получить реальный билет (токен Kerberos), используя Java или C #?

Вот примеры, приведенные как для 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(...);

1 Ответ

0 голосов
/ 03 февраля 2011

Я только что понял это для .NET и хотел бы поделиться для тех, кто, возможно, заинтересован. Что нужно, так это библиотека WSE3. Обязательно настройте учетную запись службы DFS для делегирования Kerberos.

Итак, что нужно сделать, это установить KerberosTokenHandler с токеном Kerberos. 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);
}
...