authentication - تفويض Google OAuth 2-خطأ: redirect_uri_mismatch




oauth-2.0 (18)

2015 يوليو 15 - تسجيل الدخول الذي كان يعمل الأسبوع الماضي مع هذا البرنامج النصي عند تسجيل الدخول

<script src="https://apis.google.com/js/platform.js" async defer></script>

توقفت عن العمل وبدأت تتسبب في خطأ 400 مع وجود Error: redirect_uri_mismatch

وفي قسم "التفاصيل": redirect_uri=storagerelay://...

أنا حلها عن طريق تغيير إلى:

<script src="https://apis.google.com/js/client:platform.js?onload=startApp"></script>

على موقع الويب https://code.google.com/apis/console لقد سجلت طلبي ، وأعددت Client ID الذي تم إنشاؤه : وسر العميل إلى تطبيقي وحاولوا تسجيل الدخول باستخدام Google. لسوء الحظ ، تلقيت رسالة الخطأ:

Error: redirect_uri_mismatch
The redirect URI in the request: http://127.0.0.1:3000/auth/google_oauth2/callback did not match a registered redirect URI

scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
response_type=code
redirect_uri=http://127.0.0.1:3000/auth/google_oauth2/callback
access_type=offline
approval_prompt=force
client_id=generated_id

ماذا يعني هذه الرسالة ، وكيف يمكنني إصلاحها؟ يمكنني استخدام جوهرة omniauth-google-oauth2 .


أحتاج إلى إنشاء معرّف عميل جديد ضمن واجهات برمجة التطبيقات والخدمات -> بيانات الاعتماد -> إنشاء بيانات اعتماد -> OAuth -> أخرى

ثم قمت بتحميل واستخدام client_secret.json مع برنامج سطر الأوامر الخاص بي الذي يتم تحميله إلى حساب youtube الخاص بي. كنت أحاول استخدام معرف عميل OAuth لتطبيق الويب والذي كان يعطيني خطأ URI المعاد توجيهه في المتصفح.


أي من الحلول المذكورة أعلاه عملت بالنسبة لي. أدناه فعلت

change authorized redirect urls to - https://localhost:44377/signin-google

أمل أن هذا يساعد شخصاما.


إذا كنت تستخدم زر جافا سكريبت في + Google ، postmessage عليك استخدام postmessage بدلاً من عنوان URI الفعلي. استغرق الأمر مني تقريبًا يومًا كاملًا لمعرفة هذا الأمر نظرًا لأن مستندات Google لا تنص عليها بوضوح لسبب ما.


اسمحوا لي أن أكمل الإجابة @ Bazyl: في الرسالة التي تلقيتها ، ذكروا URI "http://localhost:8080/" (والذي بالطبع يبدو تكوين جوجل الداخلية). لقد غيرت معرّف الموارد المنتظم المرخص لذلك ، "http://localhost:8080/" ، ولم تظهر الرسالة بعد الآن ... وتم تحميل الفيديو ... وثائق APIS عديمة الجدوى ... في كل مرة لدي شيء يعمل مع google apis ، أشعر ببساطة "محظوظ" ، ولكن هناك نقص في الوثائق الجيدة حول هذا الموضوع .... :( نعم ، لقد نجحت في ذلك ، لكنني لم أفهم بعد لماذا لا يفشل ، ولا لماذا نجحت ... لم يكن هناك سوى مكان واحد لتأكيد URI في الويب ، وتم نسخه في client_secrets.json ... لا يمكنني الحصول عليه إذا كان هناك مكان ثالث حيث يجب كتابة نفس URI .. لا أجد الوثائق فقط ولكن أيضًا تصميم واجهة المستخدم الرسومية لواجهة برمجة تطبيقات Google ...


بالنسبة إلى تطبيق الويب الخاص بي ، قمت بتصحيح خطئي بالكتابة

instead of : http://localhost:11472/authorize/
type :      http://localhost/authorize/

حاول القيام بهذه الاختبارات:

  1. معرف الحزمة في وحدة التحكم وفي التطبيق الخاص بك. أفضّل تعيين معرّف الحزمة للتطبيق مثل "org.peredovik. $ {PRODUCT_NAME: rfc1034identifier}"
  2. تحقق مما إذا كنت قد أضفت أنواع عناوين URL في علامة التبويب معلومات فقط اكتب معرف الحزمة في المعرف ومخططات عناوين URL ، وتم تعيين الدور على المحرر
  3. في وحدة التحكم في cloud.google.com "APIs & auth" -> "Consent screen" ، يرجى ملء النموذج الخاص بطلبك. "اسم المنتج" هو حقل مطلوب.

استمتع :)


حذار من اضافية / في نهاية http://localhost:8000 يختلف عن http://localhost:8000/



في أي تدفق استردت فيه رمز تفويض من جانب العميل ، مثل واجهة برمجة التطبيقات في GoogleAuth.grantOfflineAccess() ، والآن تريد تمرير الشفرة إلى GoogleAuth.grantOfflineAccess() واستردادها وتخزين بيانات الدخول وتحديث الرموز المميزة ، لاستخدام postmessage سلسلة حرفية بدلاً من redirect_uri.

على سبيل المثال ، بناء على المقتطف في مستند Ruby :

client_secrets = Google::APIClient::ClientSecrets.load('client_secrets.json')
auth_client = client_secrets.to_authorization
auth_client.update!(
  :scope => 'profile https://www.googleapis.com/auth/drive.metadata.readonly',
  :redirect_uri => 'postmessage' # <---- HERE
)

# Inject user's auth_code here:
auth_client.code = "4/lRCuOXzLMIzqrG4XU9RmWw8k1n3jvUgsI790Hk1s3FI"
tokens = auth_client.fetch_access_token!
# { "access_token"=>..., "expires_in"=>3587, "id_token"=>..., "refresh_token"=>..., "token_type"=>"Bearer"}

إن مستندات Google الوحيدة التي تذكر حتى postmessage هي postmessage تسجيل الدخول القديمة في Google+ . من غير المستغرب على الإطلاق أن صفحة المستند للوصول دون اتصال لا يذكر هذا. #FacePalm


في حالتي ، نوع بيانات الاعتماد هو "غير ذلك". لذلك لا يمكنني العثور على Authorized redirect URIs في صفحة بيانات الاعتماد. يبدو في نوع التطبيق: "تطبيق الويب". ولكن يمكنك النقر فوق الزر Download JSON للحصول على ملف client_secret.json .

افتح ملف json ، ويمكنك العثور على المعلمة مثل: "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"] . اخترت استخدام http: // localhost وأنه يعمل بشكل جيد بالنسبة لي.


في حالتي اضطررت للتحقق من نوع معرف العميل لتطبيقات الويب / التطبيقات المثبتة.

التطبيقات المثبتة: http: // localhost [Redirect URIs] في هذه الحالة يعمل localhost ببساطة

تطبيقات الويب: تحتاج إلى اسم نطاق صالح [Redirect URIs:]


كان لدي عنوانين URI للطلب في وحدة التحكم ، http://xxxxx/client/api/spreadsheet/authredirect و http: // localhost .

لقد جربت جميع الردود على هذا السؤال وأكدت أن أيا منهم لم يكن مشكلتي.

أزلت المضيف المحلي من وحدة التحكم ، وحّددت برنامجي client_secret.json في مشروعي ، وانقطع خطأ عدم التطابق.


كان لي نفس المشكلة مع جوجل تسجيل الدخول ، كنت على وشك سحب شعري! لقد أدخلت بشكل صحيح عمليات الاسترجاعي في لوحة رسومات google في وحدة تحكم مطوري برامج google ، حيث كانت عناوين url الخاصة بإعادة التوجيه:

https://www.example.com/signin-google

https://www.example.com/signin-google/

https://www.example.com/oauth2callback

https://www.example.com/oauth2callback/

كل شيء يبدو بخير أليس كذلك؟ ولكنه لم ينجح حتى أضافت عنوان URL أكثر سحريًا وأضف رابط موقع goo-google (وهو الاسم الافتراضي لاستدعاء Google) بدون www وتم حل المشكلة.

أخذه بعين الاعتبار (حسب نطاقك) قد تحتاج أو لا تحتاج إلى إضافة كليهما مع عناوين url www أو بدونها


ما يتعين عليك فعله هو الرجوع إلى وحدة تحكم مطوري البرامج والانتقال إلى APIs & Auth> Consent Screen وملء ذلك. على وجه التحديد ، اسم المنتج.


مستخدمو Rails (من omniauth-google-oauth2 docs):

إصلاح عدم تطابق البروتوكول لـ redirect_uri في Rails

قم بتعيين full_host في OmniAuth استنادًا إلى Rails.env.

# config / initializers / omniauth.rb

OmniAuth.config.full_host = Rails.env.production؟ ؟ " https://domain.com ": " http: // localhost: 3000 "

تذكر: لا تشمل زائدة "/"


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

انتقل إلى وحدة التحكم لمشروعك وابحث ضمن API Access. يجب أن ترى معرف العميل الخاص بك وسر هناك ، جنبا إلى جنب مع قائمة عناوين URI المعاد توجيهها. إذا لم يكن URI الذي تريده مدرجًا ، فانقر فوق تحرير الإعدادات وأضف URI إلى القائمة.


تحديث -> العمل على تطبيقات Android

مجرد استخدام:

http://localhost/oauth2callback

إذا كنت تتعامل مع المنطق الخاص بك دون رابط لإعادة توجيه لتطبيقات الويب





oauth-2.0