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




oauth-2.0 (22)

في حالتي ، كان عنوان URL على www و non-www . كان الموقع الفعلي يحتوي على عنوان URL على www وعنوان URL المعاد توجيهه المعتمد في Google Developer Console به عنوان URL non-www . وبالتالي ، كان هناك عدم تطابق في إعادة توجيه URI. لقد قمت بحلها عن طريق تحديث Authorized Redirect URIs في Google Developer Console إلى URL على www .

عدم تطابق URI الشائعة الأخرى هي:

  • استخدام http:// في URIs Redirect Redirect و https:// كعنوان URL الفعلي أو العكس
  • استخدام شرطة مائلة ( http://example.com/ ) في عناوين URI المعيّنة لإعادة التوجيه وعدم استخدام شرطة مائلة ( http://example.com ) كعنوان URL الفعلي ، أو العكس

في ما يلي لقطات الشاشة خطوة بخطوة لوحدة تحكم مطوري برامج Google بحيث يكون من المفيد بالنسبة لأولئك الذين يصعب عليهم تحديد موقع صفحة وحدة تحكم المطوِّر لتحديث عناوين URI المعاد توجيهها.

  1. انتقل إلى https://console.developers.google.com

  2. حدد مشروعك

  1. انقر على أيقونة القائمة

  1. انقر على قائمة API Manager

  1. انقر على قائمة Credentials . وبموجب OAuth 2.0 Client IDs ، ستجد اسم العميل الخاص بك. في حالتي ، هو Web Client 1 . انقر عليه وستظهر نافذة منبثقة حيث يمكنك تعديل Javascript Origin المعتمد وعناوين URL المعاد توجيهها المعتمد .

في ما يلي مقالة Google حول إنشاء معرّف المشروع والعميل .

على موقع الويب 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 .


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

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

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


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


تأكد من التحقق من البروتوكول "http: //" أو "https: //" كبروتوكول فحص google أيضًا. من الأفضل إضافة كل من URL في القائمة.



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

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

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


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


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

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

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


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


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

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

مستخدمو 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 "

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


كان لي نفس المشكلة مع جوجل تسجيل الدخول ، كنت على وشك سحب شعري! لقد أدخلت بشكل صحيح عمليات الاسترجاعي في لوحة رسومات 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 أو بدونها


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

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


قائمة تدقيق:

  • http أو https ؟
  • & or & ؟
  • شرطة مائلة ( / ) أو مفتوحة ؟
  • (CMD/CTRL)+F ، ابحث عن المطابقة التامة في صفحة بيانات الاعتماد. إذا لم يتم العثور على ثم ابحث عن واحد مفقود.
  • انتظر حتى تحديثه جوجل. قد يحدث في كل نصف ساعة إذا كنت تتغير بشكل متكرر أو قد تبقى في حمام السباحة. لحالتي كان ما يقرب من نصف ساعة ليصبح ساري المفعول.

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


عند تسجيل تطبيقك على https://code.google.com/apis/console وتقديم معرف عميل ، ستحصل على فرصة لتحديد واحد أو أكثر من معرفات URI لإعادة التوجيه. يجب أن تتطابق قيمة المعلمة redirect_uri على عنوان URL الخاص بمصادقة واحدة مع واحدة بالضبط.


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

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



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

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


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

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

استمتع :)


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>

بديل OpenUDID Erik هو مكتبة طرف ثالث تسمى OpenUDID . يمكنك إنشاء معرّف فريد على أساس كل جهاز ، وهو أمر بسيط للغاية:

#include "OpenUDID.h"
NSString* openUDID = [OpenUDID value];






authentication oauth-2.0