Bot Framework 인증 문제 해결

적용 대상: SDK v4

이 가이드는 일련의 시나리오를 평가하여 문제가 있는 위치를 확인하여 봇의 인증 문제를 해결하는 데 도움이 될 수 있습니다.

참고 항목

이 가이드의 모든 단계를 완료하려면 Bot Framework 에뮬레이터를 다운로드하여 사용해야 하며 Azure Portal에서 봇의 등록 설정에 액세스할 수 있어야 합니다.

앱 ID 및 암호

봇 보안은 Bot Framework에 봇을 등록할 때 가져오는 Microsoft 앱 IDMicrosoft 앱 암호 로 구성됩니다. 일반적으로 이러한 값은 봇의 구성 파일 내에서 지정되고 Microsoft 계정 서비스에서 액세스 토큰을 검색하는 데 사용됩니다.

아직 수행 하지 않은 경우 봇을 Azure 에 배포하여 인증에 사용할 수 있는 Microsoft 앱 IDMicrosoft 앱 암호를 가져옵니다.

참고 항목

이미 배포된 봇에 대한 봇의 AppIDAppPassword를 찾으려면 MicrosoftAppID 및 MicrosoftAppPassword를 참조하세요.

1단계: localhost에서 보안 및 테스트 사용 안 함

이 단계에서는 보안이 비활성화된 경우 localhost에서 봇에 액세스하고 작동하는지 확인합니다.

Warning

봇에 대한 보안을 사용하지 않도록 설정하면 알 수 없는 공격자가 사용자를 가장할 수 있습니다. 보호된 디버깅 환경에서 작업하는 경우에만 다음 절차를 구현합니다.

보안 사용 안 함

봇에 대한 보안을 사용하지 않도록 설정하려면 구성 설정을 편집하여 앱 ID 및 암호 값을 제거합니다.

.NET용 Bot Framework SDK를 사용하는 경우 appsettings.json 파일에서 설정을 추가하거나 편집합니다.

"MicrosoftAppId": "",
"MicrosoftAppPassword": ""

localhost에서 봇 테스트

그런 다음, Bot Framework Emulator를 사용하여 localhost에서 봇을 테스트합니다.

  1. localhost에서 봇을 시작합니다.
  2. Bot Framework 에뮬레이터를 시작합니다.
  3. 에뮬레이터를 사용하여 봇에 커넥트.
    • 에뮬레이터의 주소 표시줄에 입력 http://localhost:port-number/api/messages 합니다. 여기서 포트 번호 는 애플리케이션이 실행 중인 브라우저에 표시된 포트 번호와 일치합니다.
    • Microsoft 앱 IDMicrosoft 앱 암호 필드가 모두 비어 있는지 확인합니다.
    • 연결을 클릭합니다.
  4. 봇에 대한 연결을 테스트하려면 에뮬레이터에 텍스트를 입력하고 Enter 키를 누릅니다.

봇이 입력에 응답하고 채팅 창에 오류가 없는 경우 보안이 비활성화된 경우 localhost에서 봇에 액세스할 수 있고 작동하는지 확인했습니다. 2단계로 진행합니다.

채팅 창에 하나 이상의 오류가 표시되면 자세한 내용을 보려면 오류를 클릭합니다. 일반적인 문제는 다음과 같습니다.

  • 에뮬레이터 설정은 봇에 대한 잘못된 엔드포인트를 지정합니다. URL에 적절한 포트 번호와 URL 끝에 적절한 경로(예: /api/messages.)를 포함했는지 확인합니다.
  • 에뮬레이터 설정은 .로 시작하는 봇 엔드포인트를 지정합니다 https. localhost에서 엔드포인트는 .로 http시작해야 합니다.
  • 에뮬레이터 설정은 Microsoft 앱 ID 필드 및/또는 Microsoft 앱 암호 필드의 값을 지정합니다. 두 필드 모두 비어 있어야 합니다.
  • 봇에 대한 보안을 사용하지 않도록 설정하지 않았습니다. 봇이 앱 ID 또는 암호에 대한 값을 지정하지 않는지 확인 합니다.

2단계: 봇의 앱 ID 및 암호 확인

이 단계에서는 봇이 인증에 사용할 앱 ID와 암호가 유효한지 확인합니다. (이러한 값을 모르는 경우 지금 가져옵니다 .)

Warning

다음 지침은 login.microsoftonline.com에 대한 SSL 확인을 사용하지 않도록 설정합니다. 보안 네트워크에서만 이 절차를 수행하고 나중에 애플리케이션의 암호를 변경하는 것이 좋습니다.

Microsoft 로그인 서비스에 대한 HTTP 요청 발급

이러한 지침은 cURL을 사용하여 Microsoft 로그인 서비스에 대한 HTTP 요청을 실행하는 방법을 설명합니다. Postman과 같은 대체 도구를 사용할 수 있습니다. 요청이 Bot Framework 인증 프로토콜을 따르는지만 확인하세요.

봇의 앱 ID와 암호가 유효한지 확인하려면 cURL을 사용하여 다음 요청을 실행하여 봇의 앱 ID 및 암호를 대체 APP_ID 하고 APP_PASSWORD 사용합니다.

암호에 다음 호출이 유효하지 않은 특수 문자가 포함될 수 있습니다. 그렇다면 암호를 URL 인코딩으로 변환해 보세요.

curl -k -X POST https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token -d "grant_type=client_credentials&client_id=APP_ID&client_secret=APP_PASSWORD&scope=https%3A%2F%2Fapi.botframework.com%2F.default"

이 요청의 목적은 액세스 토큰에 대한 봇의 앱 ID 및 암호를 교환하는 것입니다. 요청이 성공하면 속성이 포함된 access_token JSON 페이로드가 수신됩니다.

{"token_type":"Bearer","expires_in":3599,"ext_expires_in":0,"access_token":"eyJ0eXAJKV1Q..."}

요청이 성공하면 요청에 지정한 앱 ID와 암호가 유효한지 확인했습니다. 3단계로 진행 합니다.

요청에 대한 응답으로 오류가 발생하는 경우 응답을 검사하여 오류의 원인을 확인합니다. 응답에 앱 ID 또는 암호가 잘못 되었음을 나타내는 경우 Bot Framework 포털에서 올바른 값을 가져오고 요청을 새 값으로 다시 실행하여 유효한지 확인합니다.

3단계: localhost에서 보안 및 테스트 사용

이 시점에서 보안이 비활성화된 경우 localhost에서 봇에 액세스하고 작동할 수 있는지 확인하고 봇이 인증에 사용할 앱 ID 및 암호가 유효한지 확인했습니다. 이 단계에서는 보안이 사용하도록 설정된 경우 localhost에서 봇에 액세스하고 작동하는지 확인합니다.

보안 사용

봇이 localhost에서만 실행되는 경우에도 봇의 보안은 Microsoft 서비스 사용합니다. 봇에 대한 보안을 사용하도록 설정하려면 구성 설정을 편집하여 앱 ID 및 암호를 2단계에서 확인한 값으로 채웁니다. 또한 패키지가 최신 상태인지, 특히 System.IdentityModel.Tokens.JwtMicrosoft.IdentityModel.Tokens최신 상태인지 확인합니다.

.NET용 Bot Framework SDK를 사용하는 경우 파일의 사용자 appsettings.config 또는 해당 값에 appsettings.json 다음 설정을 채웁니다.

<appSettings>
  <add key="MicrosoftAppId" value="APP_ID" />
  <add key="MicrosoftAppPassword" value="PASSWORD" />
</appSettings>

Node.js용 Bot Framework SDK를 사용 중인 경우 다음 설정을 채우거나 해당 환경 변수를 업데이트합니다.

var connector = new builder.ChatConnector({
  appId: 'APP_ID',
  appPassword: 'PASSWORD'
});

참고 항목

봇의 AppIDAppPassword를 찾으려면 MicrosoftAppID 및 MicrosoftAppPassword를 참조하세요.

localhost에서 봇 테스트

그런 다음, Bot Framework Emulator를 사용하여 localhost에서 봇을 테스트합니다.

  1. localhost에서 봇을 시작합니다.
  2. Bot Framework 에뮬레이터를 시작합니다.
  3. 에뮬레이터를 사용하여 봇에 커넥트.
    • 에뮬레이터의 주소 표시줄에 입력 http://localhost:port-number/api/messages 합니다. 여기서 포트 번호 는 애플리케이션이 실행 중인 브라우저에 표시된 포트 번호와 일치합니다.
    • Microsoft 앱 ID 필드에 봇의 앱 ID입력합니다.
    • Microsoft 앱 암호 필드에 봇의 암호를 입력합니다.
    • 연결을 클릭합니다.
  4. 봇에 대한 연결을 테스트하려면 에뮬레이터에 텍스트를 입력하고 Enter 키를 누릅니다.

봇이 입력에 응답하고 채팅 창에 오류가 없는 경우 보안이 설정된 경우 localhost에서 봇에 액세스하고 작동하는지 확인했습니다. 4단계로 진행 합니다.

채팅 창에 하나 이상의 오류가 표시되면 자세한 내용을 보려면 오류를 클릭합니다. 일반적인 문제는 다음과 같습니다.

  • 에뮬레이터 설정은 봇에 대한 잘못된 엔드포인트를 지정합니다. URL에 적절한 포트 번호와 URL 끝에 적절한 경로(예: /api/messages.)를 포함했는지 확인합니다.
  • 에뮬레이터 설정은 .로 시작하는 봇 엔드포인트를 지정합니다 https. localhost에서 엔드포인트는 .로 http시작해야 합니다.
  • 에뮬레이터 설정 에서 Microsoft 앱 ID 필드 및/또는 Microsoft 앱 암호 는 유효한 값을 포함하지 않습니다. 두 필드를 모두 채워야 하며 각 필드에는 2단계에서 확인한 해당 값이 포함되어야 합니다.
  • 봇에 대한 보안이 활성화되지 않았습니다. 봇 구성 설정이 앱 ID 및 암호의 값을 둘 다 지정하는지 확인합니다.

4단계: 클라우드에서 봇 테스트

이 시점에서 보안이 비활성화된 경우 localhost에서 봇에 액세스할 수 있고 작동되는지 확인하고, 봇의 앱 ID와 암호가 유효한지 확인하고, 보안이 사용하도록 설정된 경우 localhost에서 봇에 액세스하고 작동하는지 확인했습니다. 이 단계에서는 클라우드에 봇을 배포하고 보안이 설정된 봇이 액세스할 수 있고 작동하는지 확인합니다.

클라우드에 봇 배포

Bot Framework를 사용하려면 인터넷에서 봇에 액세스할 수 있어야 하므로 Azure와 같은 클라우드 호스팅 플랫폼에 봇을 배포해야 합니다. 3단계에서 설명한 대로 배포 전에 봇에 대한 보안을 사용하도록 설정해야 합니다.

참고 항목

클라우드 호스팅 공급자가 아직 없는 경우 체험 계정에 등록할 수 있습니다.

Azure에 봇을 배포하는 경우 애플리케이션에 대해 SSL이 자동으로 구성되므로 Bot Framework에 필요한 HTTPS 엔드포인트가 활성화됩니다. 다른 클라우드 호스팅 공급자에 배포하는 경우 봇에 HTTPS 엔드포인트가 있도록 애플리케이션이 SSL용으로 구성되어 있는지 확인해야 합니다.

봇 테스트

보안을 사용하도록 설정된 클라우드에서 봇을 테스트하려면 다음 단계를 완료합니다.

  1. 봇이 성공적으로 배포되고 실행 중인지 확인합니다.
  2. Azure Portal에 로그인합니다.
  3. 포털 내에서 봇에 대한 Azure Bot 리소스로 이동합니다.
  4. 왼쪽의 봇 관리 창에서 웹 채팅 테스트를 클릭합니다.
  5. 봇에 대한 연결을 테스트하려면 웹 채팅 컨트롤에 텍스트를 입력하고 Enter 키를 누릅니다.

채팅 창에 오류가 표시되면 오류 메시지를 사용하여 오류의 원인을 확인합니다. 일반적인 문제는 다음과 같습니다.

  • Bot Framework Portal에서 봇의 설정 페이지에 지정된 메시징 엔드포인트가 잘못되었습니다. URL의 끝에 적절한 경로(예: /api/messages.)를 포함했는지 확인합니다.
  • Bot Framework 포털의 봇에 대한 설정 페이지에 지정된 메시징 엔드포인트는 Bot Framework에서 https 시작하지 않거나 신뢰할 수 없습니다. 봇에는 유효한 체인에서 신뢰할 수 있는 인증서가 있어야 합니다.
  • 봇은 앱 ID 또는 암호에 대한 누락되거나 잘못된 값으로 구성됩니다. 봇 구성 설정이 앱 ID 및 암호에 유효한 값을 지정했는지 확인 합니다.

봇이 입력에 적절하게 응답하는 경우 보안이 설정된 클라우드에서 봇에 액세스할 수 있고 작동하는지 확인했습니다. 이 시점에서 봇은 Facebook Messenger, Direct Line 등과 같은 채널에 안전하게 연결할 준비가 되었습니다.

추가 리소스

위의 단계를 완료한 후에도 여전히 문제가 발생하는 경우 다음을 수행할 수 있습니다.