OAuth2 הוא הפרוטוקול המקובל בתחום להרשאה. היא מספקת מנגנון למשתמשים כדי להעניק לאפליקציות אינטרנט ולנייד גישה למידע פרטי בלי לשתף את שם המשתמש שלהם, סיסמה ופרטי כניסה פרטיים אחרים.
המדריך הזה יוצר תוסף שמאפשר לגשת לאנשי הקשר של המשתמש ב-Google באמצעות אנשי Google API ו-Chrome Identity API. כי תוספים לא נטענים HTTPS, לא ניתן לבצע הן מגדירות קובצי Cookie או מפנות מחדש ל-Chrome Identity API כדי להשתמש ב-OAuth2.
שנתחיל?
כדי להתחיל, יוצרים ספרייה ואת הקבצים הבאים לתחילת פעולה.
manifest.json
כדי להוסיף את המניפסט, יוצרים קובץ בשם manifest.json
וכוללים את הקוד הבא.
{
"name": "OAuth Tutorial FriendBlock",
"version": "1.0",
"description": "Uses OAuth to connect to Google's People API and display contacts photos.",
"manifest_version": 3,
"action": {
"default_title": "FriendBlock, friends face's in a block."
},
"background": {
"service_worker": "service-worker.js"
}
}
service-worker.js
מוסיפים את קובץ ה-service worker של התוסף על ידי יצירת קובץ בשם service-worker.js
ומצרפים את הקוד הבא.
chrome.action.onClicked.addListener(function() {
chrome.tabs.create({url: 'index.html'});
});
index.html
צריך להוסיף קובץ HTML בשם index.html
ולכלול את הקוד הבא.
<html>
<head>
<title>FriendBlock</title>
<style>
button {
padding: 10px;
background-color: #3C79F8;
display: inline-block;
}
</style>
</head>
<body>
<button>FriendBlock Contacts</button>
<div id="friendDiv"></div>
</body>
</html>
המזהה של התוסף צריך להיות עקבי
במהלך הפיתוח, חשוב לשמור על מזהה יחיד. כדי לשמור על עקביות בתעודה המזהה, צריך לפעול לפי השלבים הבאים:
העלאת התוסף למרכז השליטה למפתחים
אורזים את ספריית התוספים לקובץ .zip
ומעלים אותה אל מפתח Chrome
מרכז הבקרה בלי לפרסם אותו:
- במרכז השליטה למפתחים, לוחצים על הוספת פריט חדש.
- לוחצים על עיון בקבצים, בוחרים את קובץ ה-ZIP של התוסף ומעלים אותו.
- עוברים לכרטיסייה Package ולוחצים על הצגת המפתח הציבורי.
כשהחלון הקופץ פתוח, פועלים לפי השלבים הבאים:
- מעתיקים את הקוד בין
-----BEGIN PUBLIC KEY-----
ל------END PUBLIC KEY-----
. - צריך להסיר את השורות החדשות כדי להפוך אותה לשורת טקסט אחת.
מוסיפים את הקוד אל manifest.json
מתחת לשדה "key"
.
כך התוסף ישתמש באותו מזהה.
{ // manifest.json
"manifest_version": 3,
...
"key": "ThisKeyIsGoingToBeVeryLong/go8GGC2u3UD9WI3MkmBgyiDPP2OreImEQhPvwpliioUMJmERZK3zPAx72z8MDvGp7Fx7ZlzuZpL4yyp4zXBI+MUhFGoqEh32oYnm4qkS4JpjWva5Ktn4YpAWxd4pSCVs8I4MZms20+yx5OlnlmWQEwQiiIwPPwG1e1jRw0Ak5duPpE3uysVGZXkGhC5FyOFM+oVXwc1kMqrrKnQiMJ3lgh59LjkX4z1cDNX3MomyUMJ+I+DaWC2VdHggB74BNANSd+zkPQeNKg3o7FetlDJya1bk8ofdNBARxHFMBtMXu/ONfCT3Q2kCY9gZDRktmNRiHG/1cXhkIcN1RWrbsCkwIDAQAB",
}
השוואה בין מזהים
פותחים את דף ניהול התוספים בכתובת chrome://extensions
ומוודאים שמצב פיתוח מופעל,
ומעלים את ספריית התוספים הלא ארוזים. להשוות את מזהה התוסף בניהול התוספים
לדף 'מזהה פריט' במרכז השליטה למפתחים. הם אמורים להיות זהים.
יצירת מזהה לקוח ב-OAuth
עוברים אל מסוף Google API ויוצרים פרויקט חדש. אחרי שמוכנים, בוחרים Credentials בסרגל הצד, לוחצים על Create credentials (יצירת פרטי כניסה) ובוחרים באפשרות OAuth client ID (מזהה לקוח OAuth).
בדף 'יצירת מזהה לקוח', בוחרים באפשרות תוסף ל-Chrome. ממלאים את שם התוסף ואת שם המקום. מזהה התוסף בסוף כתובת ה-URL בשדה Application ID (מזהה אפליקציה).
כדי לסיים, לוחצים על 'יצירה'. המסוף יספק מזהה לקוח OAuth.
רישום OAuth במניפסט
כוללים את השדה "oauth2"
במניפסט של התוסף. מזינים את מזהה לקוח OAuth שנוצר בקטע
"client_id"
לכלול כרגע מחרוזת ריקה ב-"scopes"
.
{
"name": "OAuth Tutorial FriendBlock",
...
"oauth2": {
"client_id": "yourExtensionOAuthClientIDWillGoHere.apps.googleusercontent.com",
"scopes":[""]
},
...
}
התחלת תהליך OAuth ראשון
רושמים את ההרשאה identity
במניפסט.
{
"name": "OAuth Tutorial FriendBlock",
...
"permissions": [
"identity"
],
...
}
יצירת קובץ לניהול תהליך ה-OAuth שנקרא oauth.js
, ולכלול את הקוד הבא.
window.onload = function() {
document.querySelector('button').addEventListener('click', function() {
chrome.identity.getAuthToken({interactive: true}, function(token) {
console.log(token);
});
});
};
יש להציב תג סקריפט עבור oauth.js
בחלק העליון של index.html
.
...
<head>
<title>FriendBlock</title>
...
<script type="text/javascript" src="oauth.js"></script>
</head>
...
טוענים מחדש את התוסף ולוחצים על סמל הדפדפן כדי לפתוח את index.html
. פותחים את המסוף ולוחצים על "FriendBlock אנשי קשר" לחצן. אסימון OAuth יופיע במסוף.
הפעלת Google People API
חוזרים למסוף Google API ובוחרים באפשרות ספרייה בסרגל הצד. חיפוש של 'Google People' API', לוחצים על התוצאה המתאימה ומפעילים אותה.
צריך להוסיף את ספריית הלקוח Google People API אל "scopes"
במניפסט של התוסף.
{
"name": "OAuth Tutorial FriendBlock",
...
"oauth2": {
"client_id": "yourExtensionOAuthClientIDWillGoHere.apps.googleusercontent.com",
"scopes": [
"https://www.googleapis.com/auth/contacts.readonly"
]
},
...
}
חוזרים למסוף Google API וחוזרים לפרטי הכניסה. לוחצים על "Create credentials" (יצירת פרטי כניסה). וגם בחירה באפשרות API key מהתפריט הנפתח.
שומרים את מפתח ה-API שנוצר לשימוש מאוחר יותר.
ליצירת בקשת ה-API הראשונה
עכשיו, שלתוסף יש הרשאות ופרטי כניסה מתאימים, והוא יכול לתת הרשאה למשתמש Google, הוא יכול
לבקש נתונים דרך People API. צריך לעדכן את הקוד ב-oauth.js
בהתאם לקוד שלמטה.
window.onload = function() {
document.querySelector('button').addEventListener('click', function() {
chrome.identity.getAuthToken({interactive: true}, function(token) {
let init = {
method: 'GET',
async: true,
headers: {
Authorization: 'Bearer ' + token,
'Content-Type': 'application/json'
},
'contentType': 'json'
};
fetch(
'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=API_KEY',
init)
.then((response) => response.json())
.then(function(data) {
console.log(data)
});
});
});
};
מחליפים את API_KEY במפתח ה-API שנוצר ממסוף Google API. התוסף
צריך לרשום אובייקט JSON שכולל מערך של people/account_id
במסגרת
שדה memberResourceNames
.
חסימת פנים
עכשיו, כשהתוסף מחזיר רשימה של אנשי הקשר של המשתמש, הוא יכול לשלוח בקשות נוספות.
כדי לאחזר את הפרופילים והפרטים של אנשי הקשר האלה . התוסף ישתמש
memberResourceNames
כדי לאחזר את פרטי התמונות של אנשי הקשר של המשתמש. יש לעדכן את oauth.js
ל-
כוללים את הקוד הבא.
window.onload = function() {
document.querySelector('button').addEventListener('click', function() {
chrome.identity.getAuthToken({interactive: true}, function(token) {
let init = {
method: 'GET',
async: true,
headers: {
Authorization: 'Bearer ' + token,
'Content-Type': 'application/json'
},
'contentType': 'json'
};
fetch(
'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=<API_Key_Here>',
init)
.then((response) => response.json())
.then(function(data) {
let photoDiv = document.querySelector('#friendDiv');
let returnedContacts = data.memberResourceNames;
for (let i = 0; i < returnedContacts.length; i++) {
fetch(
'https://people.googleapis.com/v1/' + returnedContacts[i] +
'?personFields=photos&key=API_KEY',
init)
.then((response) => response.json())
.then(function(data) {
let profileImg = document.createElement('img');
profileImg.src = data.photos[0].url;
photoDiv.appendChild(profileImg);
});
};
});
});
});
};
טוענים מחדש וחוזרים לתוסף. לחצו על הלחצן FriendsBlock ו-Ta-da! כיף לראות את הפנים של איש הקשר ב- בלוק.