Paano gumawa ng OAuth client
Bersyon ng API 2026-10-affable-towhee
Bago mo pindutin ang “Gumawa ng client” sa pahinang Mga integration, magpasya sa tatlong bagay: ano ang maaaring gawin ng client, aling proseso ang hahawak sa secret nito, at sino ang magbabayad para sa mga tawag nito. Inilalahad ng gabay sa Pagpapatunay ang mga tuntunin; inilalapat ng pahinang ito ang mga iyon sa dalawang kathang-isip na kumpanya, ang Luba at ang Farducks.
Luba: ang Dive Deck
Nagpapatakbo ang Luba ng mga autonomous na submarino bilang serbisyo ng transportasyon at ride-share. Ipinapakita ng Dive Deck nito sa bawat pasahero ang isang parirala ng pagsisid sa screen ng cabin, sa wikang pinag-aaralan nila, at binabantayan ng operations team ng Luba kung gaano pa karami ang natitira sa allowance.
Gumagawa ang Luba ng isang client, ang Luba Dive Deck, na may pahintulot na “Gumawa ng bokabularyo” (vocab:generate) at “Basahin ang paggamit” (usage:read), at sinisingil sa “Ang allowance ng plan mo” (allowance). Dalawang proseso ang naghahati rito, at sa pagpapalit, bawat isa ay humihingi lamang ng scope na kailangan nito. Ang pagpapalit na walang scope ay nakakakuha ng bawat scope na pinapayagan sa client; ang pagpapalit na humihingi ng scope na hindi pinapayagan sa client ay tinatanggihan nang buo nang may invalid_scope, at hindi kailanman tahimik na pinakikitid.
Isinusulat ng dispatch server ang mga parirala ng bawat pagsisid. vocab:generate lamang ang hinihingi nito, kaya ang token na tumagas mula rito ay hindi makakabasa ng paggamit ng Luba.
export LINGARA_TOKEN="$(curl -sS --fail-with-body -X POST "https://api.getlingara.com/oauth/token" \
-u "$LINGARA_CLIENT_ID:$LINGARA_CLIENT_SECRET" \
-d "grant_type=client_credentials" \
--data-urlencode "scope=vocab:generate" | jq -r '.access_token // error(.error)')"curl -N -X POST "https://api.getlingara.com/v1/vocab/stream" \
-H "Authorization: Bearer $LINGARA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"level":2,"source_lang":"en","target_lang":"zh","count":8}'Ang operations dashboard ay ikalawang proseso sa server na may parehong ID ng client at secret. usage:read lamang ang hinihingi nito, at binabasa nito ang natitira sa allowance.
export LINGARA_TOKEN="$(curl -sS --fail-with-body -X POST "https://api.getlingara.com/oauth/token" \
-u "$LINGARA_CLIENT_ID:$LINGARA_CLIENT_SECRET" \
-d "grant_type=client_credentials" \
--data-urlencode "scope=usage:read" | jq -r '.access_token // error(.error)')"curl "https://api.getlingara.com/v1/usage" \
-H "Authorization: Bearer $LINGARA_TOKEN"Parehong tumatakbo ang dalawang proseso sa mga server ng Luba. Humihingi ng mga parirala ang tablet sa cabin sa dispatch server at hindi kailanman humahawak ng secret o ng token, dahil nababasa ang anumang nasa device na nahahawakan ng pasahero. Ipinapaliwanag kung bakit ng Itago ang mga secret at token sa server, sa gabay sa Pagpapatunay.
Ang parehong client bilang proyektong maaari mong i-clone at patakbuhin: integrations/luba-dive-deck
Farducks: Batter Rewards
Ang Farducks ay isang chain ng mga convenience store ng fish and chips. Habang piniprito ang isang order, humihingi ang loyalty app na Batter Rewards sa sariling backend ng Farducks ng maikling lesson plan, saka ito binabasa pabalik. Ang app at ang mga kaha ay tumatawag sa backend ng Farducks, hindi kailanman sa Lingara, kaya wala sa kanila ang humahawak ng secret.
Gumagawa ang Farducks ng isang client, ang Farducks Batter Rewards, na may pahintulot na “Gumawa ng mga lesson plan” (lesson_plans:write) at “Basahin ang mga lesson plan” (lesson_plans:read), at sinisingil sa “Ang allowance ng plan mo” (allowance). Ito lamang ang paraan ng pagsingil na magagamit sa paggawa ng client ngayon, at hindi na nababago ang pagsingil ng client kapag ginawa ito. Ang isa pang paraan, metered (“Magbayad ayon sa paggamit”), ay inilalarawan sa Sino ang nagbabayad para sa isang tawag, sa gabay sa Pagpapatunay.
lesson_plans:write lamang ang hinihingi ng backend, at ginagawa nito ang plan. Naka-stream ang response, at dala ng started na event nito ang plan_id ng plan.
export LINGARA_TOKEN="$(curl -sS --fail-with-body -X POST "https://api.getlingara.com/oauth/token" \
-u "$LINGARA_CLIENT_ID:$LINGARA_CLIENT_SECRET" \
-d "grant_type=client_credentials" \
--data-urlencode "scope=lesson_plans:write" | jq -r '.access_token // error(.error)')"curl -N -X POST "https://api.getlingara.com/v1/lesson-plans" \
-H "Authorization: Bearer $LINGARA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"context":"Ordering food at a night market","source_lang":"en","target_lang":"zh","level":2}'Itakda ang ID sa plan_id na iyon, saka humingi ng lesson_plans:read at basahin pabalik ang plan. Maaaring humingi ang isang pagpapalit ng ilan sa mga scope ng client, na pinaghihiwalay ng espasyo sa scope; iisa lamang ang hinihingi ng bawat command dito, dahil binubuo ang bawat isa mula sa iisang tawag.
export LINGARA_TOKEN="$(curl -sS --fail-with-body -X POST "https://api.getlingara.com/oauth/token" \
-u "$LINGARA_CLIENT_ID:$LINGARA_CLIENT_SECRET" \
-d "grant_type=client_credentials" \
--data-urlencode "scope=lesson_plans:read" | jq -r '.access_token // error(.error)')"curl "https://api.getlingara.com/v1/lesson-plans/$ID" \
-H "Authorization: Bearer $LINGARA_TOKEN"Isang araw, naidikit ang secret sa isang support ticket. Sa pahinang Mga integration, pinindot ng Farducks ang “Bagong secret” at idineploy ito sa backend, naghintay hanggang tumigil sa pagbabago ang petsa ng “Huling ginamit” ng lumang secret, saka pinindot ang “Bawiin” sa lumang secret. Mula sa sandaling iyon, tinatanggihan ang bawat access token na nakuha kapalit ng lumang secret. Nasa Palitan ang secret, sa gabay sa Pagpapatunay, ang limitasyong dalawang secret at kung bakit hindi maaaring bawiin ang nag-iisang secret ng client.
Ang parehong client bilang proyektong maaari mong i-clone at patakbuhin: integrations/farducks-batter-rewards
Saan susunod na pupunta
Saklaw ng gabay sa Pagpapatunay ang mga error ng pagpapalit, ang dapat gawin kapag nag-expire ang token, at ang tuntunin sa pagpapalit ng secret. Saklaw ng gabay sa Mga bersyon ang bersyong nakakabit sa client, at kung paano pumili ng iba para sa isang tawag.
Kung magkaiba ang isang salin at ang sangguniang Ingles, ang sangguniang Ingles ang tama.