سؤال

أنا أستخدم خدمات Exchange عبر الويب للبحث عن المواعيد وإنشائها وتحديثها وحذفها من التقويمات لشخص واحد أو أكثر.سيتم استخدام التطبيق من قبل المدير لعرض وقت إجازة الموظفين، وكذلك تعيين المواعيد على أساس التوفر.

لكي ينجح هذا الأمر بالكامل، يجب إرسال بيانات اعتماد المستخدم المصادق عليه إلى خدمة الويب.حتى الآن، الطريقتان اللتان وجدتهما تسمحان بذلك هما 1) تمرير اسم المستخدم وكلمة المرور لكل مستخدم و2) انتحال شخصية مستخدم لاستخدام DefaultCredentials.لا يعمل خيار DefaultCredentials بالنسبة لنا لأننا لا نسمح بانتحال هوية المستخدمين.

هل يعرف أحد طريقة أخرى؟

هل كانت مفيدة؟

المحلول

هل هناك قيود في سياسة الشركة تمنعك من استخدام انتحال الهوية؟هل تشير إلى انتحال صفة Windows أو انتحال صفة Exchange؟

اعتمادًا على نوع الانتحال الذي لا يمكنك استخدامه، قد يكون البديل هو تفويض الوصول.

إذا كان الهدف هو السماح للمدير بعرض صناديق بريد متعددة، فإليك بعض الخيارات:

(1) منح المفوض حق الوصول إلى صناديق بريد الموظفين للمدير.اعتمادًا على مستوى وصول المفوض، سيسمح هذا للمدير بعرض صناديق بريد الموظفين وتحريرها حسب الحاجة.هناك تحذير واحد حول هذا الأسلوب، اعتمادًا على نوع/كيفية منح الوصول، يمكن للمفوض (الموظف) إزالة الوصول وإيقاف المدير من عرض التقويمات الخاصة به.

للمصادقة باستخدام وصول المفوض، بافتراض أن التطبيق الذي يستخدم خدمات الويب كان يعمل ضمن سياق المدير، يجب أن تكون قادرًا على استخدام DefaultCredentials.

(2) قم بإنشاء حساب خدمة يتمتع إما بحقوق انتحال الشخصية أو تفويض الوصول إلى صناديق بريد الموظفين.ثم قم بتسجيل الدخول كحساب الخدمة.

بالإضافة إلى ذلك، إليك بعض الروابط التي قد تجدها مفيدة...

نصائح أخرى

إذا فهمت أنت الحق، مدير ستستخدم تطبيق ومصادقة إلى EWS على النحو نفسه. سوف EWS يكون قادر على تحديث علبة بريد مستخدم آخر بسبب أذونات غير كافية في ذلك الوقت.

وماذا عن اعطاء وصول مدير لصندوق البريد لكل مستخدم؟

و(أو أنا في عداد المفقودين جزءا كبيرا من السؤال؟)

وإذا كان المستخدم سوف يتم تسجيل على آلة خاصة بها، ومن المرجح أن تكون متاحة في ذاكرة التخزين المؤقت الاعتماد هذه أوراق اعتماد، يمكنك بناء كائن WebCredential من ICredentials جوه الحصول عليها من هناك:

public static ExchangeService GetService()
{
    var webCredentials = new WebCredentials(CredentialCache.DefaultNetworkCredentials);

    var service = new ExchangeService(ExchangeVersion);
    service.AutodiscoverUrl(Properties.Settings.Default.SmptAccountName);
    service.Credentials = credentials;

    return service;   
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top