Informacje o logowaniu jednokrotnym
DOTYCZY: ZESTAW SDK w wersji 4
Logowanie jednokrotne (SSO) umożliwia udostępnianie zasobów w niezależnych aplikacjach. Na przykład użytkownik może zalogować się do usługi w botze głównym, a bot główny może udostępnić token dostępu botowi umiejętności. Obecnie obsługiwany jest tylko dostawca tożsamości Entra ID firmy Microsoft.
Logowanie jednokrotne ma zastosowanie do następujących scenariuszy:
- Bot główny i co najmniej jeden bot umiejętności. Użytkownik loguje się z bota głównego. Następnie bot wywołuje wiele umiejętności w imieniu użytkownika.
- Kontrolka czat internetowy osadzona w witrynie internetowej. Użytkownik loguje się z witryny internetowej. Następnie witryna internetowa wywołuje bota lub umiejętności w imieniu użytkownika.
Logowanie jednokrotne zapewnia następujące korzyści:
- Użytkownik nie musi się logować wiele razy.
- Główny bot lub witryna internetowa nie musi znać uprawnień użytkownika.
Uwaga
Logowanie jednokrotne jest dostępne w zestawie Bot Framework SDK w wersji 4.8 lub nowszej.
Interakcja składników logowania jednokrotnego
Poniższe diagramy sekwencji czasu pokazują interakcje między logowaniem jednokrotnym różnych składników.
Na poniższym diagramie przedstawiono przepływ bota głównego.
Na poniższym diagramie przedstawiono przepływ i rezerwowy przepływ dla kontrolki czat internetowy.
Jeśli wymiana tokenów zakończy się niepowodzeniem, powrót to monit użytkownika o zalogowanie się. Takie błędy mogą wystąpić, gdy wymagane są dodatkowe uprawnienia lub token dotyczy niewłaściwej usługi.
Przeanalizujmy przepływ.
Klient rozpoczyna konwersację z botem wyzwalającym scenariusz OAuth.
Bot wysyła z powrotem kartę OAuth do klienta.
Klient przechwytuje kartę OAuth przed wyświetleniem jej użytkownikowi i sprawdza, czy zawiera
TokenExchangeResource
właściwość.Jeśli właściwość istnieje, klient wysyła element
TokenExchangeInvokeRequest
do bota. Klient musi mieć token wymiany dla użytkownika, który musi być tokenem identyfikatora Entra firmy Microsoft i którego odbiorcy muszą być takie same jakTokenExchangeResource.Uri
właściwość. Klient wysyła działanie Invoke do bota z treścią pokazaną poniżej.{ "type": "Invoke", "name": "signin/tokenExchange", "value": { "id": "<any unique ID>", "connectionName": "<connection Name on the skill bot (from the OAuth Card)>", "token": "<exchangeable token>" } }
Bot przetwarza element
TokenExchangeInvokeRequest
i zwraca elementTokenExchangeInvokeResponse
z powrotem do klienta. Klient powinien poczekać, aż otrzyma elementTokenExchangeInvokeResponse
.{ "status": "<response code>", "body": { "id":"<unique ID>", "connectionName": "<connection Name on the skill bot (from the OAuth Card)>", "failureDetail": "<failure reason if status code isn't 200, null otherwise>" } }
Jeśli element
TokenExchangeInvokeResponse
mastatus
wartość200
, klient nie wyświetla karty OAuth. Zobacz diagram normalnego przepływu . W przypadku innychstatus
lub, jeśliTokenExchangeInvokeResponse
element nie został odebrany, klient wyświetli użytkownikowi kartę OAuth. Zobacz diagram przepływu rezerwowego. Dzięki temu przepływ logowania jednokrotnego wraca do normalnego przepływu OAuthCard, jeśli wystąpią błędy lub niezaspokojonych zależności, takich jak zgoda użytkownika.