OpenID الأمن:RPs لا تضمن أن المصادقة تمت الموافقة من قبل مزود الفعلية
-
11-12-2019 - |
سؤال
الوصف العام
لقد نفذت العملية (OpenID مقدم) ، وذلك باستخدام DotNetOpenAuth.أنا اختبار ضد المثال RPs (الاعتماد الأطراف) ، مثل دروبال OpenID تسجيل الدخول ، OpenIdRelyingPartyWebForms
المشروع في DotNetOpenAuth هو Samples
الحل.
المشكلة هي أنه بقدر ما استطيع ان اقول ، عندما متصفح مستبعد ضد المرجع يرسل "المصادقة الناجحة" طلب (mode: id_res
, claimed_id: smth
, إلخ.) العودة إلى RP, RP لا تحاول إجراء من جانب الملقم طلب إلى المرجع نسأل إذا كان فعلا مصادقة المستخدم.أستطيع أن أرى أن هناك openid.sig
التوقيع عاد من العملية, ولكن مرة أخرى, أنا لا أرى كيف RP يمكن التحقق من ذلك, لأنه لم تبادل مفاتيح مع المرجع.
لذا فإن السؤال هو: هناك بعض الإعدادات على المرجع الجانب الذي أنا يمكن أن تجعل سير العمل آمنة ؟
التفاصيل التقنية
أنا استخدام يريشارك شم HTTP حركة المرور على RP الجانب.لا يوجد HTTPS, حتى أستطيع أن أرى وقراءة كافة الرسائل.أدناه تستطيع أن ترى ما يحدث بالضبط. ب = المتصفح ، OP = OpenID مقدم ، RP = الطرف المعول.أسماء النطاقات يتم استبدال *.example.com.
(B –> RP) يحاول المستخدم لزيارة أعضاء فقط من الموارد على الطرف المعول.انه مدخلات العملية نقطة النهاية التي متصفح المشاركات RP.
openid_identifier: http://OP.example.com/OpenId/Provider.aspx?xrds
(RP –> OP –> RP) RP القضايا من جانب الخادم طلب إلى المرجع الذي ترجع XRDS الوثيقة.لا أستطيع أن أرى أي شيء مماثل على المفتاح السري الصرف هنا.
<?xml version="1.0" encoding="UTF-8"?> <xrds:XRDS xmlns:xrds="xri://$xrds" xmlns:openid="http://openid.net/xmlns/1.0" xmlns="xri://$xrd*($v*2.0)"> <XRD> <Service priority="10"> <Type>http://specs.openid.net/auth/2.0/server</Type> <Type>http://openid.net/extensions/sreg/1.1</Type> <URI>http://OP.example.com/OpenId/Provider.aspx</URI> </Service> </XRD> </xrds:XRDS>
(RP –> B> OP) الطرف المعول 302-توجيه المستخدم إلى OP
/OpenId/Provider.aspx?[params]
URL ، حيث params هي التالية:openid.claimed_id: http://specs.openid.net/auth/2.0/identifier_select openid.identity: http://specs.openid.net/auth/2.0/identifier_select openid.assoc_handle: {634730422000625000}{jkQC1Q==}{32} openid.return_to: http://RP.example.com/login.aspx?ReturnUrl=%2FMembersOnly%2FDefault.aspx&dnoa.receiver=ctl00_Main_OpenIdLogin1&dnoa.UsePersistentCookie=Session&dnoa.userSuppliedIdentifier=http%3A%2F%2FOP.example.com%2FOpenId%2FProvider.aspx%3Fxrds openid.realm: http://RP.example.com/ openid.mode: checkid_setup openid.ns: http://specs.openid.net/auth/2.0 openid.ns.sreg: http://openid.net/extensions/sreg/1.1 openid.sreg.policy_url: http://RP.example.com/PrivacyPolicy.aspx openid.sreg.required: email,gender,postcode,timezone
(OP –> B> RP) مزود يصادق على المستخدم 302-إعادة توجيه له إلى RP التالية معلمات عنوان URL.
ReturnUrl: /MembersOnly/Default.aspx dnoa.receiver: ctl00_Main_OpenIdLogin1 dnoa.UsePersistentCookie: Session dnoa.userSuppliedIdentifier: http://OP.example.com/OpenId/Provider.aspx?xrds openid.claimed_id: http://OP.example.com/OpenId/User.aspx/2925 openid.identity: http://OP.example.com/OpenId/User.aspx/2925 openid.sig: pWJ0ugjQATKGgRSW740bml9LDsSxFiJ+a9OLO6NlsvY= openid.signed: claimed_id,identity,assoc_handle,op_endpoint,return_to,response_nonce,ns.sreg,sreg.nickname,sreg.email openid.assoc_handle: {634730422000625000}{jkQC1Q==}{32} openid.op_endpoint: http://OP.example.com/OpenId/Provider.aspx openid.return_to: http://RP.example.com/login.aspx?ReturnUrl=%2FMembersOnly%2FDefault.aspx&dnoa.receiver=ctl00_Main_OpenIdLogin1&dnoa.UsePersistentCookie=Session&dnoa.userSuppliedIdentifier=http%3A%2F%2FOP.example.com%2FOpenId%2FProvider.aspx%3Fxrds openid.response_nonce: 2012-05-19T16:40:11ZSfsL4BK1 openid.mode: id_res openid.ns: http://specs.openid.net/auth/2.0 openid.ns.sreg: http://openid.net/extensions/sreg/1.1 openid.sreg.nickname: user@OP.example.com openid.sreg.email: user@OP.example.com
(RP –> OP) RP ينفذ من جانب الملقم طلب HTTP إلى المرجع.لا يوجد نقل البيانات, مجرد الحصول على طلب المكتسبة سابقا من هوية المستخدم URL.لماذا لا تجعل هذا الطلب في جميع بالمناسبة ؟
GET /OpenId/User.aspx/2925 HTTP/1.1
(OP –> RP) OP الردود مع آخر XRDS الوثيقة:
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns:openid="http://openid.net/xmlns/1.0" xmlns="xri://$xrd*($v*2.0)"> <XRD> <Service priority="10"> <Type>http://specs.openid.net/auth/2.0/signon</Type> <Type>http://openid.net/extensions/sreg/1.1</Type> <URI>http://OP.example.com/OpenId/Provider.aspx</URI> </Service> <Service priority="20"> <Type>http://openid.net/signon/1.0</Type> <Type>http://openid.net/extensions/sreg/1.1</Type> <URI>http://OP.example.com/OpenId/Provider.aspx</URI> </Service> </XRD> </xrds:XRDS>
(RP –> B) هذا هو.المستخدم هو أذن و RP يظهر له أعضاء فقط من الموارد.
المحلول
RPs يمكن أن تعمل في جليل أو عديمي الجنسية وسائط (المعروف أيضا باسم الذكية و الغبية وسائط ، على التوالي).تحقق من شبكة الرسوم البيانية لكل.
هناك مرة واحدة تبادل المفاتيح بين RP المرجع ، شريطة RP تعمل في جليل الوضعية.إذا كان في وضع عديمي الجنسية ، سترى رسالة من RP إلى المرجع بعد كل المصادقة للتحقق من التأكيد على التوقيع.
بخصوص سؤالك عن #5 (HTTP رئيس الطلب ادعى معرف) هذا هو DotNetOpenAuth RP التحقق من أن المرجع هو مخول من أجل الهوية هو تأكيد.لأنه سبق أن سحبت هذا الرابط, ذاكرة التخزين المؤقت في ركلات والابتعاد عن المحتوى إحالة.
نصائح أخرى
أنا أشعر بالغباء الآن, لقد غاب عن شيء الأساسية—هناك هو تبادل المفاتيح بين RP OP, ولكن هذا يحدث فقط مرة واحدة ، ثم اضغط على مفتاح مؤقتا في كلا الجانبين لبعض الوقت.
لذا تنفيذ OpenID مزود تتحول إلى أن تكون آمنة :)