مرحباً،
لدينا الإعداد التالي:
Discourse الرسمي 2.5.0 ([ 3f7658cc6e ]) مع إضافة discourse-saml (الإصدار 230a58b)،
Keycloak (10.0.2) كمزود للهوية.
تم إعداد مزود الهوية لدينا لاستخدام عنوان URL https://discourse.our-domain.xxx/auth/saml/slo كعنوان URL لربط خدمة تسجيل الخروج عبر POST. تعمل عملية تسجيل الدخول لدينا بشكل مثالي. عند استخدام زر تسجيل الخروج في Discourse، يتم إلغاء جلسة مزود الهوية (IdP) أيضاً.
المشكلة تظهر عند استخدام وظيفة تسجيل الخروج في مزود الهوية. لا يقوم Discourse بإلغاء الجلسة. يستلم المنتدى الطلب، لكنه لا يبدو أنه يعالجه بشكل صحيح. يبقى المستخدم مسجلاً للدخول، ونحصل على خطأ في سجلات Discourse.
اسم المستخدم في السجلات التالية هو test.
Started POST "/auth/saml/slo" for 127.0.0.1 at 2020-07-09 18:29:33 +0000
OmniAuth::Strategies::SAML::ValidationError (SAML failed to process LogoutRequest)
/var/www/discourse/plugins/discourse-saml/gems/2.6.6/gems/omniauth-saml-1.9.0/lib/omniauth/strategies/saml.rb:189:in `handle_logout_request'
شرط الـ if الذي أدى إلى حدوث الاستثناء هو التالي (saml.rb):
if logout_request.is_valid? &&
logout_request.name_id == session["saml_uid"]
كود للمخرجات التشخيصية
STDERR.puts '*************************************************************************'
STDERR.puts 'raw_request:'
STDERR.puts raw_request
STDERR.puts '*************************************************************************'
STDERR.puts 'logout_request.is_valid?'
STDERR.puts logout_request.is_valid?
STDERR.puts '*************************************************************************'
STDERR.puts 'logout_request.name_id'
STDERR.puts logout_request.name_id
STDERR.puts '*************************************************************************'
STDERR.puts 'session[saml_uid]'
STDERR.puts session["saml_uid"]
STDERR.puts '*************************************************************************'
أضفنا المخرجات التشخيصية في ملف saml.rb (السطر 181) وتلقينا القيم التالية:
*************************************************************************
raw_request:
الطلب الخام (تم فك ترميزه باستخدام base64)
<?xml version="1.0"?>
<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns="urn:oasis:names:tc:SAML:2.0:assertion" Destination="https://discourse.test.our-domain.xxx/auth/saml/slo" ID="ID_ee6ef1f7-a269-443f-9942-1311b2c09636" IssueInstant="2020-07-09T19:20:27.882Z" Version="2.0">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://ima.test.our-domain.xxx/auth/realms/master</saml:Issuer>
<dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<dsig:SignedInfo>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<dsig:Reference URI="#ID_ee6ef1f7-a269-443f-9942-1311b2c09636">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<dsig:DigestValue>nbeIwX97u+NNRf4KswI95oSmI2w=</dsig:DigestValue>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue>[...]</dsig:SignatureValue>
<dsig:KeyInfo>
<dsig:KeyName>[...]</dsig:KeyName>
<dsig:X509Data>
<dsig:X509Certificate>[...]</dsig:X509Certificate>
</dsig:X509Data>
<dsig:KeyValue>
<dsig:RSAKeyValue>
<dsig:Modulus>[...]</dsig:Modulus>
<dsig:Exponent>AQAB</dsig:Exponent>
</dsig:RSAKeyValue>
</dsig:KeyValue>
</dsig:KeyInfo>
</dsig:Signature>
<saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">test</saml:NameID>
<samlp:SessionIndex>393fc3ab-6a18-4b8e-89a5-a005fc48f7cf::36a71dc0-22a0-4b72-be02-68639bedea06</samlp:SessionIndex>
</samlp:LogoutRequest>
*************************************************************************
logout_request.is_valid?
true
*************************************************************************
logout_request.name_id
test
*************************************************************************
session[saml_uid]
*************************************************************************
هل يمكن لأي شخص مساعدتنا؟ لا يبدو الأمر وكأنه مشكلة في الإعدادات بالنسبة لنا.
شكراً مقدماً
ماكس