Aracılığıyla paylaş


Bota çoklu oturum açma ekleme

ŞUNLAR IÇIN GEÇERLIDIR: SDK v4

Bu makalede, botta çoklu oturum açma (SSO) özelliğinin nasıl kullanılacağı gösterilmektedir. Bunu yapmak için, bu özellik bir beceri veya alt botla etkileşime geçmek için kök veya üst bot olarak da bilinen bir tüketici botu kullanır. Bu makalede kök bot ve beceri botu terimleri kullanılır.

SSO desteği eklerseniz, bir kullanıcı kimlik sağlayıcısı kullanarak kök botta oturum açabilir ve denetim bir beceriye geçtiğinde yeniden oturum açması gerekmez.

Kök ve beceri botları, her biri ayrı belleğe ve duruma sahip, farklı olabilecek sunucularda çalışan ayrı botlardır. Beceriler hakkında daha fazla bilgi için bkz . Becerilere genel bakış ve Beceri uygulama. Kullanıcı kimlik doğrulaması hakkında daha fazla bilgi için bkz . Bot Framework kimlik doğrulaması temel bilgileri, Kullanıcı kimlik doğrulaması ve Bota kimlik doğrulaması ekleme.

Önemli

azure yapay zeka Bot Hizmeti kimlik doğrulamayı Web Sohbeti kullanırken dikkat etmeniz gereken bazı önemli güvenlik konuları vardır. Daha fazla bilgi için REST kimlik doğrulaması makalesindeki güvenlik konuları bölümüne bakın.

Ön koşullar

Örnek hakkında

Bu makalede iki bota başvuruda bulunur: RootBot ve SkillBot. RootBot etkinlikleri SkillBot'a iletir. Bu tipik beceri senaryolarını modelliyorlar:

  • Kök bot bir veya daha fazla beceri botu çağırır.
  • Hem kök hem de beceri botları, Bota kimlik doğrulaması ekleme makalesinde açıklanan temel kimlik doğrulamasını uygular.
  • Kullanıcı kök botta oturum açar.
  • SSO nedeniyle ve kök botta zaten oturum açtıklarından, kullanıcı etkileşimi gerekmeden beceri botuna kaydedilirler.

Bot Framework'ün kimlik doğrulamasını nasıl işlediğine genel bakış için bkz . Kullanıcı kimlik doğrulaması. SSO arka plan bilgileri için bkz . Çoklu oturum açma.

RootBot, SSO'yi destekler. Kullanıcının _SkillBot yeniden kimlik doğrulaması gerekmeden kullanıcı adına SkillBot ile iletişim kurar.

Örnekteki her proje için aşağıdakilere ihtiyacınız vardır:

  1. Bot kaynağını Azure'a kaydetmek için bir Microsoft Entra ID uygulaması.
  2. Kimlik doğrulaması için bir Microsoft Entra ID kimlik sağlayıcısı uygulaması.

    Dekont

    Şu anda yalnızca Microsoft Entra ID kimlik sağlayıcısı desteklenmektedir.

Azure RootBot kaynağını oluşturma

  1. için RootBotAzure portalında bir Azure bot kaynağı oluşturun. Azure bot kaynağı oluşturma başlığında açıklanan adımları izleyin.
  2. Bot kayıt uygulaması kimliğini ve istemci gizli dizisini kopyalayıp kaydedin.

RootBot için Microsoft Entra Id kimliğini oluşturma

Microsoft Entra Id, OAuth2.0 gibi endüstri standardı protokolleri kullanarak kullanıcılarda güvenli bir şekilde oturum açabilen uygulamalar oluşturmanıza olanak tanıyan bir bulut kimliği hizmetidir.

  1. Kullanıcının kimliğini doğrulamak için RootBot Microsoft Entra Id kullanan için bir kimlik uygulaması oluşturun. Microsoft Entra Id kimlik sağlayıcısı oluşturma başlığında açıklanan adımları izleyin.

  2. Sol bölmede Bildirim'i seçin.

  3. 2 olarak ayarlayın accessTokenAcceptedVersion .

  4. Kaydet'i seçin.

  5. Sol bölmede API'yi kullanıma sunma'yı seçin.

  6. Sağ bölmede Kapsam ekle'yi seçin.

  7. En sağda Kapsam ekle bölümünde Kaydet ve devam et'i seçin.

  8. Görüntülenen pencerede, Kim onaylayabilir? bölümünde Yönetici'ler ve kullanıcılar'ı seçin.

  9. Kalan gerekli bilgileri girin.

  10. Kapsam ekle'yi seçin.

  11. Kapsam değerini kopyalayın ve kaydedin.

RootBot için OAuth bağlantı ayarı oluşturma

  1. Bot kaydında RootBot bir Microsoft Entra Id bağlantısı oluşturun ve Microsoft Entra Id'de açıklandığı gibi değerleri ve aşağıda açıklanan değeri girin.

  2. Belirteç Değişimi URL'sini boş bırakın.

  3. Kapsamlar kutusuna önceki adımlarda kaydettiğiniz kapsam değerini girinRootBot.

    Dekont

    Kapsamlar , kullanıcının kök botta başlangıçta oturum açtığı URL'yi içerirken belirteç değişimi URL'si boş bırakılır.

    Örnek olarak, kök bot appid'sinin rootAppId ve beceri botu appid'sinin skillAppId olduğunu varsayalım. Kök bot kapsamları, kullanıcının oturumunu açmak için kullanılan api://rootAppId/customScope gibi görünür. Bu kök bot kapsamları daha sonra SSO sırasında api://skillAppId/customscope ile değiştirilir.

  4. Bağlantının adını kopyalayın ve kaydedin.

Azure SkillBot kaynağını oluşturma

  1. için SkillBotAzure portalında bir Azure bot kaynağı oluşturun. Azure bot kaynağı oluşturma başlığında açıklanan adımları izleyin.
  2. Bot kayıt uygulaması kimliğini ve istemci gizli dizisini kopyalayıp kaydedin.

SkillBot için Microsoft Entra Id kimliğini oluşturma

Microsoft Entra Id, OAuth2.0 gibi endüstri standardı protokolleri kullanarak kullanıcılarda güvenli bir şekilde oturum açabilen uygulamalar oluşturmanıza olanak tanıyan bir bulut kimliği hizmetidir.

  1. Bot kimliğini SkillBot doğrulamak için Microsoft Entra Id kullanan için bir kimlik uygulaması oluşturun. Microsoft Entra Id kimlik sağlayıcısı oluşturma başlığında açıklanan adımları izleyin.

  2. Sol bölmede Bildirim'i seçin.

  3. 2 olarak ayarlayın accessTokenAcceptedVersion .

  4. Kaydet'i seçin.

  5. Sol bölmede API'yi kullanıma sunma'yı seçin.

  6. Sağ bölmede Kapsam ekle'yi seçin.

  7. En sağdan Kapsam ekle bölümünde Kaydet ve devam et'i seçin.

  8. Görüntülenen pencerede, Kim onay verebilir? bölümünde Yönetici ve kullanıcıları seçin.

  9. Kalan gerekli bilgileri girin.

  10. Kapsam ekle'yi seçin.

  11. Kapsam değerini kopyalayın ve kaydedin.

  12. İstemci uygulaması ekle'yi seçin. En sağdaki bölümdeki İstemci Kimliği kutusuna daha önce kaydettiğiniz RootBot kimlik uygulaması kimliğini girin. Kayıt uygulaması kimliğini değil RootBot kimliğini kullandığınızdan emin olun.

    Dekont

    İstemci uygulamaları için Azure AI Bot Hizmeti, Microsoft Entra ID B2C kimlik sağlayıcısıyla çoklu çoklu kullanımı desteklemez.

  13. Yetkili kapsam'ın altında kapsam değerine göre kutuyu işaretleyin.

  14. Uygulama ekle'yi seçin.

  15. Sol taraftaki gezinti bölmesinde API izinleri'ni seçin. Uygulama için API izinlerini açıkça ayarlamak en iyi yöntemdir.

    1. Sağ bölmede İzin ekle'yi seçin.

    2. Microsoft API'leri ve ardından Microsoft Graph'ı seçin.

    3. Temsilci izinleri'ni seçin ve ihtiyacınız olan izinlerin seçili olduğundan emin olun. Bu örnek, aşağıda listelenen izinleri gerektirir.

      Dekont

      YÖNETİÇİ ONAYI GEREKLİ olarak işaretlenen tüm izinler için hem kullanıcının hem de kiracı yöneticisinin oturum açması gerekir.

      • Openıd
      • Profil
      • User.Read
      • User.ReadBasic.All
    4. İzinler ekle'yi seçin.

SkillBot için OAuth bağlantı ayarı oluşturma

  1. Bot kaydında SkillBot bir Microsoft Entra Id bağlantısı oluşturun ve Microsoft Entra Id'de açıklandığı gibi değerleri ve aşağıda açıklanan değerleri girin.

  2. Belirteç Değişimi URL'si kutusuna, önceki adımlarda kaydettiğiniz kapsam değerini girinSkillBot.

  3. Kapsamlar kutusuna, boşlukla ayrılmış olarak aşağıdaki değerleri girin:User.ReadBasic.AllUser.Readprofileopenid .

  4. Bağlantının adını kopyalayıp bir dosyaya kaydedin.

Bağlantıyı test edin

  1. Oluşturduğunuz bağlantıyı açmak için bağlantı girdisini seçin.
  2. Hizmet Sağlayıcısı Bağlan ion Ayarı bölmesinin üst kısmındaki Test Bağlan ion'ı seçin.
  3. İlk kez bu, uygulamanızın istediği izinleri listeleyen yeni bir tarayıcı sekmesi açmalı ve sizden kabul etmenizi istemelidir.
  4. Kabul Et’i seçin.
  5. Bu işlem daha sonra sizi bağlantınızın-adı> Başarılı sayfasına bir Test Bağlan ion'a <yönlendirmelidir.

Daha fazla bilgi için bkz. Geliştiriciler için Microsoft Entra Id (v1.0) genel bakışı ve Microsoft kimlik platformu (v2.0) genel bakış. v1 ve v2 uç noktaları arasındaki farklar hakkında bilgi için bkz. Neden Microsoft kimlik platformu 'a (v2.0) güncelleştirilsin?. Tam bilgi için bkz. Microsoft kimlik platformu (eski adıyla Geliştiriciler için Microsoft Entra Id).

Örnek kodunu hazırlama

Aşağıda açıklandığı gibi her iki örnekte de dosyayı güncelleştirmeniz appsettings.json gerekir.

  1. GitHub deposundan Basit Beceri Tüketicisi ve Beceri örneğiyle SSO'yu kopyalayın.

  2. SkillBot Proje appsettings.json dosyasını açın. Kaydedilen dosyadan aşağıdaki değerleri atayın:

    {
        "MicrosoftAppId": "<SkillBot registration app ID>",
        "MicrosoftAppPassword": "<SkillBot registration password>",
        "ConnectionName": "<SkillBot connection name>",
        "AllowedCallers": [ "<RootBot registration app ID>" ]
    }
    
    
  3. RootBot Proje appsettings.json dosyasını açın. Kaydedilen dosyadan aşağıdaki değerleri atayın:

    {
        "MicrosoftAppId": "<RootBot registration app ID>",
        "MicrosoftAppPassword": "<RootBot registration password>",
        "ConnectionName": "<RootBot connection name>",
        "SkillHostEndpoint": "http://localhost:3978/api/skills/",
        "BotFrameworkSkills": [
                {
                "Id": "SkillBot",
                "AppId": "<SkillBot registration app ID>",
                "SkillEndpoint": "http://localhost:39783/api/messages"
                }
            ]
    }
    

Örnekleri test edin

Test için aşağıdakileri kullanın:

  • RootBot Komut

    • login kullanıcının kullanarak Microsoft Entra Id kaydında oturum açmasına RootBotizin verir. Oturum açıldıktan sonra SSO, oturum açma SkillBot işlemini de Kullanıcının yeniden oturum açması gerekmez.
    • token kullanıcının belirtecini görüntüler.
    • logout kullanıcının oturumunu günlüğe RootBotkaydeder.
  • SkillBot Komut

    • skill loginRootBot kullanıcı adına oturum açmasına SkillBotizin verir. SSO başarısız olmadığı sürece, kullanıcıya zaten oturum açmışsa bir oturum açma kartı gösterilmez.
    • skill token , kullanıcının belirtecini SkillBotöğesinden görüntüler.
    • skill logout kullanıcının oturumunu SkillBot

Dekont

Kullanıcılar bir beceri üzerinde SSO'yı ilk kez denediklerinde, oturum açmaları için bir OAuth kartı sunulabilir. Bunun nedeni, becerinin Microsoft Entra ID uygulamasına henüz onay vermemiş olmalarıdır. Bunu önlemek için Microsoft Entra ID uygulaması tarafından istenen tüm grafik izinleri için yönetici onayı verebilirler.

Henüz yapmadıysanız Bot Framework Öykünücüsü'ni yükleyin. Ayrıca bkz. Öykünücü ile hata ayıklama.

Bot örneği oturum açma bilgilerinin çalışması için Öykünücü'yü yapılandırmanız gerekir. Aşağıdaki adımları kullanın: Öykünücüyü kimlik doğrulaması için yapılandırma bölümünde gösterildiği gibi.

Kimlik doğrulama mekanizmasını yapılandırdıktan sonra gerçek bot örnek testini gerçekleştirebilirsiniz.

  1. Visual Studio'da çözümü açın SSOWithSkills.sln ve birden çok işlemle hata ayıklamaya başlamak için yapılandırın.

  2. Makinenizde yerel olarak hata ayıklamaya başlayın. RootBot Proje appsettings.json dosyasında aşağıdaki ayarların olduğuna dikkat edin:

    "SkillHostEndpoint": "http://localhost:3978/api/skills/"
    "SkillEndpoint": "http://localhost:39783/api/messages"
    

    Dekont

    Bu ayarlar, hem hem de RootBotSkillBot yerel makinede çalışmakta olduğunu gösterir. Öykünücü 3978 numaralı bağlantı noktasıyla RootBot iletişim kurar ve RootBot 39783 numaralı bağlantı noktasında ile SkillBot iletişim kurar. Hata ayıklamaya başlar başlamaz iki varsayılan tarayıcı penceresi açılır. Biri 3978 numaralı bağlantı noktasında, diğeri de 39783 numaralı bağlantı noktasında.

  3. Öykünücüyü başlatın.

  4. Bota bağlandığınızda kayıt uygulaması kimliğinizi ve parolanızı girin RootBot .

  5. Konuşmayı başlatmak için yazın hi .

  6. Oturum açma bilgilerini girin. , RootBot AAD kimlik doğrulamasında oturum açma kartını görüntüler.

    Example of a sign-in card.

  7. Oturum Aç'ı seçin. Açılan iletişim kutusu Aç URL'sinin görüntülendiğini onaylayın.

    Screenshot of the 'open URL' confirmation message.

  8. Onayla'yı seçin. Oturumunuz açılır ve RootBot belirteç görüntülenir.

  9. Belirteci yeniden görüntülemek için belirteci girin.

    Example of a message displaying the root token.

    Artık ile SkillBotiletişim kurmaya hazırsınız. kullanarak RootBototurum açtıktan sonra, oturumu kapatana kadar kimlik bilgilerinizi yeniden sağlamanız gerekmez. Bu, SSO'nun çalıştığını gösterir.

  10. Öykünücü kutusuna beceri oturum açma bilgilerini girin. Yeniden oturum açmanız istenmeyecek. Bunun yerine SkillBot belirteci görüntülenir.

  11. Belirteci yeniden görüntülemek için beceri belirteci girin.

  12. Artık oturumu kapatmak SkillBotiçin beceri oturumu kapatabilirsiniz. Ardından oturumu kapatmak için SimpleRootBoototurumu kapatın.

Ek bilgiler

Aşağıdaki zaman dizisi diyagramı makalede kullanılan örnekler için geçerlidir ve ilgili çeşitli bileşenler arasındaki etkileşimi gösterir. ABS, Azure AI Bot Hizmeti anlamına gelir.

Sequence diagram illustrating the skill token flow.

  1. İlk kez, kullanıcı RootBot için komutunu girerlogin.
  2. RootBot, kullanıcının oturum açmasını isteyen bir OAuthCard gönderir.
  3. Kullanıcı, ABS'ye gönderilen kimlik doğrulama kimlik bilgilerini girer (Azure AI Bot Hizmeti).
  4. ABS, kullanıcının kimlik bilgilerine göre oluşturulan kimlik doğrulama belirtecini RootBot'a gönderir.
  5. RootBot, kullanıcının görmesi için kök belirteci görüntüler.
  6. Kullanıcı SkillBot için komutunu girerskill login.
  7. SkillBot, RootBot'a bir OAuthCard gönderir.
  8. RootBot, ABS'den değiştirilebilir bir belirteç ister.
  9. SSO, SkillBotbeceri belirtecini RootBot'a gönderir.
  10. RootBot, kullanıcının görmesi için beceri belirtecini görüntüler. Beceri belirtecinin kullanıcının SKillBot'ta oturum açmasına gerek kalmadan oluşturulduğuna dikkat edin. Bunun nedeni SSO'dur.

Aşağıdaki örnekte belirteç değişiminin nasıl gerçekleştiği gösterilmektedir. Kod TokenExchangeSkillHandler.cs dosyasından alınmıştı.

private async Task<bool> InterceptOAuthCards(ClaimsIdentity claimsIdentity, Activity activity)
{
    var oauthCardAttachment = activity.Attachments?.FirstOrDefault(a => a?.ContentType == OAuthCard.ContentType);
    if (oauthCardAttachment != null)
    {
        var targetSkill = GetCallingSkill(claimsIdentity);
        if (targetSkill != null)
        {
            var oauthCard = ((JObject)oauthCardAttachment.Content).ToObject<OAuthCard>();

            if (!string.IsNullOrWhiteSpace(oauthCard?.TokenExchangeResource?.Uri))
            {
                using (var context = new TurnContext(_adapter, activity))
                {
                    context.TurnState.Add<IIdentity>("BotIdentity", claimsIdentity);

                    // AAD token exchange
                    try
                    {
                        var result = await _tokenExchangeProvider.ExchangeTokenAsync(
                            context,
                            _connectionName,
                            activity.Recipient.Id,
                            new TokenExchangeRequest() { Uri = oauthCard.TokenExchangeResource.Uri }).ConfigureAwait(false);

                        if (!string.IsNullOrEmpty(result?.Token))
                        {
                            // If token above is null, then SSO has failed and hence we return false.
                            // If not, send an invoke to the skill with the token. 
                            return await SendTokenExchangeInvokeToSkill(activity, oauthCard.TokenExchangeResource.Id, result.Token, oauthCard.ConnectionName, targetSkill, default).ConfigureAwait(false);
                        }
                    }
                    catch
                    {
                        // Show oauth card if token exchange fails.
                        return false;
                    }

                    return false;
                }
            }
        }
    }
    return false;
}