আমি কীভাবে কোনও Google প্রমাণীকরণ এপিআই অ্যাক্সেস টোকন যাচাই করতে পারি?


134

আমি কীভাবে কোনও Google প্রমাণীকরণ অ্যাক্সেস টোকেন যাচাই করতে পারি?

আমাকে কোনওভাবে গুগলকে জিজ্ঞাসা করতে হবে এবং জিজ্ঞাসা করতে হবে: [উদাহরণস্বরূপ: উদাহরণস্বরূপ.কম] গুগল অ্যাকাউন্টের জন্য কি [অ্যাক্সেস টোকেন দেওয়া আছে]?

সংক্ষিপ্ত সংস্করণ :
এটি স্পষ্ট যে কীভাবে গুগল অথেনটিকেশন এপিআইয়ের মাধ্যমে সরবরাহ করা অ্যাক্সেস টোকেন: ওয়েব অ্যাপ্লিকেশনগুলির জন্য ওআউথ প্রমাণীকরণ তারপরে গুগল পরিষেবাগুলির একটি ব্যাপ্তির ডেটা অনুরোধ করতে ব্যবহার করা যেতে পারে। প্রদত্ত অ্যাক্সেস টোকেন কোনও প্রদত্ত গুগল অ্যাকাউন্টের জন্য বৈধ কিনা তা কীভাবে পরীক্ষা করবেন তা স্পষ্ট নয়। আমি জানতে চাই।

দীর্ঘ সংস্করণ :
আমি এমন একটি API বিকাশ করছি যা টোকেন-ভিত্তিক প্রমাণীকরণ ব্যবহার করে। কোনও বৈধ ব্যবহারকারীর নাম + পাসওয়ার্ড দেওয়ার বা এন- যাচাইযোগ্য পরিষেবার যে কোনও একটি থেকে তৃতীয় পক্ষের টোকেন দেওয়ার বিধানের ভিত্তিতে একটি টোকেন ফিরিয়ে দেওয়া হবে ।

তৃতীয় পক্ষের পরিষেবাগুলির মধ্যে একটি হ'ল গুগল, কোনও ব্যবহারকারীকে তাদের গুগল অ্যাকাউন্ট ব্যবহার করে আমার পরিষেবার বিরুদ্ধে প্রমাণীকরণের অনুমতি দেবে। এটি পরে ইয়াহু অ্যাকাউন্টগুলি, বিশ্বস্ত ওপেনআইডিআইডি সরবরাহকারী এবং আরও অন্তর্ভুক্ত করার জন্য বাড়ানো হবে।

গুগল-ভিত্তিক অ্যাক্সেসের পরিকল্পনামূলক উদাহরণ:

Alt পাঠ্য http://webignition.net/images/figures/auth_figure002.png

'এপিআই' সত্তা আমার সম্পূর্ণ নিয়ন্ত্রণে রয়েছে। 'পাবলিক ইন্টারফেস' সত্তা কোনও ওয়েব- বা ডেস্কটপ-ভিত্তিক অ্যাপ্লিকেশন। কিছু সার্বজনীন ইন্টারফেস আমার নিয়ন্ত্রণে থাকে, অন্যরা হবে না এবং অন্যরা এখনও আমি কখনও জানতে পারি না।

অতএব আমি পদক্ষেপ 3 এ এপিআইতে সরবরাহিত টোকেনকে বিশ্বাস করতে পারি না এটি সম্পর্কিত গুগল অ্যাকাউন্ট ইমেল ঠিকানার সাথে সরবরাহ করা হবে।

আমাকে কোনওভাবে গুগলকে জিজ্ঞাসা করতে হবে এবং জিজ্ঞাসা করতে হবে: এই অ্যাক্সেস টোকেনটি কী উদাহরণস্বরূপ@example.com ?

এই ক্ষেত্রে, উদাহরণ@example.com হ'ল গুগল অ্যাকাউন্ট অনন্য শনাক্তকারী - যে ইমেল ঠিকানাটি কেউ তাদের গুগল অ্যাকাউন্টে লগ ইন করতে ব্যবহার করে। এটি জিমেইল ঠিকানা হিসাবে ধরে নেওয়া যায় না - কারও একটি জিমেইল অ্যাকাউন্ট না থাকলে একটি Google অ্যাকাউন্ট থাকতে পারে।

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

আপডেট টোকেনটি এন গুগল পরিষেবাগুলির জন্য বৈধ। আমি কোনও গুগল পরিষেবাটিকে যাচাই করার উপায় হিসাবে একটি টোকেন চেষ্টা করতে পারি না কারণ প্রদত্ত ব্যবহারকারী প্রকৃতপক্ষে কোনও Google এর পরিষেবাগুলির কোন উপসেট ব্যবহার করে তা আমি জানি না।

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


(OAuth, AuthSub, ইনস্টলড অ্যাপস, ...) সম্পর্কিত কোন নির্দিষ্ট লেখক পরিষেবাটি? আরও বিস্তারিত লিঙ্ক সরবরাহ করুন।
মার্টিন বনাম লুইস

@ মার্টিন বনাম লুইস: 'ওয়েব অ্যাপ্লিকেশনগুলির জন্য ওআউথ প্রমাণীকরণ' পরিষেবা - এটি প্রতিফলিত করতে আমি প্রশ্নের শুরুটি আপডেট করেছি। এই বিষয়টি চিহ্নিত করার জন্য ধন্যবাদ!
জন ক্র্যাম

গুগল কী যাচাইকরণ সম্পর্কে আকর্ষণীয় নিবন্ধটি আরও অন্তর্দৃষ্টি দলগুলি
dotjoe

উত্তর:


138

ব্যবহারকারী পরীক্ষার জন্য, কেবল অ্যাক্সেস টোকেন হিসাবে অ্যাক্সেস টোকেনটি পোস্ট করুন এবং এটি পোস্ট করুন এবং প্রতিক্রিয়াটি পান

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=accessToken

আপনি ব্রাউজারগুলিতেও অ্যাড্রেস বারে চেষ্টা করতে পারেন, জাভাতেও https এবং প্রতিক্রিয়া ব্যবহার করতে পারেন

প্রতিক্রিয়া মত হবে

{
     "issued_to": "xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
     "audience": "xxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
     "user_id": "xxxxxxxxxxxxxxxxxxxxxxx",
     "scope": "https://www.googleapis.com/auth/userinfo.profile https://gdata.youtube.com",
     "expires_in": 3340,
     "access_type": "offline"
    }

সুযোগটি অ্যাক্সেস টোকেনের প্রদত্ত অনুমতি। আপনি এই লিঙ্কে সুযোগ আইডি চেক করতে পারেন

আপডেট: নীচের মতো নতুন এপিআই পোস্ট

https://oauth2.googleapis.com/tokeninfo?id_token=XYZ123

প্রতিক্রিয়া যেমন হবে

 {
 // These six fields are included in all Google ID Tokens.
 "iss": "https://accounts.google.com",
 "sub": "110169484474386276334",
 "azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "iat": "1433978353",
 "exp": "1433981953",

 // These seven fields are only included when the user has granted the "profile" and
 // "email" OAuth scopes to the application.
 "email": "testuser@gmail.com",
 "email_verified": "true",
 "name" : "Test User",
 "picture": "https://lh4.googleusercontent.com/-kYgzyAWpZzJ/ABCDEFGHI/AAAJKLMNOP/tIXL9Ir44LE/s99-c/photo.jpg",
 "given_name": "Test",
 "family_name": "User",
 "locale": "en"
}

আরও তথ্যের জন্য, https://developers.google.com/identity/sign-in/android/backend-auth


11
গুগলের oauth2 - v3 এর জন্য একটি নতুন সংস্করণ রয়েছে। এখানে উদাহরণ দেখুন: developers.google.com/identity/sign-in/android/backend-auth
অ্যালিকএলজিন-কিলাকা

30

আপনি এই শেষ পয়েন্টটি ব্যবহার করে একটি Google প্রমাণীকরণ অ্যাক্সেস টোকেন যাচাই করতে পারেন:

https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=<access_token>

এটি গুগল ভি 3 ওআউথ অ্যাকসেসটোকেন যাচাইকরণের শেষ পয়েন্ট, আপনি নীচের গুগল ডকুমেন্ট থেকে উল্লেখ করতে পারেন: ( OAUTH 2.0 ENDPOINTSট্যাবে)

https://developers.google.com/identity/protocols/OAuth2UserAgent#validate-access-token


ব্যাকএন্ড ডকুমেন্টেশনের জন্য - ডকুমেন্টেশনের উত্সটি এখানে রয়েছে
eton_ceb

26

ঠিক আছে, বেশিরভাগ উত্তর বৈধ তবে সঠিক নয়। জেডাব্লুটিটির ধারণা হ'ল আপনি প্রতিবার ইস্যুকারীর সাথে যোগাযোগ করার প্রয়োজন ছাড়াই টোকেনটিকে বৈধতা দিতে পারেন। আপনাকে অবশ্যই আইডি চেক করতে হবে এবং টোকেনটিতে স্বাক্ষর করতে ব্যবহৃত শংসাপত্রের গুগলের জ্ঞাত পাবলিক কী দিয়ে টোকেনের স্বাক্ষরটি যাচাই করতে হবে।

কেন এবং কীভাবে এটি করা যায় তা পরবর্তী পোস্টটি দেখুন।

http://ncona.com/2015/02/consuming-a-google-id-token-from-a-server/


3
আরও upvotes দয়া করে! The idea of JWT is that you can validate the token without the need to contact the issuer everytime.
মরিটজ স্মিটজ বনাম হালস্ট


আপনি গুগল অ্যাক্সেস টোকেন দিয়ে এটি করতে পারবেন না কারণ তারা জেডব্লিউটি নয়। পরীক্ষা করে দেখুন stackoverflow.com/questions/48623656/...
DanielJaramillo

18
function authenticate_google_OAuthtoken($user_id)
{
    $access_token   = google_get_user_token($user_id); // get existing token from DB
    $redirecturl    = $Google_Permissions->redirecturl;
    $client_id      = $Google_Permissions->client_id;
    $client_secret  = $Google_Permissions->client_secret;
    $redirect_uri   = $Google_Permissions->redirect_uri;
    $max_results    = $Google_Permissions->max_results;

    $url = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token='.$access_token;
    $response_contacts  =  curl_get_responce_contents($url);
    $response   =   (json_decode($response_contacts));

    if(isset($response->issued_to))
    {
        return true;
    }
    else if(isset($response->error))
    {
        return false;
    }
}

2
এই উত্তর প্রায় এখনও বৈধ। ইস্যু করা_তাকে আর সেট করা হবে না বলে মনে হচ্ছে। বিকাশকারীদের
ডটকম

6

গুগল ওউথ কোড প্রবাহের প্রতিক্রিয়া ছাড়াও এনক্রিপ্ট করা ফর্মটিতে বৈধতা তথ্যের জন্য দরকারী এমন access_tokenরিটার্নও id_tokenদেয়।

একটি জিনিস যা আইডি টোকেনকে দরকারী করে তোলে তা হ'ল আপনি এটিকে আপনার অ্যাপ্লিকেশনের বিভিন্ন উপাদানগুলিতে পাস করতে পারেন। এই উপাদানগুলি একটি আইডি টোকেনটিকে লাইটওয়েট প্রমাণীকরণ প্রক্রিয়া হিসাবে অ্যাপ্লিকেশন এবং ব্যবহারকারীকে প্রমাণীকরণ হিসাবে ব্যবহার করতে পারে। আপনি আইডি টোকেনের তথ্য ব্যবহার করার আগে বা ব্যবহারকারীর অনুমোদনের সত্যতা হিসাবে এটির উপরে নির্ভর করার আগে আপনাকে অবশ্যই এটি যাচাই করতে হবে।

আইডি টোকেনের বৈধকরণের জন্য কয়েকটি পদক্ষেপ প্রয়োজন:

  • যাচাই করুন যে আইডি টোকেনটি একটি JWT যা যথাযথ গুগল পাবলিক কী দিয়ে স্বাক্ষরিত signed
  • যাচাই করুন যে আইডি টোকনে অডির মানটি আপনার অ্যাপ্লিকেশনটির ক্লায়েন্ট আইডির সমান।
  • যাচাই করুন যে আইডি টোকনে ইস্যুর মান অ্যাকাউন্ট . google.com.com বা https://accounts.google.com এর সমান ।
  • যাচাই করুন যে আইডি টোকেনের মেয়াদোত্তীর্ণ সময় (এক্সপ্রেস) কেটে যায় নি।
  • আপনি যদি অনুরোধে এইচডি প্যারামিটারটি পাস করেন তবে আইডি টোকেনের এইচডি দাবি রয়েছে যা আপনার Google অ্যাপ্লিকেশন হোস্ট করা ডোমেনের সাথে মেলে তা যাচাই করুন।

https://developers.google.com/identity/protocols/OpenIDConnect# لوی ডেটিংঅ্যানডটোকেন লিঙ্কটিতে আইডি টোকেনগুলির বৈধতার জন্য কোড নমুনা রয়েছে।

Https://security.stackexchange.com/questions/37818/why-use-openid-connect-instead-of-plain-oauth এও দেখুন ।


1

আমাকে কোনওভাবে গুগলকে জিজ্ঞাসা করতে হবে এবং জিজ্ঞাসা করতে হবে: এই অ্যাক্সেস টোকেনটি কী উদাহরণস্বরূপ@example.com?

না। আপনার যা দরকার তা হ'ল আপনার এপিআই ডোমেন থেকে গুগল অ্যাকাউন্ট ব্যবহারকারীদের জন্য ফেডারেটড লগইন সহ স্ট্যান্ডার্ড লগইনের অনুরোধ । এবং কেবলমাত্র তার পরে আপনি 'পাবলিক ইন্টারফেস' থেকে আপনার "স্থির ব্যবহারকারী আইডি" এর সাথে তুলনা করতে পারবেন।

ব্যবহারকারীর কাছে অনুরোধকারী সাইটটি সনাক্ত করতে গুগল ফেডারেটেড লগইন পৃষ্ঠায় রাজ্যের মান ব্যবহৃত হয়। এটি Google দ্বারা প্রত্যাবর্তিত অবিচ্ছিন্ন ব্যবহারকারী আইডির মান নির্ধারণ করতেও ব্যবহৃত হয়।

সুতরাং আপনার অবশ্যই 'পাবলিক ইন্টারফেস' হিসাবে একই ডোমেন থেকে হওয়া উচিত।

এবং ভুলে যাবেন না যে ব্যবহারকারীকে আপনার এপিআইতে বিশ্বাস করা যেতে পারে তা নিশ্চিত হওয়া দরকার;) সুতরাং গুগল ব্যবহারকারীকে তার পরিচয় যাচাই করার অনুমতি দেয় কিনা তা জিজ্ঞাসা করবে।


1

গুজল ব্যবহার করে এখানে একটি উদাহরণ দেওয়া হয়েছে :

/**
 * @param string $accessToken JSON-encoded access token as returned by \Google_Client->getAccessToken() or raw access token
 * @return array|false False if token is invalid or array in the form
 * 
 * array (
 *   'issued_to' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com',
 *   'audience' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com',
 *   'scope' => 'https://www.googleapis.com/auth/calendar',
 *   'expires_in' => 3350,
 *   'access_type' => 'offline',
 * )
 */
public static function tokenInfo($accessToken) {
    if(!strlen($accessToken)) {
        return false;
    }

    if($accessToken[0] === '{') {
        $accessToken = json_decode($accessToken)->access_token;
    }

    $guzzle = new \GuzzleHttp\Client();

    try {
        $resp = $guzzle->get('https://www.googleapis.com/oauth2/v1/tokeninfo', [
            'query' => ['access_token' => $accessToken],
        ]);
    } catch(ClientException $ex) {
        return false;
    }

    return $resp->json();
}

0

আপনার টোকেনটি https://www.google.com/accounts/AuthSubTokenInfo এ ব্যবহার করে একটি OAuth- অনুমোদনের অনুরোধ করার চেষ্টা করুন । এটি কেবল আথসবের জন্য কাজ করার জন্য নথিভুক্ত করা হয়েছে তবে এটি ওআউথের পক্ষেও কাজ করে। টোকেনটি কোন ব্যবহারকারীর জন্য তা আপনাকে জানায় না, তবে এটি আপনাকে জানাবে যে এটি কোন পরিষেবাগুলির জন্য বৈধ, এবং যদি টোকেনটি অবৈধ বা বাতিল হয়ে যায় তবে অনুরোধটি ব্যর্থ হবে।


0

একটি ইচ্ছামত OAuth অ্যাক্সেস টোকেন প্রমাণীকরণের জন্য ব্যবহার করা যাবে না, কারণ টোকেনটির অর্থ OAuth কোর অনুমানের বাইরে। এটি একটি একক ব্যবহার বা সংকীর্ণ মেয়াদোত্তীর্ণ উইন্ডো জন্য উদ্দেশ্য হতে পারে, বা এটি অ্যাক্সেস প্রদান করতে পারে যা ব্যবহারকারী দিতে চান না। এটি অস্বচ্ছও এবং OAuth গ্রাহক যা এটি পেয়েছিল এটি কোনও ধরণের ব্যবহারকারীর শনাক্তকারী কখনও দেখেনি।

একজন OAuth পরিষেবা সরবরাহকারী এবং এক বা একাধিক ভোক্তা যাচাইযোগ্য প্রমাণীকরণের টোকেন সরবরাহ করতে সহজেই OAuth ব্যবহার করতে পারে এবং সেখানে এটি করার জন্য প্রস্তাবনা এবং ধারণা রয়েছে, তবে কেবলমাত্র OAuth কোর বলার একটি স্বেচ্ছাসেবক পরিষেবা সরবরাহকারী অন্যান্য সহ- ছাড়া এটি সরবরাহ করতে পারবেন না গ্রাহকের সাথে সমন্বয়। গুগল-নির্দিষ্ট AuthSubTokenInfo REST পদ্ধতিটি ব্যবহারকারীর শনাক্তকারী সহ, নিকটে রয়েছে, তবে এটি উপযুক্ত নয়, যেহেতু এটি টোকেনটিকে অকার্যকর করতে পারে, বা টোকেনটির মেয়াদ শেষ হতে পারে।

যদি আপনার গুগল আইডি ওপেনআইডি শনাক্তকারী হয় এবং আপনার 'পাবলিক ইন্টারফেস' হয় হয় ওয়েব অ্যাপ্লিকেশন বা ব্যবহারকারীর ব্রাউজারটি কল করতে পারে, তবে আপনার সম্ভবত গুগলের ওপেনআইডি ওপি ব্যবহার করা উচিত।

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

ওপেনআইডি শনাক্তকারীটির বিরুদ্ধে পূর্ববর্তী প্রমাণীকরণের যাচাই করার একটি উপায় হ'ল একই ব্যবহারকারী-এজেন্টটি ব্যবহৃত হচ্ছে ধরে নিয়ে again ওপি ব্যবহারকারীর মিথস্ক্রিয়া ছাড়াই ইতিবাচক প্রতিবেদনটি ফিরিয়ে দিতে সক্ষম হবে (উদাহরণস্বরূপ কোনও কুকি বা ক্লায়েন্ট শংসাপত্র যাচাই করে)। ওপি অন্য ব্যবহারকারীর ইন্টারঅ্যাকশন প্রয়োজন মুক্ত, এবং সম্ভবত যদি প্রমাণীকরণের অনুরোধটি অন্য কোনও ডোমেইন থেকে আসে (আমার ওপি আমাকে ভবিষ্যতে কোনও কথোপকথন ছাড়াই এই বিশেষ আরপিটিকে পুনরায় প্রমাণীকরণের বিকল্প দেয়)) এবং গুগলের ক্ষেত্রে, ব্যবহারকারী যে OI দ্বারা OAuth টোকেনটি পেয়েছিল সেটি একই সেশন শনাক্তকারী ব্যবহার করতে পারে না, তাই ব্যবহারকারীকে পুনরায় প্রমাণীকরণ করতে হবে। তবে যে কোনও ক্ষেত্রে, আপনি পরিচয়টি দৃsert় করতে সক্ষম হবেন।


ঝাঁপ দাও 2.0 recenly অবচিত এবং OAuth এর ভিত্তিক থেকে OpenID পক্ষে যে প্রদান করে Google দ্বারা অক্ষম করা হয়েছে verifyable আইডি টোকেন
ভাদজিম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.