سؤال

أنا أعمل على تطبيق يستند إلى الراحة يتصل ب Office365. سيكون التطبيق متاحا على منصات متعددة، لذلك قمت بإنشاء مكتبة فئة محمولة للتعامل مع جميع المنطق، بما في ذلك المصادقة. تستهدف PCL Windows Phone 7.1 وما بعده، ويتضمن مكتبات Microsoft HTTP العميل (Nuget)، والتي هي مطلوبة لنظام التشغيل Windows Phone 7.1 Apps.

الخطوة الأخيرة للمصادقة ل Office365 هي الحصول على ملف تعريف ارتباط فيدياوث من الموقع، وهذا هو المكان الذي أواجه فيه مشكلة.

الرمز الذي أستخدمه للحصول على ملف تعريف الارتباط هو:

giveacodicetagpre.

متغير "المضيف" هو مجرد عنوان URL لموقع Office365، وحصلت BinarySecurityToken عن الطلبات السابقة. تعمل هذه الأشياء بشكل جيد بنفس القدر في جميع التطبيقات: سواء قمت بتشغيل رمز PCL من سياق تطبيق Windows Phone 7.1 أو تطبيق Windows Phone 8 أو تطبيق Windows 8 أو حتى تطبيق وحدة التحكم، أحصل على نفس الاستجابة (انظر أدناه)، والذي يحتوي على ملف تعريف ارتباط فيدياوث. لقد تحققت هذا باستخدام Fiddler.

ثم أحاول الحصول على ملف تعريف الارتباط لإعادة استخدامه على الطلبات اللاحقة.

giveacodicetagpre.

هذا يؤدي إلى النتيجة التالية: على Windows Phone 7.1 يحتوي المتغير "Cookiecollection" فقط على ملف تعريف الارتباط RTFA. على المنصات الأخرى، أنه يحتوي على جميع ملفات تعريف الارتباط الثلاثة "RPSCONTEXTCOKIE"، "RTFA"، 'Fedauth'.

ينتشر Windows Phone 7.1 من التطبيقات الأخرى في أن هذا هو النظام الأساسي الوحيد الذي يستخدم بالفعل HTTPCLient من حزمة Nuget. تحتوي المنصات الأخرى على HTTPClient الأصلي التي تم تبديلها بواسطة سحر PCL.

يبدو من المحتمل أن تكون المشكلة ناجمة عن ملف تعريف الارتباط الفديوث لا يمتلك مجالا. لقد حاولت استخدام. gagetcookies (null)، واختلافات مختلفة من. getcookiokies (uri جديد (شيء جديد "، urikind.relative))، والتي كلها تؤدي إلى استثناء. لقد حاولت أيضا تغيير معظم خصائص httpclienthenthenthentler دون حظ.

لديه أي شخص واجه هذه المشكلة، وربما حلها؟ أو مجرد اقتراح حول ما يمكن أن أحاول؟

الاستجابة التي أحصل عليها على .postasync أعلاه هو نفسه على جميع المنصات، ووفقا ل fiddler، فإن الاستجابة الأولية هي:

giveacodicetagpre.

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

المحلول

وجدت إجابة من النوع هنا: الوصول إلى ملفات تعريف الارتباط httponly من Windows Phone 8 / PCL .

قراءة المنصب الذي أدركت أنني قد ارتكبت خطأ أعلاه: لم أكن أحصل على ملف تعريف الارتباط "RTFA" في تطبيق Windows Phone 7.1، لكن "RPSCONTCOKIE". كانت ملفات تعريف الارتباط لم أستطع الوصول إليها كلاهما مع httponly.

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

giveacodicetagpre.

___cookiecontainer هو مجرد حقل مبكر للفئة لتخزين حاوية ملفات تعريف الارتباط. ثم، بمجرد مصادقة وأفعل الطلبات التي هي الغرض الفعلي للتطبيق، أقوم بما يلي:

giveacodicetagpre.

لذلك الخلاصة القول هو: لا يمكنني الوصول إلى ملفات تعريف الارتباط httponly - لكنني لا أحتاج إلى ذلك. أنا فقط أعد استخدام حاوية ملفات تعريف الارتباط، ويتم تضمين ملفات تعريف الارتباط تلقائيا في الطلب التالي.

هذا يعمل في كل من تطبيقات Windows Phone 7.1، ويندوز الهاتف 8 تطبيقات وتطبيقات وحدة التحكم وغيرها.

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