사용자 인증User authentication

적용 대상: SDK v4APPLIES TO: SDK v4

경우에 따라 봇이 사용자를 대신 하 여 보안 된 온라인 리소스에 액세스 해야 합니다 (예: 전자 메일 확인, 비행 상태 확인 또는 주문 배치).At times a bot must access secured online resources on behalf of the user, such as checking email, checking on flight status, or placing an order. 사용자가 자신을 대신 하 여이를 수행 하도록 봇에 권한을 부여 해야 합니다. 봇에 권한을 부여 하려면 사용자가 자신의 id를 인증 해야 합니다.The user must authorize the bot to do so on their behalf, and in order to authorize the bot, the user must authenticate their identity. OAuth 는 사용자를 인증 하 고 봇에 권한을 부여 하는 데 사용 됩니다.OAuth is used to authenticate the user and authorize the bot. 인증 유형도 참조 하세요.See also Authentication types.

OAuth 기술 정보를 새로 고치려면 다음을 참조하세요.If you want to refresh your OAuth knowledge, see the following:

대화에서 사용자 인증User authentication in a conversation

사용자 대신 이메일 확인, 캘린더 참조, 항공편 상태 확인 또는 주문하기와 같은 특정 작업을 수행하기 위해, 봇은 Microsoft Graph, GitHub 또는 회사의 REST 서비스와 같은 외부 서비스를 호출해야 합니다.To perform certain operations on behalf of a user, such as checking email, referencing a calendar, checking on flight status, or placing an order, the bot will need to call an external service, such as the Microsoft Graph, GitHub, or a company's REST service. 각 외부 서비스에는 이러한 호출을 보호하는 방법이 있습니다.Each external service has a way of securing those calls. 이러한 요청을 실행하는 일반적인 방법은 해당 외부 서비스에서 사용자를 고유하게 식별하는 사용자 토큰(때로는 JWT(JSON Web Token)라고도 함)을 사용하는 것입니다.A common way to issue those requests is to use a user token that uniquely identifies the user on that external service (sometimes referred to as a JSON Web Token (JWT)).

외부 서비스에 대한 호출을 보호하기 위해 봇은 서비스에 대한 사용자의 토큰을 얻을 수 있도록 사용자에게 로그인을 요청해야 합니다.To secure the call to an external service, the bot must ask the user to sign-in, so it can acquire the user's token for that service. 많은 서비스에서 OAuth 또는 OAuth2 프로토콜을 통해 토큰을 검색하도록 지원합니다.Many services support token retrieval via the OAuth or OAuth2 protocol.

Azure Bot Service는 OAuth 프로토콜을 사용하고 토큰 수명 주기를 관리하는 특수 로그인 카드와 서비스를 제공합니다.The Azure Bot Service provides specialized sign-in cards and services that work with the OAuth protocol and manage the token life-cycle. 봇은 이러한 기능을 사용하여 사용자 토큰을 가져올 수 있습니다.A bot can use these features to acquire a user token.

  • 봇 구성의 일환으로 OAuth 연결 이 Azure의 Azure Bot Service 리소스 내에 등록됩니다.As part of bot configuration, an OAuth connection is registered within the Azure Bot Service resource in Azure.

    연결에는 유효한 OAuth 클라이언트 ID 및 비밀, 사용하도록 설정할 OAuth 범위 및 해당 ID 공급자에 필요한 기타 연결 메타데이터와 함께 사용할 ID 공급자 에 대한 정보가 포함되어 있습니다.The connection contains information about the identity provider to use, along with a valid OAuth client ID and secret, the OAuth scopes to enable, and any other connection metadata required by that identity provider.

  • 봇의 코드에서 OAuth 연결은 사용자 로그인 및 사용자 토큰 가져오기를 지원하는 데 사용됩니다.In the bot's code, the OAuth connection is used to help sign-in the user and get the user token.

다음 이미지에서는 인증 프로세스와 관련된 요소를 보여 줍니다.The following image shows the elements involved in the authentication process.

봇 인증 구성 요소

봇 프레임워크 토큰 서비스 정보About the Bot Framework Token Service

봇 프레임워크 토큰 서비스는 다음 사항을 처리합니다.The Bot Framework Token Service is responsible for:

  • 다양한 외부 서비스에 OAuth 프로토콜을 사용할 수 있도록 합니다.Facilitating the use of the OAuth protocol with a wide variety of external services.
  • 특정 봇, 채널, 대화 및 사용자에 대한 토큰을 안전하게 저장할 수 있도록 합니다.Securely storing tokens for a particular bot, channel, conversation, and user.
  • 사용자 토큰을 가져옵니다.Acquiring user tokens.

    봇에 만료된 사용자 토큰이 있으면 봇에서 다음을 수행해야 합니다.If the bot has an expired user token, the bot should:

    • 사용자 로그아웃Log the user out
    • 로그인 흐름 다시 시작Initiate the sign in flow again

예를 들어 Microsoft Graph API를 사용하여 사용자의 최근 이메일을 확인할 수 있는 봇에는 ID 공급자(이 경우 Azure Active Directory)의 사용자 토큰이 필요합니다.For example, a bot that can check a user's recent emails, using the Microsoft Graph API, requires a user token from an Identity Provider, in this case Azure Active Directory. 봇 개발자는 디자인 타임에서 다음 두 가지 중요한 단계를 수행합니다.At design time, the bot developer performs these two important steps:

  1. Azure Portal을 통해 ID 공급자인 Azure Active Directory 애플리케이션을 봇 프레임워크 토큰 서비스에 등록합니다.Registers an Azure Active Directory application, an Identity Provider, with the Bot Framework Token Service, via the Azure Portal.
  2. 봇에 대한 OAuth 연결(예: GraphConnection)을 구성합니다.Configures an OAuth connection (named for example GraphConnection) for the bot.

다음 그림에서는 Microsoft Graph 서비스를 사용하여 이메일을 요청할 때 사용자가 봇과 상호 작용하는 시간 시퀀스를 보여 줍니다.The following picture shows the time sequence of the user's interaction with a bot when an email request is made using the Microsoft Graph service.

봇 인증 시간 시퀀스

  1. 사용자가 봇에 이메일을 요청합니다.The user makes an email request to the bot.

  2. 이 메시지가 포함된 작업이 사용자로부터 봇 프레임워크 채널 서비스로 전송됩니다.An activity with this message is sent from the user to the Bot Framework channel service. 채널 서비스는 작업 내 userid 필드가 설정되고 메시지가 봇에 전송되도록 합니다.The channel service ensures that the userid field within the activity has been set and the message is sent to the bot.

    참고

    사용자 ID는 Facebook ID 또는 SMS 전화 번호와 같이 채널에 따라 다릅니다.User ID's are channel specific, such as the user's Facebook ID or their SMS phone number.

  3. 봇에서 OAuth 연결(GraphConnection)의 UserId에 대한 토큰이 이미 있는지를 묻는 요청을 봇 프레임워크 토큰 서비스에 보냅니다.The bot makes a request to the Bot Framework Token Service asking if it already has a token for the UserId for the OAuth connection GraphConnection.

  4. 사용자가 봇과 상호 작용하는 것은 이번이 처음이라서 이 사용자에 대한 토큰이 봇 프레임워크 토큰 서비스에 아직 없기 때문에 봇에 NotFound 결과가 반환됩니다.Since this is the first time this user has interacted with the bot, the Bot Framework Token Service does not yet have a token for this user, and returns a NotFound result to the bot.

    참고

    토큰이 있으면 인증 단계를 건너뛰고 봇에서 저장된 토큰을 사용하여 이메일을 요청할 수 있습니다.If the token is found, the authentication steps are skipped and the bot can make the email request using the stored token.

  5. 봇에서 연결 이름이 GraphConnection인 OAuthCard를 만들고, 이 카드를 사용하여 로그인을 요청하는 사용자에게 회신합니다.The bot creates an OAuthCard with a connection name of GraphConnection and replies to the user asking to sign-in using this card.

  6. 작업이 봇 프레임워크 토큰 서비스를 통해 전달되고 봇 프레임워크 토큰 서비스를 호출하여 이 요청에 대해 유효한 OAuth 로그인 URL을 만듭니다.The activity passes through the Bot Framework Channel Service, which calls into the Bot Framework Token Service to create a valid OAuth sign-in URL for this request. 로그인 URL이 OAuthCard에 추가되고 카드가 사용자에게 반환됩니다.This sign-in URL is added to the OAuthCard and the card is returned to the user.

  7. OAuthCard의 로그인 단추를 클릭하여 로그인하라는 메시지가 사용자에게 표시됩니다.The user is presented with a message to sign-in by clicking on the OAuthCard's sign-in button.

  8. 사용자가 로그인 단추를 클릭하면 채널 서비스가 웹 브라우저를 열고 외부 서비스로 호출하여 로그인 페이지를 로드합니다.When the user clicks the sign-in button, the channel service opens a web browser and calls out to the external service to load its sign-in page.

  9. 외부 서비스에 대한 페이지에 사용자가 로그인합니다.The user signs-in to this page for the external service. 그런 다음, 외부 서비스에서 봇 프레임워크 토큰 서비스와의 OAuth 프로토콜 교환을 완료하여 사용자 토큰을 봇 프레임워크 토큰 서비스에 보냅니다.Then the external service completes the OAuth protocol exchange with the Bot Framework Token Service, resulting in the external service sending the Bot Framework Token Service the user token. 봇 프레임워크 토큰 서비스는 이 토큰을 안전하게 저장하고 봇에 이 토큰과 함께 작업을 보냅니다.The Bot Framework Token Service securely stores this token and sends an activity to the bot with this token.

  10. 봇에서 토큰을 사용하여 작업을 받고, 이를 통해 MS Graph API에 대한 호출을 수행할 수 있습니다.The bot receives the activity with the token and is able to use it to make calls against the MS Graph API.

로그인 URL 보안 설정Securing the sign-in URL

봇 프레임워크가 사용자 로그인을 지원할 때 중요하게 고려할 사항은 로그인 URL을 보호하는 방법입니다.An important consideration when the Bot Framework facilitates a user login is how to secure the sign-in URL. 사용자에게 로그인 URL이 제공될 때, 이 URL은 해당 봇의 사용자 ID 및 특정 대화 ID와 연결됩니다.When a user is presented with a sign-in URL, this URL is associated with a specific conversation ID and user ID for that bot. 이 URL은 공유하면 안 됩니다. 그러면 특정 봇 대화에 대해 잘못된 로그인을 발생시킬 수 있기 때문입니다.This URL should not be shared, as it would cause the wrong sign-in to occur for a particular bot conversation. 로그인 URL 공유와 관련된 보안 공격을 완화하기 위해서는, 로그인 URL을 클릭하는 사람과 머신이 대화 창을 소유(own)하는 사람인지 확인해야 합니다.To mitigate security attacks regarding sharing the sign-in URL, it is necessary to ensure that the machine and person who clicks on the sign-in URL is the person who owns the conversation window.

Microsoft 팀, Direct Line 및 WebChat와 같은 일부 채널은 사용자가 모르게이 작업을 수행할 수 있습니다.Some channels such as Microsoft Teams, Direct Line, and WebChat are able to do this without the user noticing. 예를 들어 WebChat은 세션 쿠키를 사용하여 로그인 흐름이 WebChat 대화와 동일한 브라우저에서 수행되는지 확인합니다.For example, WebChat uses session cookies to ensure that the sign-in flow took place in the same browser as the WebChat conversation. 하지만 다른 채널의 경우 사용자에게 6자리의 매직 코드(magic code)가 표시되는 경우가 많습니다.However, for other channels the user is often presented with a 6-digit magic code. 이것은 기본 제공되는 다단계 인증과 유사합니다. 로그인한 사람이 6자로 코드를 입력하여 채팅 환경에 액세스할 수 있다는 것을 증명하는 최종 인증을 사용자가 완료하지 않으면 봇 프레임워크 토큰 서비스가 봇에 토큰을 공개하지 않기 때문입니다.This is similar to a built-in multi-factor authentication, as the Bot Framework Token Service will not release the token to the bot unless the user finishes the final authentication, proving that the person who signed-in has access to the chat experience by entering the 6-digit code.

중요

중요한 보안 고려 사항을 염두에 두십시오.Please, keep in mind these important Security considerations. 추가 정보는 Azure Bot Service 인증을 통해 WebChat 사용 블로그 게시물에서 확인할 수 있습니다.You can find additional information in this blog post: Using WebChat with Azure Bot Service Authentication.

다음 단계Next steps

사용자 인증에 대해 배웠으므로 이제 봇에 적용 하는 방법을 살펴보겠습니다.Now that you know about user authentication, let's take a look at how to apply that to your bot.

참고 항목See also