আইফোন অ্যাপ্লিকেশনটির জন্য ফেসবুক অ্যাক্সেস টোকেন সার্ভার-সাইডের বৈধতা


112

আমি আইফোন অ্যাপ্লিকেশন বিকাশ করছি, এটি সার্ভারের সাথে যোগাযোগের ভিত্তিতে এবং আমি ফেসবুক প্রমাণীকরণ পদ্ধতি ব্যবহার করতে চাই।

মূলত, আমি মনে করি এটি এর মতো কাজ করা উচিত:

  1. আমার আইফোন অ্যাপ্লিকেশনটিতে, ব্যবহারকারী তার ইমেল এবং পাসওয়ার্ড ব্যবহার করে ফেসবুকে লগ ইন করে।
  2. ব্যবহারকারী সম্পর্কিত ফেসবুক অ্যাপ্লিকেশনটির জন্য তার ডেটা অ্যাক্সেসের অনুমতি দেয়।
  3. আমার আইফোন অ্যাপ্লিকেশনটি সফল লগ ইন করার পরে অ্যাক্সেস টোকেন গ্রহণ করে।
  4. আমার সার্ভারের সাথে আরও যোগাযোগের ক্ষেত্রে, আমার আইফোন অ্যাপ্লিকেশনটিতে প্রাপ্ত ফেসবুক অ্যাক্সেস টোকেন ব্যবহার করা উচিত (উদাহরণস্বরূপ: কোয়েরিতে)।
  5. অ্যাক্সেস টোকেন সহ, যখন আমার সার্ভার আইফোন অ্যাপ্লিকেশন থেকে কিছু প্রশ্ন পেয়েছে, তখন ফেসবুককে জিজ্ঞাসা করা উচিত যে এই টোকেনটি বৈধ (এবং কাদের জন্য), এবং যদি হ্যাঁ, তবে সার্ভারকে ধরে নেওয়া উচিত যে ব্যবহারকারীকে ফেসবুকের মাধ্যমে প্রমাণীকরণ করা হয়েছে।

আমার প্রশ্নটি: প্রদত্ত অ্যাক্সেস টোকেনটি বৈধ হলে সার্ভারটি কীভাবে ফেসবুককে জিজ্ঞাসা করবে? আমি মনে করি আমার ফেসবুক অ্যাপ্লিকেশনের জন্য টোকেনটি বৈধ কিনা তা আমার কোনওভাবে পরীক্ষা করা উচিত।

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


5
ব্যবহারকারী যদি এফবি-তে অ্যাপ্লিকেশনটি লগ আউট না করে থাকে তবে আপনি সার্ভারে (এসএসএল হোপফুলি) কেবলমাত্র টুথন প্রেরণ করতে পারেন। গ্রাফ এপিআইয়ের মাধ্যমে "/ me" এর একটি সহজ প্রশ্নটি সফল হয় বা ব্যর্থ হয়?
ম্যাড গেমার

আপনি ফেসবুক থেকে প্রতিক্রিয়াতে এই বার্তা পাবেন যে আপনার টোকেনটি বৈধ নয় :)
জিন-লুক গার্ডার্ড

1
আমি যা করছি তার সাথে খুব মিল কিছু করার চেষ্টা করছি। আপনি এই প্রশ্নের উত্তর হিসাবে চিহ্নিত করেন নি, আপনি কি কখনও এই কাজ পেয়েছেন?
টেম্পি

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

@ ডেবিয়ান মাস্টার এটি আপনার অ্যাপের স্থাপত্যের উপর নির্ভর করে। যদি আপনি হ্যাঁর চেয়ে "কোনও এফবি টোকেন না - অ্যাপটিতে অ্যাক্সেস নেই" কেসটি বিবেচনা করেন তবে ব্যবহারকারীকে লগ আউট করুন। অন্যথায়, আপনি একটি "লিঙ্কমুক্ত" যুক্তি বিবেচনা করতে পারেন, যেখানে ব্যবহারকারী লগ ইন থাকে, তবে ফেসবুক থেকে প্রাপ্ত তথ্যটি সার্ভার / ক্লায়েন্টের অ্যাকাউন্ট থেকে আলাদা করা হয়।
ইয়েভেন ডাবিনিন

উত্তর:


115

এখানে ব্যবহারকারীর অ্যাক্সেস টোকেনটি আপনার অ্যাপের অন্তর্ভুক্ত যাচাই করতে আপনি দুটি পদক্ষেপ প্রক্রিয়াটি ব্যবহার করতে পারেন:

1) একটি অ্যাপ অ্যাক্সেস টোকেন জেনারেট করুন

( https://developers.facebook.com/docs/howtos/login/login-as-app/ )

https://graph.facebook.com/oauth/access_token?
client_id=YOUR_APP_ID
&client_secret=YOUR_APP_SECRET
&grant_type=client_credentials

2) ব্যবহারকারীর অ্যাক্সেস টোকেন ডিবাগ করুন

( https://developers.facebook.com/docs/howtos/login/debugging-access-tokens/ )

https://graph.facebook.com/debug_token?
input_token=INPUT_TOKEN
&access_token=ACCESS_TOKEN

যেখানে INPUT_TOKEN ব্যবহারকারীর অ্যাক্সেস টোকেন আপনি যাচাই করতে চান এবং ACCESS_TOKEN আপনার অ্যাপের টোকেন যা আপনি পদক্ষেপ 1 থেকে পেয়েছেন।

ডিবাগের সমাপ্তি বিন্দুটি মূলত একটি টোকেন সম্পর্কিত সমস্ত তথ্য ডাম্প করে, সুতরাং এটি এর মতো কিছুতে প্রতিক্রিয়া জানাবে:

{
    data: {
        app_id: YOUR_APP_ID,
        is_valid: true,
        metadata: {
            sso: "iphone-safari"
        },
        application: YOUR_APP_NAMESPACE,
        user_id: USER_ID,
        issued_at: 1366236791,
        expires_at: 1371420791,
        scopes: [ ]
    }
}

যদি সেই টোকেনটি "আপনার অ্যাপ্লিকেশন" থেকে না থাকে তবে এটি ত্রুটির প্রতিক্রিয়া ফিরিয়ে দেবে।


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

@ ব্র্যান্ডনজ্যাচারি আপনি কীভাবে এটি করেন তা দেখতে পাবেন না, আমি কেবল অ্যাপ আইডি এবং গোপনীয়তা দিয়ে চেষ্টা করেছি এবং আমাকে "ইনপুট_ টোকেন প্যারামিটার প্রয়োজনীয়"
জনি জেড

@ জোহনিজেড ইনপুট টোকেন প্রয়োজন। অ্যাক্সেস টোকেন যেখানে নমনীয়তা।
ব্র্যান্ডন জ্যাকারি

8
@ ব্র্যান্ডনজ্যাচারি আপনি ঠিক বলেছেন, আমি ইনপুট এবং অ্যাক্সেস টোকেন গুলিয়ে ফেলেছিলাম। অ্যাপ্লিকেশন আইডি এবং গোপনীয়তা ব্যবহার করতে আমি পাইপ দিয়ে একটি ডিলিমিটার হিসাবে প্যারামিটার হিসাবে পাস করেছি: & অ্যাক্সেস_ টোকেন = অ্যাপি_আইডি | অ্যাপ্লিকেশন
জনি জেড


115

আপডেট: এই উত্তরটি অনিরাপদ বলে মনে হচ্ছে যেহেতু এটি প্রথমে আপনার অ্যাপের সাথে সম্পর্কিত হিসাবে টোকেনটিকে বৈধতা দেয় না, নীচের মতামত, মূল উত্তরটি দেখুন:

আমি ধরে নিলাম আপনার হাতে ইতিমধ্যে অ্যাক্সেস টোকেন রয়েছে। এমন ক্ষেত্রে অ্যাক্সেস টোকেনকে বৈধতা দেওয়ার সহজ উপায়টি হল নিম্নলিখিত অনুরোধটি জারি করা

https://graph.facebook.com/me?fields=id&access_token=@accesstoken

এখানে আপনার অ্যাক্সেস টোকেনটি দিয়ে @accesstoken প্রতিস্থাপন করুন। আমি ইউআরএল ব্রেকডাউন করব এবং প্রতিটি ব্যাখ্যা করব।

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

প্রদত্ত অ্যাক্সেস টোকেনটি বৈধ না হলে বা মেয়াদোত্তীর্ণ হয়ে গেছে ফেসবুক কেবল কোনও প্রকারের একটি ত্রুটি বার্তা প্রদান করবে।

একটি বৈধ অ্যাক্সেস টোকেনের জন্য ফলাফলটি একরকম দেখাবে

{
   "id": "ID_VALUE"
}

14
যদি সেই ব্যবহারকারী কোনও ভিন্ন অ্যাপ্লিকেশনটির সাথে সম্পর্কিত এমন একটি প্রবেশ_ টোকেন সরবরাহ করে তবে কী সেই অনুরোধটি সফল হবে না?
ইউরি নিম্টসভ

2
যে কোনও বৈধ ব্যবহারকারীর অ্যাক্সেস টোকেন ব্যবহার করা যেতে পারে (এটি কোনও অ্যাপ্লিকেশন সম্পর্কিত তা নয়)
রবিন

12
অ্যাক্সেস টোকেনটি যদি আপনার অ্যাপ্লিকেশনের অন্তর্ভুক্ত থাকে তবে @ প্রবীণ এই পোস্টটি সমস্যার সমাধান নয় কারণ এটি বৈধ নয়।
কোলুনিয়া

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

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

11

আরেকটি সমাধান হ'ল ব্যবহারকারী অ্যাক্সেস টোকেন থেকে অ্যাপ্লিকেশন আইডি পান (বা একটি টোকেনের জন্য উত্স অ্যাপ্লিকেশনটি যাচাই করুন)https://graph.facebook.com/app/?access_token=[user_access_token] দ্বারা বর্ণিত হিসাবে ব্যবহার করা হবে ।

এটি একটি অনিবন্ধিত বৈশিষ্ট্য হিসাবে উপস্থিত বলে মনে হচ্ছে, তবে টোকেনটির জন্য তৈরি হওয়া অ্যাপটির আইডি থাকা জেএসওএন প্রদান করে returns যদি টোকেনটি আপনার অ্যাপ্লিকেশানের জন্য না থাকে তবে এটি 400 ডলার দেয়।


আমি কীভাবে অন্যান্য ফেসবুক ব্যবসার রেটিং পেতে পারি। এর জন্য আমার কী করা দরকার?
মনীশ রাও 13

6

ফেসবুকের সর্বশেষতম সংস্করণে (২.২) আপনি এটি এইভাবে করতে পারেন:

https://developers.facebook.com/docs/graph-api/reference/v2.2/debug_token

নমুনা আউটপুট:

{
    "data": {
        "app_id": "THE APP ID", 
        "application": "APP NAME", 
        "expires_at": 1427245200, 
        "is_valid": true, 
        "scopes": [
        "public_profile", 
        "basic_info", 
        "read_stream", 
        "email", 
        "publish_actions", 
        "read_friendlists", 
        "user_birthday", 
        "user_hometown", 
        "user_location", 
        "user_likes", 
        "user_photos", 
        "user_videos", 
        "user_friends", 
        "user_posts"
        ], 
        "user_id": "THE USER ID"
    }
}

এর অর্থ কি এই যে আপনি প্রতিটি অনুরোধে এই এফবি শেষ পয়েন্ট কল করতে হবে? সেখানে কি কোনও বেটার ওয়ে নেই?
Jdruwe

এটি কাজ করে তবে এর অ্যাক্সেস টোকেন প্রয়োজন। অ্যাক্সেস টোকেন 'সেবাস্তিয়ান ক্র্যাব' উত্তরটি ব্যবহার করে উত্পন্ন করা যেতে পারে বা আমরা কেবল অ্যাপিড | অ্যাপসেক্রেট ব্যবহার করতে পারি। আরও তথ্যের জন্য তথ্য বিকাশকারী.ফেস
बुक

: এখানে এই একটি উদাহরণ ব্যবহার এর stackoverflow.com/a/16947027/32453
rogerdpack

2
private function facebookRequestMe($access_token)
{
    include_once "facebook.php";

    $facebook = new Facebook(array(
        "appId" => "your_application_id",
        "secret" => "your_application_secret"
    ));
    $facebook->setAccessToken($access_token);
    return $facebook->api("/me", "GET");
}

আপনি গিটহাব থেকে পিএইচপি জন্য ফেসবুক এসডিকে ডাউনলোড করতে পারেন ।


1

যদি কোনও ব্যবহারকারী আপনাকে একটি ফেসবুক ইউআইডি পাস করে যে তারা দাবি করেছে যে এটি তাদের is

def verify_facebook_id(id, access_token):
    import requests
    import simplejson
    params = {'fields': 'id', 'access_token': access_token}
    text = requests.get("https://graph.facebook.com/me", params=params).text
    json = simplejson.loads(text)
    response_id = json["id"]
    return response_id == id

দুর্ভাগ্যক্রমে "আপনার অ্যাপ্লিকেশনটির জন্য" টোকেনটি তৈরি হয়েছিল তা যাচাই করে না ...
রজারডপ্যাক

1

এটি কেবলমাত্র একটি অনুরোধ ব্যবহার করে ব্যবহারকারী টোকেন যাচাই করার একমাত্র সুরক্ষিত পদ্ধতি:

https://graph.facebook.com/debug_token?input_token={token-to-inspect}&access_token={app_id}|{app_secret}

লক্ষণীয় যে একটি চিহ্ন "|" উপরের ইউআরএলটিতে ওআর হিসাবে নয় বরং বিভাজক হিসাবে ব্যবহৃত হয়েছে এবং অন্যান্য ক্ষেত্রগুলি পূরণ করার পরে অবশ্যই সেখানে থাকতে হবে।

প্রতিক্রিয়াটি JSON এর মতো দেখাচ্ছে:

{
    data: {
        app_id: {app_id},
        application: {app_name},
        expires_at: {some_number},
        is_valid: {true|false}
        scopes: {array_of_permissions},
        user_id: {user_id}
    }
}

তথ্যসূত্র: https://developers.facebook.com/docs/facebook-login/access-tokens/#apptokens (উপরের পদ্ধতিটি এই বিভাগের নীচে উল্লিখিত হয়েছে)


আছে: এক অনুরোধের সাথে অন্য সুরক্ষিত উপায় stackoverflow.com/a/36555287/32453
rogerdpack

-1

অ্যাক্সেস টোকেনের সাথে ফেসবুক একটি "এক্সপায়ার_ ইন" পরামিতি প্রেরণ করে, যা অফসেট মান value অ্যাক্সেস টোকেনটি কখন এনএসডিট হিসাবে শেষ হবে তার জন্য গণনা করতে এটি ব্যবহার করুন। তারপরে আপনার যখন কোনও অনুরোধ করা দরকার তখন বর্তমান তারিখের সমাপ্তির তারিখের সাথে তুলনা করুন।

এছাড়াও স্থিতি কোডগুলি পরীক্ষা করার চেষ্টা করুন এবং ফেসবুক ফেরত পাঠানো প্রতিক্রিয়াগুলির স্ট্রিংগুলি।

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