অবৈধ_গ্রন্থ গুগল থেকে ওউথ টোকেন পাওয়ার চেষ্টা করছে


120

আমি invalid_grantতাদের পরিচিতি এপিআইতে কানেক্ট করার জন্য গুগল থেকে একটি ওআউথ টোকেন পাওয়ার চেষ্টা করে ত্রুটি পেতে থাকি । সমস্ত তথ্য সঠিক এবং আমি ট্রিপল এ ধরণের স্ট্যাম্পড পরীক্ষা করেছি।

কেউ কি জানেন যে এই সমস্যার কারণ হতে পারে? আমি এর জন্য একটি পৃথক ক্লায়েন্ট আইডি স্থাপন করার চেষ্টা করেছি তবে আমি একই ফলাফল পেয়েছি, আমি বলের প্রমাণীকরণের চেষ্টা সহ অনেকগুলি বিভিন্ন উপায়ে সংযোগ করার চেষ্টা করেছি, তবে এখনও একই ফলাফল।


আমার জন্য সমস্যাটি গুগল শংসাপত্রের পৃষ্ঠায় ছিল ... আমি অন্য একটি তৈরি করেছি ... এবং সমস্যাটি সমাধান করেছি ....
কস্টাম্যাট্রিক্স

উত্তর:


59

ওআউথকে ব্যবহারকারী পাঠানোর সময় আমি স্পষ্টভাবে "অফলাইন" অ্যাক্সেসের অনুরোধ না করায় আমি এই সমস্যায় পড়েছি "আপনি কি আপনার স্টাফ স্পর্শ করার জন্য এই অ্যাপ্লিকেশনটিকে অনুমতি দিতে চান?" পাতা।

আপনার অনুরোধে আপনি অ্যাক্সেস_ টাইপ = অফলাইনে উল্লেখ করেছেন তা নিশ্চিত করুন।

বিশদগুলি এখানে: https://developers.google.com/accounts/docs/OAuth2WebServer#offline

(এছাড়াও: আমি মনে করি গুগল ২০১১ এর শেষের দিকে এই বিধিনিষেধটি যুক্ত করেছে you যদি এর আগে থেকে আপনার পুরানো টোকেন থাকে, আপনার অফলাইন ব্যবহার অনুমোদনের জন্য আপনার ব্যবহারকারীদের অনুমতি পৃষ্ঠায় প্রেরণ করতে হবে))


9
@ অ্যাড্রেসস আমি সম্মত আমি সেট access_typeকরতে offline, এই ত্রুটির এখনও ঘটবে।
স্লাইডশোপ 2

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত নয়।
কিশান সোলঙ্কি


70

access_typeবঙ্কিডগের উত্তর অনুসারে আমার অনুরোধে "অফলাইন" নির্দিষ্ট করেও আমি এই একই সমস্যায় পড়েছি। দীর্ঘ গল্প সংক্ষিপ্ত আমি দেখতে পেলাম যে এখানে বর্ণিত সমাধানটি আমার পক্ষে কাজ করেছে:

https://groups.google.com/forum/#!topic/google-analytics-data-export-api/4uNaJtquxCs

সংক্ষেপে, আপনি যখন আপনার গুগল এপিআইয়ের কনসোলে একটি OAuth2 ক্লায়েন্ট যুক্ত করবেন তখন গুগল আপনাকে একটি "ক্লায়েন্ট আইডি" এবং একটি "ইমেল ঠিকানা" দেবে (ধরে নিলে আপনি আপনার ক্লায়েন্টের ধরণ হিসাবে "ওয়েব অ্যাপ" নির্বাচন করবেন)। এবং গুগলের বিভ্রান্তিকর নামকরণের কনভেনশন সত্ত্বেও, তারা client_idযখন আপনার ওআউথ 2 এপিআইতে অ্যাক্সেস করবেন তখন প্যারামিটারের মান হিসাবে আপনি "ইমেল ঠিকানা" প্রেরণ করবেন বলে তারা আশা করে।

এই দুটি URL- এর উভয়কে কল করার সময় এটি প্রযোজ্য:

মনে রাখবেন যে প্রথম ইউআরএলে কলটি সফল হবে যদি আপনি নিজের "ইমেল ঠিকানা" এর পরিবর্তে আপনার "ক্লায়েন্ট আইডি" দিয়ে কল করেন। তবে দ্বিতীয় ইউআরএল থেকে ধারক টোকেন নেওয়ার চেষ্টা করার পরে সেই অনুরোধটি থেকে ফিরে আসা কোডটি ব্যবহার করা কার্যকর হবে না। পরিবর্তে আপনি একটি 'ত্রুটি 400' এবং একটি "অবৈধ_গ্রন্থ" বার্তা পাবেন।


66
একেবারে হাস্যকর: বিশেষত অংশ যেখানে এটি ক্লায়েন্ট_আইডের সাথে কাজ করে যদি আপনি প্রাথমিক রিফ্রেশ টোকেন পান। গুগলস এপিআই এবং তাদের ডকুমেন্টেশন একটি জগাখিচুড়ি।
ট্রুবেনফুচস

7
আমি এই সমস্যাটির বিরুদ্ধে এত ঘন্টার জন্য মাথা বেঁধেছিলাম। আমি কখনই আশা করিনি যে 'ক্লায়েন্ট_আইডি' 'ক্লায়েন্ট_আইডি' ফিল্ডের জন্য প্রত্যাশিত ছিল না। আপনি রিফ্রেশ_ টোকেন পাবেন এমন অনিয়মিত সময় ব্যতীত এটি কার্যকর হয়। খুব নিশ্চিত যে এই মুহূর্তে আমার কাছে গুগলের জন্য যে শব্দগুলি রয়েছে তা এসও তে বলা যায় না।
জাস্টিন

6
হাই, আপনি যে "ইমেল" ঠিকানাটি বলছেন তার সন্ধান করতে আমি অক্ষম। আমার কনসোলে এটিই রয়েছে
omarojo

4
সেই ইমেল ঠিকানাটি কোথায়? আমার একই সমস্যা হচ্ছে
ইসমা হারো

4
গুগল ডকুমেন্টেশন কখনও বিশ্বাস করবেন না। ক্র্যাপিস্ট ডকুমেন্টেশন এবং এপিআইগুলি বিশ্বের সবচেয়ে মূল্যবান সংস্থা গুগল থেকে আসে। গুগল এপিআই ব্যবহার করতে আমাকে অসংখ্য ঘন্টা ব্যয় করতে হয়েছিল। ইস্যুগুলির পরে এবং তার পরে তাদের নিজস্ব সমস্যা ছিল different বিভিন্ন নির্ভরশীলতার সমস্যা এবং সমস্তগুলির কারণে বিভিন্ন এপিআইয়ের নেট লাইব্রেরিগুলি একসাথে সংকলন করছে না। কোডটি এখন বেশিরভাগ ব্যবহারকারীর পক্ষে ভাল কাজ করে তবে কিছু ব্যবহারকারীর জন্য আমি এখনও কোনও বিশেষ কারণে অবৈধ_গ্রান্ট, অবৈধ_ক্রেডিটেন্টালস ইত্যাদি পাই।
অ্যালেন কিং

56

যদিও এটি একটি পুরানো প্রশ্ন, মনে হচ্ছে অনেকের এখনও এটির মুখোমুখি - আমরা নিজেরাই এটিকে ট্র্যাক করার জন্য দিন কাটিয়েছি।

OAuth2 বৈশিষ্ট্যে, অবৈধ / মেয়াদোত্তীর্ণ / প্রত্যাহারিত টোকেন সম্পর্কিত সমস্ত ত্রুটির জন্য "অকার্যকর_গ্রান্ট" ক্যাচ-অল বাছাই (টুথ অনুদান বা রিফ্রেশ টোকেন)।

আমাদের জন্য সমস্যাটি দ্বিগুণ ছিল:

  1. ব্যবহারকারী সক্রিয়ভাবে আমাদের অ্যাপ্লিকেশনটিতে অ্যাক্সেস সরিয়ে নিয়েছে
    ইন্দ্রিয়গ্রাহ্য করে তবে এটি পান: প্রত্যাখ্যানের 12 ঘন্টা পরে, গুগল তাদের প্রতিক্রিয়াতে ত্রুটি বার্তা প্রেরণ বন্ধ করে দিয়েছে: “error_description” : “Token has been revoked.”
    এটি বরং বিভ্রান্তিকর কারণ আপনি ধরে নেবেন যে ত্রুটি বার্তাটি সবসময় আছে যা না কেস। আপনার অ্যাপ্লিকেশনটির এখনও অ্যাপ্লিকেশন অনুমতি পৃষ্ঠাতে অ্যাক্সেস রয়েছে কিনা তা আপনি পরীক্ষা করতে পারেন ।

  2. ব্যবহারকারী তাদের গুগল পাসওয়ার্ড পুনরায় সেট / পুনরুদ্ধার করেছেন
    ডিসেম্বর ২০১৫ এ, গুগল তাদের ডিফল্ট আচরণ পরিবর্তন করেছে যাতে গুগল নন-অ্যাপ্লিকেশন ব্যবহারকারীদের জন্য পাসওয়ার্ড পুনরায় সেট করে ব্যবহারকারীদের সমস্ত অ্যাপ্লিকেশন রিফ্রেশ টোকেনকে স্বয়ংক্রিয়ভাবে প্রত্যাহার করে। প্রত্যাখ্যানের সময়, ত্রুটি বার্তাটি আগের মতো একই নিয়ম অনুসরণ করে, সুতরাং আপনি প্রথম 12 ঘন্টার মধ্যে কেবল "ত্রুটি_দর্শন" পাবেন। ব্যবহারকারী নিজে অ্যাক্সেস বাতিল করেছেন কিনা তা জানার কোনও উপায় বলে মনে হচ্ছে না (উদ্দেশ্যমূলক) বা এটি পাসওয়ার্ড পুনরায় সেট করার কারণে হয়েছে (পার্শ্ব-প্রতিক্রিয়া)।

এগুলি ব্যতীত অন্যান্য সম্ভাব্য কারণগুলির একটি অগণিত ঘটনা রয়েছে যা ত্রুটিটিকে ট্রিগার করতে পারে:

  1. সার্ভার ঘড়ি / সময় সিঙ্কের বাইরে
  2. অফলাইন অ্যাক্সেসের জন্য অনুমোদিত নয়
  3. গুগল থ্রোটলড
  4. মেয়াদোত্তীর্ণ রিফ্রেশ টোকেন ব্যবহার করে
  5. ব্যবহারকারী 6 মাস ধরে নিষ্ক্রিয় রয়েছে
  6. ক্লায়েন্ট আইডির পরিবর্তে পরিষেবা কর্মী ইমেল ব্যবহার করুন
  7. স্বল্প সময়ে অনেক বেশি অ্যাক্সেস টোকেন
  8. ক্লায়েন্ট এসডিকে পুরানো হতে পারে
  9. ভুল / অসম্পূর্ণ রিফ্রেশ টোকেন

আমি অপরাধীর সন্ধানে সহায়তার জন্য কিছু ডিবাগিং গাইডেন্সনের সাথে প্রতিটি আইটেমের সংক্ষিপ্তসার নিয়ে একটি ছোট্ট নিবন্ধ লিখেছি । আশা করি এটা সাহায্য করবে.


1
আপনি যদি টোকেনগুলি একাধিকবার একই লেখার কোডটি গঠন করার চেষ্টা করেন তবে অন্য একটি দৃশ্য।
জ্ঞানসিল্যা

এটাই আমার সমস্যা ছিল, দুর্ঘটনাক্রমে কেবল অ্যাপটি বাতিল করা। তারপরে এই ক্লায়েন্টআইডি-র জন্য অন্য কোনও অনুমোদন কোড উত্পন্ন করার জন্য টার্মিনালের মাধ্যমে রিফ্রেশ টোকেন.এফপি পুনরায় চালু করতে হবে এবং তারপরে এই ক্লায়েন্টআইডিটির জন্য সর্বত্র রিফ্রেশ টোকেনকে প্রতিস্থাপন করতে হবে।
রবার্ট সিনক্লেয়ার

7

আমিও একই সমস্যার মুখোমুখি হয়েছি। আমার জন্য, আমি ক্লায়েন্ট_আইডি প্যারামিটার মানের জন্য ক্লায়েন্ট আইডির পরিবর্তে ইমেল ঠিকানা (@ ডেভেলপার.gserviceaccount.com দিয়ে শেষ হওয়া স্ট্রিং) ব্যবহার করে এটি ঠিক করেছি। গুগলের সেট করা নামকরণ এখানে বিভ্রান্ত করছে।


6
এটি একই উত্তর @ ইরোথের এক বছরেরও বেশি আগে দেওয়া হয়েছিল
ব্রায়ান অ্যাশ

3

আমার সমস্যাটি হ'ল আমি এই ইউআরএলটি ব্যবহার করেছি:

https://accounts.google.com/o/oauth2/token

যখন আমার এই ইউআরএলটি ব্যবহার করা উচিত ছিল:

https://www.googleapis.com/oauth2/v4/token

এটি এমন একটি পরিষেবা অ্যাকাউন্ট পরীক্ষা করছিল যা স্টোরেজ ইঞ্জিনে অফলাইনে অ্যাক্সেস চেয়েছিল ।


2

আমার একই ত্রুটি বার্তা ছিল 'অবৈধ_গ্রান্ট ' এবং এটি কারণ ক্লায়েন্ট সাইড জাভাস্ক্রিপ্ট থেকে প্রেরণ করা লেখক রেজাল্ট ['কোড'] সার্ভারে সঠিকভাবে প্রাপ্ত হয়নি।

সার্ভার থেকে এটিকে আউটপুট দেওয়ার চেষ্টা করুন এটি সঠিক এবং খালি স্ট্রিং নয় কিনা তা দেখার জন্য।


1

আপনি যদি স্ক্রিবি লাইব্রেরি ব্যবহার করে থাকেন তবে স্রেফ অফলাইন মোড সেট আপ করুন, যেমন বোনকিডগ এখানে প্রস্তাবিত কোড:

OAuthService service = new ServiceBuilder().provider(Google2Api.class).apiKey(clientId).apiSecret(apiSecret)
                .callback(callbackUrl).scope(SCOPE).offline(true)
                .build();

https://github.com/codolutions/scribe-java/


1

অ্যান্ড্রয়েড ক্লায়েন্টআইডি ব্যবহার করে (কোনও ক্লায়েন্ট_সেক্রেট নেই) আমি নিম্নলিখিত ত্রুটিটির প্রতিক্রিয়া পাচ্ছি:

{
 "error": "invalid_grant",
 "error_description": "Missing code verifier."
}

ক্ষেত্রের 'code_verifier' এর জন্য আমি কোনও ডকুমেন্টেশন পাচ্ছি না তবে আমি আবিষ্কার করেছি যে আপনি যদি অনুমোদন এবং টোকেন অনুরোধ উভয় ক্ষেত্রে সমান মানগুলিতে সেট করেন তবে এটি এই ত্রুটিটি সরিয়ে ফেলবে। আমি নিশ্চিত নই যে উদ্দিষ্ট মানটি কী হবে বা এটি নিরাপদ হওয়া উচিত। এর কিছুটা ন্যূনতম দৈর্ঘ্য (16? অক্ষর) রয়েছে তবে আমি nullসেটিও কাজ করে দেখেছি ।

আমি আমার অ্যান্ড্রয়েড ক্লায়েন্টে অনুমোদনের অনুরোধের জন্য AppAuth ব্যবহার করছি যার একটি setCodeVerifier()ফাংশন রয়েছে।

AuthorizationRequest authRequest = new AuthorizationRequest.Builder(
                                    serviceConfiguration,
                                    provider.getClientId(),
                                    ResponseTypeValues.CODE,
                                    provider.getRedirectUri()
                            )
                            .setScope(provider.getScope())
                            .setCodeVerifier(null)
                            .build();

নোডে এখানে টোকেন অনুরোধের একটি উদাহরণ রয়েছে:

request.post(
  'https://www.googleapis.com/oauth2/v4/token',
  { form: {
    'code': '4/xxxxxxxxxxxxxxxxxxxx',
    'code_verifier': null,
    'client_id': 'xxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com',
    'client_secret': null,
    'redirect_uri': 'com.domain.app:/oauth2redirect',
    'grant_type': 'authorization_code'
  } },
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log('Success!');
    } else {
      console.log(response.statusCode + ' ' + error);
    }

    console.log(body);
  }
);

আমি পরীক্ষিত এবং এই উভয় সঙ্গে কাজ করে https://www.googleapis.com/oauth2/v4/tokenএবং https://accounts.google.com/o/oauth2/token

আপনি যদি এর GoogleAuthorizationCodeTokenRequestপরিবর্তে ব্যবহার করছেন :

final GoogleAuthorizationCodeTokenRequest req = new GoogleAuthorizationCodeTokenRequest(
                    TRANSPORT,
                    JSON_FACTORY,
                    getClientId(),
                    getClientSecret(),
                    code,
                    redirectUrl
);
req.set("code_verifier", null);          
GoogleTokenResponse response = req.execute();

1

এটি একটি নির্বোধ উত্তর, তবে আমার সমস্যাটি হ'ল আমি বুঝতে সক্ষম হয়েছি যে আমি ইতিমধ্যে আমার গুগল ব্যবহারকারীর জন্য একটি সক্রিয় ওআউথ টোকেন জারি করেছিলাম যা আমি সংরক্ষণ করতে ব্যর্থ হয়েছি। এই ক্ষেত্রে সমাধানটি হ'ল এপিআই কনসোলে গিয়ে ক্লায়েন্টের গোপনীয়তা পুনরায় সেট করা।

এই প্রভাবটির জন্য এসও তে আরও অনেক উত্তর রয়েছে উদাহরণস্বরূপ ক্লায়েন্ট সিক্রেট OAuth2 রিসেট করুন - ক্লায়েন্টদের কি পুনরায় মঞ্জুরি দেওয়ার দরকার পড়ে?


1

আপনাকে বাসি / অবৈধ OAuth প্রতিক্রিয়া সরিয়ে ফেলতে হতে পারে।

ক্রেডিট: node.js গুগল oauth2 নমুনা অবৈধ_গ্রন্থ কাজ বন্ধ করে দিয়েছে

দ্রষ্টব্য : প্রাথমিক অনুমোদনে ব্যবহৃত পাসওয়ার্ড যদি পরিবর্তন করা হয় তবে একটি OAuth প্রতিক্রিয়াও অবৈধ হয়ে যাবে।

যদি কোনও বাশ পরিবেশে, আপনি বাসি প্রতিক্রিয়া সরাতে নিম্নলিখিতটি ব্যবহার করতে পারেন:

rm /Users/<username>/.credentials/<authorization.json>


1

অবৈধ_গ্রান্ট ত্রুটির জন্য দুটি বড় কারণ রয়েছে যা আপনাকে রিফ্রেশ টোকেন এবং অ্যাক্সেস টোকনের জন্য পোষ্ট অনুরোধের আগে যত্ন নিতে হবে।

  1. অনুরোধ শিরোনামে অবশ্যই "সামগ্রী-ধরণের: অ্যাপ্লিকেশন / x-www-form-urlencoded" থাকতে হবে
  2. আপনার অনুরোধ পেডলোডটি url এনকোডড ফর্ম ডেটা হওয়া উচিত, জেসন অবজেক্ট হিসাবে প্রেরণ করবেন না।

জন্য RFC 6749 OAuth এর 2.0 সংজ্ঞায়িত invalid_grant হিসাবে: উপলব্ধ অনুমোদন অনুদান (যেমন, অনুমোদন কোড, রিসোর্স মালিক পরিচয়পত্র) অথবা রিফ্রেশ টোকেন অবৈধ, মেয়াদ শেষ হয়েছে, প্রত্যাহার, ফেরৎ কোনো URI অনুমোদন অনুরোধে ব্যবহৃত, অথবা অন্য ক্লায়েন্ট জারি করা হয় সাথে মেলে না ।

আমি আরও একটি ভাল নিবন্ধ পেয়েছি, এখানে আপনি এই ত্রুটির আরও অনেক কারণ খুঁজে পাবেন।

https://blog.timekit.io/google-oauth-invalid-grant-nightmare-and-how-to-fix-it-9f4efaf1da35


আপনি প্রায় দুটি অভিন্ন উত্তর পোস্ট করার অর্থাত? আপনি হয়ত এটিকে মুছতে চাইবেন কারণ অন্যটির কাছে অতিরিক্ত লাইন রয়েছে।
ব্লাস্টফর্নেস

0

এই সাইটে কনসোল.ডিভেলপারস.কম

এই কনসোল বোর্ড আপনার প্রকল্পের ইনপুট শপথ url নির্বাচন করুন। ওউথ কলব্যাক ইউআরএল পুনঃনির্দেশিত হবে যখন ওউথ সাফল্য


0

এখানে অন্যান্য সমস্ত উপায় বিবেচনা এবং চেষ্টা করার পরে, আমি এখানে googleapisমডিউলটির সাথে মিল রেখে requestমডিউলটির সাথে নোডেজগুলিতে কীভাবে সমস্যাটি সমাধান করেছি , যা আমি প্রদত্ত getToken()পদ্ধতির পরিবর্তে টোকেন আনতে ব্যবহার করেছি :

const request = require('request');

//SETUP GOOGLE AUTH
var google = require('googleapis');
const oAuthConfigs = rootRequire('config/oAuthConfig')
const googleOAuthConfigs = oAuthConfigs.google

//for google OAuth: https://github.com/google/google-api-nodejs-client
var OAuth2 = google.auth.OAuth2;
var googleOAuth2Client = new OAuth2(
    process.env.GOOGLE_OAUTH_CLIENT_ID || googleOAuthConfigs.clientId, 
    process.env.GOOGLE_OAUTH_CLIENT_SECRET || googleOAuthConfigs.clientSecret, 
    process.env.GOOGLE_OAUTH_CLIENT_REDIRECT_URL || googleOAuthConfigs.callbackUrl);

/* generate a url that asks permissions for Google+ and Google Calendar scopes
https://developers.google.com/identity/protocols/googlescopes#monitoringv3*/
var googleOAuth2ClientScopes = [
    'https://www.googleapis.com/auth/plus.me',
    'https://www.googleapis.com/auth/userinfo.email'
];

var googleOAuth2ClientRedirectURL = process.env.GOOGLE_OAUTH_CLIENT_REDIRECT_URL || googleOAuthConfigs.callbackUrl; 

var googleOAuth2ClientAuthUrl = googleOAuth2Client.generateAuthUrl({
  access_type: 'offline', // 'online' (default) or 'offline' (gets refresh_token)
  scope: googleOAuth2ClientScopes // If you only need one scope you can pass it as string
});

//AFTER SETUP, THE FOLLOWING IS FOR OBTAINING TOKENS FROM THE AUTHCODE


        const ci = process.env.GOOGLE_OAUTH_CLIENT_ID || googleOAuthConfigs.clientId
        const cs = process.env.GOOGLE_OAUTH_CLIENT_SECRET || googleOAuthConfigs.clientSecret
        const ru = process.env.GOOGLE_OAUTH_CLIENT_REDIRECT_URL || googleOAuthConfigs.callbackUrl
        var oauth2Client = new OAuth2(ci, cs, ru);

        var hostUrl = "https://www.googleapis.com";
        hostUrl += '/oauth2/v4/token?code=' + authCode + '&client_id=' + ci + '&client_secret=' + cs + '&redirect_uri=' + ru + '&grant_type=authorization_code',
        request.post({url: hostUrl}, function optionalCallback(err, httpResponse, data) {
            // Now tokens contains an access_token and an optional refresh_token. Save them.
            if(!err) {
                //SUCCESS! We got the tokens
                const tokens = JSON.parse(data)
                oauth2Client.setCredentials(tokens);

                //AUTHENTICATED PROCEED AS DESIRED.
                googlePlus.people.get({ userId: 'me', auth: oauth2Client }, function(err, response) {
                // handle err and response
                    if(!err) {
                        res.status(200).json(response);
                    } else {
                        console.error("/google/exchange 1", err.message);
                        handleError(res, err.message, "Failed to retrieve google person");
                    }
                });
            } else {
                console.log("/google/exchange 2", err.message);
                handleError(res, err.message, "Failed to get access tokens", err.code);
            }
        });

আমি কেবল requestএখানে বর্ণিত হিসাবে HTTP- র মাধ্যমে এপিআই অনুরোধটি করতে ব্যবহার করি : https://developers.google.com/identity/protocols/OAuth2WebServer#offline

POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=8819981768.apps.googleusercontent.com&
client_secret={client_secret}&
redirect_uri=https://oauth2.example.com/code&
grant_type=authorization_code


0

ভবিষ্যতের লোকদের জন্য ... আমি অনেক নিবন্ধ এবং ব্লগ পড়েছি তবে নীচের সমাধানের সাথে ভাগ্য ভাগ্যবান ...

GoogleTokenResponse tokenResponse =
      new GoogleAuthorizationCodeTokenRequest(
          new NetHttpTransport(),
          JacksonFactory.getDefaultInstance(),
          "https://www.googleapis.com/oauth2/v4/token",
          clientId,
          clientSecret,
          authCode,
          "") //Redirect Url
     .setScopes(scopes)
     .setGrantType("authorization_code")
     .execute();

এই ব্লগটি বিভিন্ন ক্ষেত্রে চিত্রায়িত করে যেখানে "অবৈধ_গ্রন্থ" ত্রুটি আসে।

উপভোগ করুন !!!


0

আমার জন্য আমি যে নিশ্চিত করতে ছিল redirect_uriবিকাশকারী কনসোলের এক একটি সঠিক মিল IS Authorised redirect URIs, আমি ডিবাগ করতে সক্ষম হন যে, এটা আমার জন্য নির্ধারিত এবং চেনা ব্যক্তিদের স্যুইচ করার পরে ঠিক ইস্যু কি ছিল https://accounts.google.com/o/oauth2/tokenথেকেhttps://www.googleapis.com/oauth2/v4/token

আমি একটি সঠিক ত্রুটি পেয়েছি:

{"error": "redirect_uri_mismatch",  "error_description": "Bad Request"}

0

গুগল কনসোলটিতে একটি নতুন পরিষেবা এপিআই সক্ষম করার পরে এবং পূর্বে তৈরি শংসাপত্রগুলি ব্যবহার করার চেষ্টা করার পরে আমার এই সমস্যা হয়েছিল।

সমস্যা সমাধানের জন্য, আমাকে শংসাপত্রের পৃষ্ঠাতে ফিরে যেতে হয়েছিল, শংসাপত্রের নামটি ক্লিক করে এবং আবার "সংরক্ষণ করুন" এ ক্লিক করতে হয়েছিল । এর পরে, আমি ঠিক জরিমানা করতে পারি


0

আমার ক্ষেত্রে, সমস্যাটি আমার কোডে ছিল। ভুল করে আমি একই টোকেন দিয়ে ক্লায়েন্টটি 2 বার শুরু করার চেষ্টা করেছি। যদি উপরের উত্তরগুলির মধ্যে কোনওটি নিশ্চিত না করে যে আপনি ক্লায়েন্টের 2 টি উদাহরণ তৈরি করেন না।

ঠিক করার আগে আমার কোড:

def gc_service
      oauth_client = Signet::OAuth2::Client.new(client_options)
      oauth_client.code = params[:code]
      response = oauth_client.fetch_access_token!
      session[:authorization] = response
      oauth_client.update!(session[:authorization])

      gc_service = Google::Apis::CalendarV3::CalendarService.new
      gc_service.authorization = oauth_client

      gc_service
    end
primary_calendar_id = gc_service.list_calendar_lists.items.select(&:primary).first.id

gc_service.insert_acl(primary_calendar_id, acl_rule_object, send_notifications: false)

যত তাড়াতাড়ি আমি এটিকে পরিবর্তন করব (কেবলমাত্র একটি উদাহরণ ব্যবহার করুন):

@gc_service = gc_service
primary_calendar_id = @gc_service.list_calendar_lists.items.select(&:primary).first.id

@gc_service.insert_acl(primary_calendar_id, acl_rule_object, send_notifications: false)

এটি অনুদানের ধরণের সাথে আমার সমস্যাগুলি স্থির করে।


0

আমার জন্য সমস্যাগুলি ছিল আমার প্রকল্পে আমার একাধিক ক্লায়েন্ট ছিল এবং আমি পুরোপুরি নিশ্চিত যে এটি পুরোপুরি ঠিক আছে, তবে আমি সেই প্রকল্পের সমস্ত ক্লায়েন্টকে মুছে ফেলেছি এবং একটি নতুন তৈরি করেছি এবং সমস্তই আমার জন্য কাজ শুরু করেছে (এই ধারণাটি পেয়েছি WP_SMTP প্লাগইন সহায়তা সমর্থন ফোরাম) আমি রেফারেন্সের জন্য সেই লিঙ্কটি সন্ধান করতে সক্ষম নই


0

আপনি যদি ব্যবহারকারী ইনপুটকে স্যানিটাইজ করছেন (উদাহরণস্বরূপ, $_GET["code"]পিএইচপি তে) নিশ্চিত হয়ে নিন যে আপনি দুর্ঘটনাক্রমে কোডটিতে কিছু প্রতিস্থাপন করছেন না।

আমি যে রেজেক্স ব্যবহার করছি তা এখন /[^A-Za-z0-9\/-]/


0

এই https://dev.to/risafj/beginner-s-guide-to-oauth- বোঝা-access-tokens-and-authorization-codes-2988 দেখুন

প্রথমে আপনার একটি অ্যাক্সেস_ টোকেন দরকার:

$code = $_GET['code'];

$clientid = "xxxxxxx.apps.googleusercontent.com";
$clientsecret = "xxxxxxxxxxxxxxxxxxxxx";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.googleapis.com/oauth2/v4/token");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "client_id=".urlencode($clientid)."&client_secret=".urlencode($clientsecret)."&code=".urlencode($code)."&grant_type=authorization_code&redirect_uri=". urlencode("https://yourdomain.com"));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);

$server_output = json_decode($server_output);
$access_token = $server_output->access_token;
$refresh_token = $server_output->refresh_token;
$expires_in = $server_output->expires_in;

অ্যাক্সেস টোকেন এবং রিফ্রেশ টোকেন এবং মেয়াদোত্তীর্ণ, একটি ডাটাবেসে নিরাপদ করুন। অ্যাক্সেস টোকেনটির মেয়াদ শেষ হবে $ মেয়াদ শেষ হওয়ার সেকেন্ড পরে। নিম্নলিখিত অনুরোধের সাথে আপনাকে একটি নতুন অ্যাক্সেস টোকেন গ্রহণ করতে হবে (এবং এটি ডেটাবেসে নিরাপদ করুন):

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.googleapis.com/oauth2/v4/token");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "client_id=".urlencode($clientid)."&client_secret=".urlencode($clientsecret)."&refresh_token=".urlencode($refresh_token)."&grant_type=refresh_token");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);

$server_output = json_decode($server_output);
$access_token = $server_output->access_token;
$expires_in = $server_output->expires_in;

আপনার গুগল কনসোলে আপনার ডোমেনগুলিতে redirect_uri ডোমেন যুক্ত করতে মনে রাখুন: "OAuth 2.0-ক্লায়েন্ট-আইডি" ট্যাবটিতে https://console.cloud.google.com/apis/credentials । সেখানে আপনি নিজের ক্লায়েন্ট-আইডি এবং ক্লায়েন্ট-সিক্রেটও খুঁজে পান।


0

আপনি যখন প্রথমে গুগল প্রমাণীকরণ পৃষ্ঠায় ব্যবহারকারীকে পুনর্নির্দেশ করেন (এবং কোনও কোড ফিরে পান) এবং আপনি যখন ফেরত কোডটি নিয়ে যান এবং টোকেন url এ পোস্ট করেন তখন এর মধ্যে একটি অনির্ধারিত সময়সীমা থাকে। এটি "অননুমোদিত ইমেল ঠিকানা" এর বিপরীতে প্রকৃত গুগল সরবরাহকারী ক্লায়েন্ট_আইডির সাথে আমার পক্ষে কাজ করে। আমার কেবল প্রক্রিয়াটি আবার শুরু করার দরকার ছিল।


0

যদি আপনি এটি পোস্টম্যান / অনিদ্রায় পরীক্ষা করে দেখেন এবং কেবল এটির কাজ করার চেষ্টা করছেন তবে ইঙ্গিত: সার্ভার অথ কোড (কোড প্যারামিটার) কেবল একবারই ভাল। অর্থ যদি আপনি অনুরোধে অন্য কোনও পরামিতিগুলি পূরণ করেন এবং একটি 400 ফিরে পান, আপনাকে একটি নতুন সার্ভার প্রমাণীকরণ কোড ব্যবহার করতে হবে বা আপনি আরও 400 পাবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.