كيف يمكنني الحصول على رمز مميز لمصادقة DFS Kerberos؟
-
26-09-2019 - |
سؤال
أحاول كتابة عميل لاستهلاك DFS (Documentum Foundation Services) وأحاول استخدام Kerberos للتسجيل الواحد. كل من رمز عينة Java و C# (طبقة الإنتاجية) في الوثائق يعطي السطر التالي الذي يحصل على الرمز المميز الثنائي Kerberos:
البايت [] تذكرة = ...
لست متأكدًا من كيفية في الواقع احصل على الرمز الثنائي, و "..." لا يساعدني. هل يعرف أي شخص كيفية الحصول على تذكرة فعلية (Kerberos Token) باستخدام Java أو C#؟
فيما يلي الأمثلة المقدمة لكل من Java و C#:
جافا: استدعاء خدمة مع مصادقة 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(...);
المحلول
لقد اكتشفت هذا الأمر لـ .NET وأرغب في مشاركة أولئك الذين ربما يهتمون. المطلوب هو مكتبة WSE3. تأكد من تكوين حساب خدمة DFS الخاص بك لتفويض Kerberos.
إذن ما الحاجة إلى القيام به هو تعيين KerberostokenHandler مع Kerberos Token. يأتي 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);
}