Single Sign-OnSingle sign on

적용 대상: SDK v4APPLIES TO: SDK v4

SSO(Single Sign-On)를 사용하면 가상 도우미, WebChat 등과 같은 클라이언트에서 사용자를 대신하여 봇 또는 기술과 통신할 수 있습니다.Single Sign on (SSO) allows a client, such as virtual assistant, WebChat and so on, to communicate with a bot or skill on behalf of the user. 현재 Azure AD v2 ID 공급자만 지원됩니다.Currently, only the Azure AD v2 identity provider is supported.

SSO가 적용되는 시나리오는 다음과 같습니다.SSO applies to the following scenarios:

  • 가상 도우미 및 하나 이상의 기술 봇.Virtual assistant and one or more skill bots. 사용자는 가상 도우미에 한 번 로그인할 수 있습니다.The user can sign in once into the virtual assistant. 그런 다음, 도우미에서 사용자를 대신하여 여러 기술을 적용합니다.The assistant then invokes multiple skills on behalf of the user. 가상 도우미도 참조하세요.See also Virtual assistant.
  • 웹 사이트에 포함된 WebChat.Webchat embedded into a website. 사용자가 웹 사이트에 로그인합니다.The user sign in the website. 그런 다음, 웹 사이트에서 사용자를 대신하여 봇 또는 기술을 호출합니다.The website then invokes a bot or a skill on behalf of the user.

SSO에서 제공하는 이점은 다음과 같습니다.SSO provides the following advantages:

  • 가상 도우미 또는 웹 사이트에서 이미 로그인한 경우 사용자가 다시 로그인할 필요가 없습니다.The user does not have to login over again, if already signed in a virtual assistant or website.
  • 가상 도우미 또는 웹 사이트에서 사용자 권한을 인식할 필요가 없습니다.The virtual assistant or website do not have knowledge of user permissions.

참고

SSO는 Bot Framework SDK v4.8의 새로운 기능입니다.SSO is a new feature in Bot Framework SDK v4.8.

SSO 구성 요소 상호 작용SSO components interaction

다음 시간 시퀀스 다이어그램에서는 SSO 다양한 구성 요소 간의 상호 작용을 보여 줍니다.The following time sequence diagrams show the interactions between the SSO various components.

  • 다음 다이어그램에서는 가상 도우미 클라이언트를 사용하는 경우의 일반적인 흐름을 보여 줍니다.The following diagram shows a normal flow when using a virtual assistant client.

    봇 SSO 가상 도우미

  • 다음은 WebChat 클라이언트를 사용하는 경우의 일반 및 대체 흐름을 보여 줍니다.The following shows a normal and a fallback flow when using a WebChat client.

    봇 SSO WebChat

    오류가 발생하는 경우 SSO는 OAuth 카드를 표시하는 기존 동작으로 대체합니다.In the case of failure, SSO falls back to the existing behavior of showing the OAuth card. 예를 들어 사용자 동의가 필요하거나 토큰 교환이 실패하면 오류가 발생할 수 있습니다.The failure may be caused for example if the user consent is required or if the token exchange fails.

흐름을 분석해 보겠습니다.Let's analyze the flow.

  1. 클라이언트에서 OAuth 시나리오를 트리거하는 봇을 통해 대화를 시작합니다.The client starts a conversation with the bot triggering an OAuth scenario.

  2. 봇에서 OAuth 카드를 클라이언트에 보냅니다.The bot sends back an OAuth Card to the client.

  3. 클라이언트에서 OAuth 카드를 사용자에게 표시하기 전에 해당 카드를 가로채서 TokenExchangeResource 속성이 포함되어 있는지 확인합니다.The client intercepts the OAuth card before displaying it to the user and checks if it contains a TokenExchangeResource property.

  4. 이 속성이 있으면 클라이언트에서 TokenExchangeInvokeRequest를 봇에 보냅니다.If the property exisists, the client sends a TokenExchangeInvokeRequest to the bot. 클라이언트에는 사용자에 대한 교환 가능한 토큰이 있어야 합니다. 이 토큰은 Azure AD v2 토큰이어야 하고, 해당 대상이 TokenExchangeResource.Uri 속성과 동일해야 합니다.The client must have an exchangeable token for the user, which must be an Azure AD v2 token and whose audience must be the same as TokenExchangeResource.Uri property. 클라이언트에서 아래에 표시된 본문을 사용하여 호출 작업을 봇에 보냅니다.The client sends an Invoke activity to the bot with the body shown below.

    {
        "type": "Invoke",
        "name": "signin/tokenExchange",
        "value": {
            "id": "<any unique Id>",
            "connectionName": "<connection Name on the skill bot (from the OAuth Card)>",
            "token": "<exchangeable token>"
        }
    }
    
  5. 봇에서 TokenExchangeInvokeRequest를 처리하고 TokenExchangeInvokeResponse를 클라이언트에 다시 반환합니다.The bot processes the TokenExchangeInvokeRequest and returns a TokenExchangeInvokeResponse back to the client. 클라이언트에서 TokenExchangeInvokeResponse를 받을 때까지 기다려야 합니다.The client should wait till it receives the TokenExchangeInvokeResponse.

    {
        "status": "<response code>",
        "body": {
            "id":"<unique Id>",
            "connectionName": "<connection Name on the skill bot (from the OAuth Card)>",
            "failureDetail": "<failure reason if status code is not 200, null otherwise>"
        }
    }
    
  6. status200TokenExchangeInvokeResponse가 있으면 클라이언트에서 OAuth 카드를 표시하지 않습니다.If the TokenExchangeInvokeResponse has a status of 200, then the client does not show the OAuth card. 일반 흐름 다이어그램을 참조하세요.See the normal flow diagram. 다른 status의 경우 또는 TokenExchangeInvokeResponse가 수신되지 않으면 클라이언트에서 사용자에게 OAuth 카드를 표시합니다.For any other status or if the TokenExchangeInvokeResponse is not received, then the client shows the OAuth card to the user. 대체 흐름 다이어그램을 참조하세요.See the fallback flow diagram. 이렇게 하면 사용자 동의와 같이 오류 또는 충족되지 않는 종속성이 있는 경우 SSO 흐름이 일반 OAuthCard 흐름으로 대체됩니다.This ensures that the SSO flow falls back to normal OAuthCard flow, in case of any errors or unmet dependencies like user consent.

다음 단계Next steps