본문 바로가기
프로그래밍/AI

Chat Plugins - plugin authentication

by 사악신 2024. 1. 12.

플러그인은 다양한 사용 사례를 수용할 수 있도록 여러 인증 스키마를 제공합니다. 플러그인의 인증 스키마를 지정하려면 매니페스트 파일을 사용하세요. 우리의 플러그인 도메인 정책은 도메인 보안 문제를 해결하기 위한 전략을 개요합니다. 사용 가능한 인증 옵션의 예시는 예시 섹션을 참조하세요. 여기에는 모든 다양한 선택 사항을 설명하였습니다.

ai-plugin.json 파일은 인증 스키마를 설정해야 합니다. 인증을 사용하지 않기로 선택하더라도 "auth": { "type": "none" }을 명시하는 것이 필요합니다.

서비스, 사용자 또는 OAuth 인증을 사용하려면 원격 서버를 설정해야 합니다.

 

Service level

개발자가 자신의 플러그인 사용 방식을 제어할 수 있으면서도 사용자에게 부담을 주지 않는 방식으로, 서비스 레벨 인증을 추천합니다.

 

OpenAI 플러그인이 여러분의 API와 작동하도록 특별히 설정하고 싶다면, 플러그인 설치 흐름 중에 클라이언트 시크릿을 제공할 수 있습니다. 이는 OpenAI 플러그인에서 오는 모든 트래픽이 인증되지만 사용자 수준에서는 아니라는 의미입니다. 이 흐름은 간단한 최종 사용자 경험의 이점이 있지만 API 관점에서는 제어력이 덜합니다.

  • 시작하려면, ChatGPT 플러그인 스토어에서 "자신의 플러그인 개발"을 선택하고 플러그인이 호스팅되는 도메인을 입력하세요.
  • ai-plugin.json에서, auth.type을 "service_http"으로 설정하세요. 우리의 서비스 레벨 인증 예시에서 보여준 것처럼 말입니다.
  • 서비스 액세스 토큰에 대한 프롬프트가 표시됩니다. 이는 코드에서 지정한 문자열입니다.
    • 플러그인 설치를 추가 인증 없이 가능하게 하기 위해 서비스 액세스 토큰의 암호화된 복사본을 안전하게 저장합니다.
    • 서비스 액세스 토큰은 플러그인 요청의 Authorization 헤더에 전송됩니다.
  • ChatGPT UI에 서비스 액세스 토큰을 추가하면 검증 토큰이 제시됩니다.
  • 아래와 같이 검증 토큰을 ai-plugin.json 파일의 auth 섹션에 추가하세요.
"auth": {
  "type": "service_http",
  "authorization_type": "bearer",
  "verification_tokens": {
    "openai": "Replace_this_string_with_the_verification_token_generated_in_the_ChatGPT_UI"
  }
},

 

검증 토큰은 여러 애플리케이션을 지원하기 위해 설계되었습니다. 플러그인이 지원하길 원하는 추가 애플리케이션을 간단히 추가할 수 있습니다:

"verification_tokens": {
    "openai": "Replace_this_string_with_the_verification_token_generated_in_the_ChatGPT_UI",
    "other_service": "abc123"
  }

 

OAuth

플러그인 프로토콜은 OAuth와 호환됩니다. 우리가 기대하는 OAuth 흐름의 간단한 예시는 다음과 같이 보일 수 있습니다:

  • 시작하기 위해, ChatGPT 플러그인 스토어에서 "Develop your own plugin"을 선택하고 플러그인이 호스팅되는 도메인을 입력합니다.
  • ai-plugin.json에서, auth.type을 "oauth"로 설정합니다. 우리의 OAuth 예시에서 보여준 것처럼 말입니다.
  • 그런 다음 OAuth 클라이언트 ID와 클라이언트 시크릿을 입력하라는 프롬프트가 표시됩니다.
  • 클라이언트 ID와 시크릿은 간단한 텍스트 문자열일 수 있지만 OAuth 모범 사례를 따라야 합니다.
  • 클라이언트 시크릿의 암호화된 버전을 저장하며, 클라이언트 ID는 최종 사용자에게 공개됩니다.
  • ChatGPT UI에 클라이언트 ID와 클라이언트 시크릿을 추가하면 검증 토큰이 제시됩니다.
  • 검증 토큰을 ai-plugin.json 파일의 auth 섹션에 추가합니다. 아래와 같이 말입니다.
  • OAuth 요청은 다음 정보를 포함합니다:
    request={'grant_type': 'authorization_code', 'client_id': '개발자가 설정한 id', 'client_secret': '개발자가 설정한 secret', 'code': 'abc123', 'redirect_uri': 'https://chat.openai.com/aip/plugin-some_plugin_id/oauth/callback'}
  • OAuth를 사용하여 플러그인을 사용하려면 플러그인을 설치한 다음 ChatGPT UI에서 "Sign in with" 버튼이 표시됩니다.
  • authorization_url 엔드포인트는 다음과 같은 응답을 반환해야 합니다:
    { "access_token": "example_token", "token_type": "bearer", "refresh_token": "example_token", "expires_in": 59 }
  • 사용자 로그인 과정 중에, ChatGPT는 지정된 authorization_content_type을 사용하여 귀하의 authorization_url에 요청을 하며, 접근 토큰과 선택적으로 새로운 접근 토큰을 주기적으로 가져오기 위해 사용하는 갱신 토큰을 반환받기를 기대합니다.
  • 사용자가 플러그인에 요청을 할 때마다, 사용자의 토큰이 Authorization 헤더에 전달됩니다:
    (“Authorization”: “[Bearer/Basic][user’s token]”).
보안상의 이유로 OAuth 애플리케이션은 state 파라미터를 사용해야 합니다.

 

아래는 ai-plugin.json 파일 내의 OAuth 구성이 어떻게 보일 수 있는지에 대한 예시입니다:

 

"auth": {
  "type": "oauth",
  "client_url": "https://example.com/authorize",
  "scope": "",
  "authorization_url": "https://example.com/auth/",
  "authorization_content_type": "application/json",
  "verification_tokens": {
    "openai": "Replace_this_string_with_the_verification_token_generated_in_the_ChatGPT_UI"
  }
},

 

OAuth URL 구조를 더 잘 이해하기 위해, 필드에 대한 간단한 설명입니다:

  • ChatGPT와 함께 플러그인을 설정할 때, OAuth client_id와 client_secret을 제공하라는 요청을 받게 됩니다.
  • 사용자가 플러그인에 로그인할 때, ChatGPT는 사용자의 브라우저를 "[client_url]?response_type=code&client_id=[client_id]&scope=[scope]&state=xyz123&redirect_uri=https%3A%2F%2Fchat.openai.com%2Faip%2F[plugin_id]%2Foauth%2Fcallback"으로 이동시킵니다.
  • plugin_id는 OAuth 엔드포인트로의 요청을 통해 전달됩니다 (현재 ChatGPT UI에서는 보이지 않지만, 미래에는 보일 수 있음). OAuth 엔드포인트에서 요청을 검사하여 plugin_id를 확인할 수 있습니다. redirect_uri로 리디렉션할 때 state가 전달되어야 합니다. 초기 state와 일치하지 않거나 만료된 경우, 인증 흐름은 실패합니다.
  • 플러그인이 주어진 redirect_uri로 리디렉션한 후, ChatGPT는 authorization_url로 POST 요청을 하여 OAuth 흐름을 완료합니다. 이때 content type은 authorization_content_type이고, 파라미터는 { “grant_type”: “authorization_code”, “client_id”: [client_id], “client_secret”: [client_secret], “code”: [리디렉트와 함께 반환된 코드], “redirect_uri”: [이전과 동일한 리디렉트 uri] }입니다.

 

No authentication

"인증 없음(no authentication)" 사용은 권장하지 않으며, 대신 "서비스 인증(service authentication)" 사용을 고려해야 합니다.

 

인증이 필요하지 않은 애플리케이션을 위해 인증 없는 흐름을 지원합니다. 여기서 사용자는 제한 없이 직접 API로 요청을 보낼 수 있습니다. 이는 공개 API를 모든 사람에게 제공하고 싶을 때 특히 유용하며, OpenAI 플러그인 요청 외의 다른 출처로부터의 트래픽을 허용합니다.

 

"auth": {
  "type": "none"
},

 

User level

현재 UI 제한으로 인해 "사용자 인증(user authentication)"이 있는 플러그인은 플러그인 스토어에 허용되지 않고 있습니다. 이는 미래에 변경될 수 있습니다.

 

사용자가 이미 여러분의 API를 사용하고 있는 것처럼, 우리는 최종 사용자가 플러그인 설치 중에 ChatGPT UI에 자신의 비밀 API 키를 복사하여 붙여넣음으로써 사용자 수준 인증을 허용합니다. 비밀 키를 데이터베이스에 저장할 때 암호화하지만, 사용자 경험이 좋지 않은 점을 고려할 때 이 방법을 권장하지는 않습니다.

  • 사용자는 플러그인을 설치할 때 접근 토큰을 붙여넣습니다.
  • 우리는 토큰의 암호화된 버전을 저장합니다.
  • 그런 다음 플러그인에 요청을 할 때 Authorization 헤더에 토큰을 전달합니다 (“Authorization”: “[Bearer/Basic][user’s token]”).

 

"auth": {
  "type": "user_http",
  "authorization_type": "bearer",
},
반응형

'프로그래밍 > AI' 카테고리의 다른 글

Stable Diffusion webui 설치하기 - Rocky Linux 9  (0) 2024.04.30
Chat Plugins - productionizing your plugin  (0) 2024.01.12
Chat Plugins - Example  (0) 2024.01.12
Chat Plugins - Get started  (0) 2024.01.12
Chat Plugins  (2) 2024.01.11

댓글