Copilot Studio תומך בכניסה יחידה (SSO). SSO מאפשר לסוכנים באתר האינטרנט שלך להכניס לקוחות אם הם כבר נכנסו לדף או לאפליקציה שבהם הסוכן נפרס.
לדוגמה, הסוכן מתארח באינטראנט הארגוני או באפליקציה שהמשתמש כבר נכנס אליה.
יש חמישה שלבים עיקריים לקביעת התצורה של SSO עבור Copilot Studio:
אפשר אימות ידני עבור הסוכן שלך באמצעות Microsoft Entra ID
צור רישום יישום ב-Microsoft Entra ID עבור בד הציור המותאם אישית שלך.
הגדר טווח מותאם אישית עבור הסוכן שלך ב-Microsoft Entra ID.
הוסף את הטווח המותאם אישית לתצורת הסוכן שלך.
קבע את התצורה של קוד צד הלקוח של בד הציור המותאם אישית כדי לאפשר SSO.
דרישות מוקדמות
ערוצים נתמכים
הטבלה הבאה מפרטת את הערוצים שתומכים כעת ב-SSO. תוכל להציע תמיכה בערוצים נוספים בפורום הרעיונות של Copilot Studio.
1 אם אתה מפרסם בערוץ Teams, עליך לפעול לפי הוראות קביעת התצורה בתיעוד קביעת תצורה של כניסה יחידה באמצעות Microsoft Entra ID עבור סוכנים ב-Microsoft Teams. אם לא תקבע את הגדרות SSO של Teams בהתאם להוראות בדף זה, אימות המשתמשים שלך ייכשל תמיד בעת השימוש בערוץ Teams.
2 רק ערוץ הצ'אט החי נתמך. למידע נוסף, ראה הגדרת מסירה ל-Dynamics 365 Customer Service.
צור רישומי יישומים עבור אתר האינטרנט המותאם אישית שלך
כדי לאפשר SSO, צור שני רישומי יישומים נפרדים:
-
רישום יישום אימות, שמאפשר אימות משתמשים באמצעות Microsoft Entra ID עבור הסוכן שלך
- רישום יישום בד ציור, שמאפשר SSO עבור דף האינטרנט המותאם אישית שלך
מסיבות אבטחה, אל תשתמש שוב באותו רישום יישום גם עבור הסוכן וגם עבור אתר האינטרנט המותאם אישית שלך.
כדי ליצור רישום יישום אימות, פעל לפי ההוראות בקביעת תצורה של אימות משתמשים באמצעות Microsoft Entra ID.
צור רישום יישום שני שישמש כרישום יישום בד הציור שלך.
הוסף כתובת URL להחלפת אסימונים
כדי לעדכן את הגדרות האימות של Microsoft Entra ID ב-Copilot Studio, הוסף את כתובת ה-URL להחלפת אסימונים כדי לאפשר לאפליקציה שלך ול-Copilot Studio לשתף מידע.
בפורטל Azure, בדף הרישום של אפליקציית האימות שלך, עבור אל חשיפת API.
תחת טווחים, בחר בסמל העתקה ללוח.
ב-Copilot Studio, בתפריט הניווט תחת הגדרות, בחר אבטחה ולאחר מכן בחר באריח אימות.
עבור כתובת URL להחלפת אסימונים (נדרשת עבור SSO), הדבק את הטווח שהעתקת קודם לכן.
בחר Save.
בפורטל Azure, בדף רישום אפליקציית האימות שלך, עבור אל מבט כולל.
העתק את הערך מזהה יישום (לקוח) תחת עיקרי.
בסרגל הניווט, בחר ניהול>חשיפת API.
תחת יישומי לקוח מורשים, בחר הוסף אפליקציית לקוח, ולאחר מכן הדבק את מזהה הלקוח שהועתק.
בחר Save.
לאחר שתיצור את רישום יישום בד הציור, עבור אל אימות ולאחר מכן בחר הוספת פלטפורמה.
תחת תצורות פלטפורמה, בחר הוספת פלטפורמה, ולאחר מכן בחר SPA.
תחת מזהי URI להפניה מחדש, הזן את כתובת ה-URL של דף האינטרנט שלך. לדוגמה, http://contoso.com/index.html.
במקטע הענקה משתמעת וזרימות היברידיות, הפעל גם את אסימוני גישה (משמשים לזרימות משתמעות) וגם את אסימוני מזהה (משמשים לזרימות משתמעות והיברידיות).
בחר קביעת תצורה.
אתר את כתובת ה-URL של נקודת הקצה של האסימון של הסוכן שלך
ב-Copilot Studio, פתח את הסוכן שלך ולאחר מכן בחר ערוצים.
בחר אפליקציה למכשירים ניידים.
תחת נקודת קצה של אסימון, בחר העתקה.
קבע את התצורה של SSO בדף האינטרנט שלך
חשוב
משתמשים אורחים אינם יכולים לגשת לתשובות שנוצרו באמצעות בינה מלאכותית ממקורות נתונים של SharePoint ושל Graph Connector באפליקציות שבהן SSO מופעל.
השתמש בקוד שמופיע במאגר GitHub של Copilot Studio Samples כדי ליצור דף אינטרנט עבור כתובת ה-URL להפניה מחדש. העתק את הקוד ממאגר GitHub ושנה אותו באמצעות ההוראות הבאות.
עבור לדף מבט כולל בפורטל Azure והעתק את מזהה היישום (לקוח) ואת מזהה הספרייה (דייר) מרישום יישום בד הציור שלך.
כדי לקבוע את התצורה של Microsoft Authentication Library (MSAL):
- הקצה את
clientIdלמזהה היישום (לקוח) שלך.
- הקצה את
authority לכתובת https://login.microsoftonline.com/ והוסף את מזהה הספרייה (לקוח) שלך בסוף.
לדוגמה:
var clientApplication;
(function (){
var msalConfig = {
auth: {
clientId: '00001111-aaaa-2222-bbbb-3333cccc4444',
authority: 'https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
},
הגדר את המשתנה theURL לכתובת ה-URL של נקודת הקצה של האסימון שהעתקת קודם לכן. לדוגמה:
(async function main() {
var theURL = "https://<token endpoint URL>"
ערוך את הערך של userId כך שיכלול קידומת מותאמת אישית. לדוגמה:
var userId = clientApplication.account?.accountIdentifier != null ?
("My-custom-prefix" + clientApplication.account.accountIdentifier).substr(0, 64)
: (Math.random().toString() + Date.now().toString()).substr(0,64);
שמור את השינויים שלך.
ודא שקבעת בהצלחה את התצורה של SSO.
בעת בדיקת הסוכן שלך, אם התצורה של SSO לא נקבעה בהצלחה, תתבקש להיכנס. תהליך הכניסה מספק לך קוד אימות שעליך להעתיק לחלון הצ'אט.
אם אתה רואה בקשת כניסה, ודא שהשלמת כראוי את שלבים 1 עד 5 בהליך זה. אם התצורה של SSO נקבעה בהצלחה, לא תתבקש להיכנס.
הערה
הקוד במאגר GitHub מחייב משתמשים לבחור בלחצן הכניסה. בסביבת ייצור, ייתכן שתרצה להחליף את הפונקציונליות של הלחצן באירוע מתאים יותר, כגון ניווט לדף.
מבט כולל טכני
האיור הבא מציג כיצד משתמש נכנס מבלי לראות בקשת כניסה (SSO) ב-Copilot Studio:
משתמש הסוכן מזין ביטוי שמפעיל נושא כניסה. נושא הכניסה נועד להכניס את המשתמש ולהשתמש באסימון המאומת של המשתמש (המשתנה User.AccessToken).
Copilot Studio שולח בקשת כניסה כדי לאפשר למשתמש להיכנס באמצעות ספק הזהויות שהוגדר עבורו.
בד הציור המותאם אישית של הסוכן מיירט את הנחיית הכניסה ומבקש אסימון בשם המשתמש (OBO) מ-Microsoft Entra ID. בד הציור שולח את האסימון לסוכן.
עם קבלת אסימון OBO, הסוכן מחליף את אסימון OBO ב"אסימון גישה" וממלא את המשתנה AuthToken באמצעות הערך של אסימון הגישה. המשתנה IsLoggedIn מוגדר גם הוא בשלב זה.
צור רישום יישום ב-Microsoft Entra ID עבור בד הציור המותאם אישית שלך
כדי לאפשר SSO, דרושים לך שני רישומי יישומים נפרדים:
חשוב
לא ניתן להשתמש שוב באותו רישום יישום גם עבור אימות המשתמשים של הסוכן וגם עבור בד הציור המותאם אישית שלך.
צור רישום יישום עבור בד הציור של הסוכן
היכנס אל פורטל Azure.
עבור אל רישומי אפליקציות, באמצעות בחירת הסמל או חיפוש בסרגל החיפוש העליון.
בחר רישום חדש.
הזן שם עבור הרישום. השתמש בשם הסוכן שאת בד הציור שלו אתה רושם, וכלול את "בד ציור" כדי לעזור להפריד אותו מרישום היישום המשמש לאימות.
לדוגמה, אם הסוכן שלך נקרא "Contoso sales help", תוכל לתת לרישום האפליקציה את השם "ContosoSalesCanvas" או שם דומה.
תחת סוגי חשבונות נתמכים, בחר חשבונות בכל דייר ארגוני (כל ספריית Microsoft Entra ID - ריבוי דיירים) וחשבונות Microsoft אישיים (לדוגמה, סקייפ, Xbox).
השאר בשלב זה את המקטע URI להפניה מחדש ריק, מכיוון שתזין מידע זה בשלבים הבאים. בחר הירשם.
לאחר השלמת הרישום, נפתח הדף מבט כולל. עבור אל מניפסט. וודא ש-accessTokenAcceptedVersion מוגדר כ-2. אם לא, שנה אותו ל-2 ולאחר מכן בחר שמירה.
הוסף את כתובת ה-URL להפניה מחדש
כאשר הרישום פתוח, עבור אל אימות ולאחר מכן בחר הוספת פלטפורמה.
בחלונית קביעת תצורה של פלטפורמות, בחר אינטרנט.
תחת מזהי URI להפניה מחדש, הוסף את כתובת ה-URL המלאה של הדף שבו מתארח בד הציור של הצ'אט. תחת המקטע הענקה משתמעת, בחר בתיבות הסימון אסימוני מזהה ואסימוני גישה.
בחר קביעת תצורה כדי לאשר את השינויים.
עבור אל הרשאות API. בחר באפשרות הענקת הסכמת מנהל עבור <שם הדייר שלך>, ולאחר מכן בחר כן.
חשוב
כדי למנוע ממשתמשים את הצורך להסכים לכל אפליקציה, אדם שהוקצה לו לפחות התפקיד מנהל אפליקציות או מנהל אפליקציות ענן יכול להעניק הסכמה כלל-דיירית לרישומי האפליקציות שלך.
הגדר טווח מותאם אישית עבור הסוכן שלך
הגדר טווח מותאם אישית על-ידי חשיפת API עבור רישום יישום בד הציור בתוך רישום אפליקציית האימות.
טווחים מאפשרים לך לקבוע תפקידי משתמש ומנהל וזכויות גישה.
שלב זה יוצר יחסי אמון בין רישום אפליקציית האימות המשמש לאימות לבין רישום האפליקציה של בד הציור המותאם אישית שלך.
פתח את רישום האפליקציה שיצרת בעת קביעת התצורה של האימות.
עבור אל הרשאות API וודא שההרשאות הנכונות נוספו עבור הסוכן שלך. בחר באפשרות הענקת הסכמת מנהל עבור <שם הדייר שלך>, ולאחר מכן בחר כן.
חשוב
כדי למנוע ממשתמשים את הצורך להסכים לכל אפליקציה, אדם שהוקצה לו לפחות התפקיד מנהל אפליקציות או מנהל אפליקציות ענן יכול להעניק הסכמה כלל-דיירית לרישומי האפליקציות שלך.
עבור אל חשיפת API ובחר הוספת טווח.
הזן שם עבור הטווח, יחד עם פרטי התצוגה שהמשתמשים רואים כאשר הם מגיעים למסך SSO. בחר הוספת טווח.
בחר הוסף יישום לקוח.
הזן בשדה מזהה לקוח את מזהה היישום (לקוח) מהדף מבט כולל של רישום יישום בד הציור. בחר בתיבת הסימון של הטווח הרשום שיצרת.
בחר הוסף יישום.
השתמש בכתובת URL להחלפת אסימונים בדף תצורת האימות של Copilot Studio כדי להחליף את אסימון OBO באסימון הגישה המבוקש באמצעות מסגרת ה-Bot.
Copilot Studio מבצע קריאה ל-Microsoft Entra ID כדי לבצע את ההחלפה בפועל.
היכנס ל-Copilot Studio.
ודא שבחרת בסוכן שעבורו ברצונך לאפשר אימות, על-ידי בחירת סמל הסוכן בתפריט העליון ובחירת הסוכן הנכון.
בתפריט הניווט, תחת הגדרות, בחר אבטחה. לאחר מכן בחר בכרטיסיה אימות.
הזן בשדה כתובת URL להחלפת אסימונים את ה-URI המלא של הטווח מהדף חשיפת API עבור רישום אפליקציית האימות של הסוכן. ה-URI מופיע בתבנית api://1234-4567/scope.name.
בחר שמירה ולאחר מכן פרסם את תוכן הסוכן.
עדכן את דף בד הציור המותאם אישית שבו נמצא הסוכן כדי ליירט את הבקשה לכרטיס הכניסה ולהחליף את אסימון OBO.
קבע את התצורה של Microsoft Authentication Library (MSAL) על-ידי הוספת הקוד הבא לתג <script> במקטע <head>.
עדכן את clientId באמצעות מזהה היישום (לקוח) עבור רישום יישום בד הציור. החלף את <Directory ID> במזהה הספרייה (לקוח). קבל מזהים אלה (IDs) מהדף מבט כולל של רישום יישום בד הציור.
<head>
<script>
var clientApplication;
(function () {
var msalConfig = {
auth: {
clientId: '<Client ID [CanvasClientId]>',
authority: 'https://login.microsoftonline.com/<Directory ID>'
},
cache: {
cacheLocation: 'localStorage',
storeAuthStateInCookie: false
}
};
if (!clientApplication) {
clientApplication = new Msal.UserAgentApplication(msalConfig);
}
} ());
</script>
</head>
הכנס את ה-<סקריפט> הבא במקטע <body>. קובץ Script זה קורא לפעולת שירות כדי לאחזר את resourceUrl ולהחליף את האסימון הנוכחי שלך באסימון שהתבקש על-ידי הנחיית OAuth.
<script>
function getOAuthCardResourceUri(activity) {
if (activity &&
activity.attachments &&
activity.attachments[0] &&
activity.attachments[0].contentType === 'application/vnd.microsoft.card.oauth' &&
activity.attachments[0].content.tokenExchangeResource) {
// asking for token exchange with Microsoft Entra ID
return activity.attachments[0].content.tokenExchangeResource.uri;
}
}
function exchangeTokenAsync(resourceUri) {
let user = clientApplication.getAccount();
if (user) {
let requestObj = {
scopes: [resourceUri]
};
return clientApplication.acquireTokenSilent(requestObj)
.then(function (tokenResponse) {
return tokenResponse.accessToken;
})
.catch(function (error) {
console.log(error);
});
}
else {
return Promise.resolve(null);
}
}
</script>
הכנס את ה-<סקריפט> הבא במקטע <body>. בתוך mainפעולת השירות הראשית, קוד זה מוסיף תנאי למאגר שלךstore, עם המזהה הייחודי של הסוכן. זה גם יוצר מזהה ייחודי כמשתנה userId שלך.
עדכן את <BOT ID> באמצעות מזהה הסוכן שלך. כדי לראות את מזהה הסוכן ב-Copilot Studio, עבור לדף ערוצים של הסוכן ובחר אפליקציה למכשירים ניידים.
<script>
(async function main() {
// Add your BOT ID below
var BOT_ID = "<BOT ID>";
var theURL = "https://powerva.microsoft.com/api/botmanagement/v1/directline/directlinetoken?botId=" + BOT_ID;
const {
token
} = await fetchJSON(theURL);
var directline = await fetchJSON(regionalChannelSettingsURL).then(res=> res.channelUrlsById.directline);
const directLine = window.WebChat.createDirectLine({
domain: `${directline}v3/directline`,
token
});
var userID = clientApplication.account?.accountIdentifier != null ?
("Your-customized-prefix-max-20-characters" + clientApplication.account.accountIdentifier).substr(0, 64) :
(Math.random().toString() + Date.now().toString()).substr(0, 64); // Make sure this will not exceed 64 characters
const store = WebChat.createStore({}, ({
dispatch
}) => next => action => {
const {
type
} = action;
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'startConversation',
type: 'event',
value: {
text: "hello"
}
}
});
return next(action);
}
if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
const activity = action.payload.activity;
let resourceUri;
if (activity.from && activity.from.role === 'bot' &&
(resourceUri = getOAuthCardResourceUri(activity))) {
exchangeTokenAsync(resourceUri).then(function(token) {
if (token) {
directLine.postActivity({
type: 'invoke',
name: 'signin/tokenExchange',
value: {
id: activity.attachments[0].content.tokenExchangeResource.id,
connectionName: activity.attachments[0].content.connectionName,
token,
},
"from": {
id: userID,
name: clientApplication.account.name,
role: "user"
}
}).subscribe(
id => {
if (id === 'retry') {
// The agent was not able to handle the invoke, so display the oauthCard
return next(action);
}
// else: tokenexchange successful and we do not display the oauthCard
},
error => {
// an error occurred to display the oauthCard
return next(action);
}
);
return;
} else
return next(action);
});
} else
return next(action);
} else
return next(action);
});
const styleOptions = {
// Add styleOptions to customize Web Chat canvas
hideUploadButton: true
};
window.WebChat.renderWebChat({
directLine: directLine,
store,
userID: userID,
styleOptions
},
document.getElementById('webchat')
);
})().catch(err => console.error("An error occurred: " + err));
</script>
קוד דוגמה מלא
תוכל למצוא את הקוד לדוגמה המלא, כאשר קובצי ה-Script המותנים של MSAL ושל המאגר כבר כלולים, במאגר GitHub של Copilot Studio Samples.
תוכן קשור