범위 지정된 API 키 사용

API 키를 사용하면 Discourse를 다른 시스템과 통합하거나 다양한 작업을 자동화할 수 있습니다. 그러나 강력한 기능에는 그에 상응하는 책임이 따릅니다. 악의적인 사용자가 API 키에 접근할 경우 민감한 데이터에 접근하거나 사이트에 변경 사항을 적용할 수 있습니다. 이를 완화하고 추가적인 보안 계층을 제공하기 위해 이제 스코프를 사용하여 API 키가 수행할 수 있는 작업을 제한할 수 있습니다.

스코프 및 허용된 매개변수

새 API 키를 생성할 때 원하는 스코프를 선택할 수 있습니다. :grey_question: 아이콘에 마우스를 올리면 해당 스코프의 간단한 설명을 볼 수 있습니다. :link: 버튼을 클릭하면 해당 스코프와 관련된 URL을 확인할 수 있습니다.

선택적으로 허용되는 매개변수를 지정할 수도 있습니다. 여러 값을 나열할 때는 쉼표(,)를 사용하세요.

기존 키 마이그레이션

이 기능이 추가되었을 때 기존 키는 “글로벌” 키로 전환되었습니다. 이를 스코프로 마이그레이션하려면 키를 철회하고 새로운 키를 생성해야 합니다.

사용자 정의 스코프 추가

플러그인은 add_api_key_scope 메서드를 호출하여 사용자 정의 스코프를 추가할 수 있습니다:

resource는 관련 스코프를 그룹화하는 데 사용되는 심볼이고, action은 다음 속성을 가진 해시입니다:

  • actions: 허용된 컨트롤러 작업을 포함하는 목록입니다. 형식은 controller_name#method_name입니다.
  • methods: 허용할 HTTP 메서드 목록입니다(예: %i[get]). 컨트롤러 작업 대신 HTTP 메서드로 일치시키려면 actions 대신 이 항목을 사용하세요.
  • params: 허용된 매개변수의 이름을 포함하는 목록입니다.
  • aliases: 허용된 매개변수에 대한 다른 이름을 포함하는 해시입니다.

기본 스코프가 어떻게 정의되는지 확인하려면 다음을 참조하세요:

24개의 좋아요

읽기 전용 API 키로 카테고리를 가져올 때 403 응답이 반환되는 것 같습니다.

curl -X GET "https://mysite/categories.json" \
-H "Api-Key: mykey" \
-H "Api-Username: system"

해당 API 키에는 토픽에 대해 read 및 read_list 권한이 있습니다. 예를 들어 /top.json은 동일한 키로 정상적으로 동작합니다. 'Global Key’를 사용하면 해당 엔드포인트가 작동합니다.

카테고리와 토픽 목록을 읽기 위해 API 키를 클라이언트에 포함시키고 싶은데, 읽기 전용 키가 필수입니다!

힌트가 있을까요?

1개의 좋아요

흥미롭게도 자격 증명을 전혀 사용하지 않으면 작동합니다!

k
즉, curl -X GET "https://mysite/categories.json"

1개의 좋아요

사용 가능한 엔드포인트가 매우 많기 때문에 기본적으로 소수의 스코프만 포함됩니다. 향후 새로운 스코프가 추가될 수 있지만, 그 사이에는 필요에 맞게 직접 확장해야 합니다.

스코프가 지정된 API 키를 사용하는 경우, 선택한 스코프에 포함되지 않은 엔드포인트를 호출하면 작동하지 않습니다. 어떤 URL이 허용되는지 확인하려면 :link: 버튼을 클릭할 수 있습니다.

이는 공개 사이트에서만 작동합니다. 또한 로그인되어 충분한 권한이 없는 한 비공개 카테고리 등을 볼 수 없습니다.

6개의 좋아요

추가적인 범위에 대한 제안도 받고 계신가요?

저희 사이트의 API를 활용하고 싶은 것 중 하나는, 다른 사이트에서 이메일 주소로 사용자가 존재하는지 확인한 후, 존재한다면 특정 그룹에 추가하는 기능입니다. 해당 사이트(저희 모회사 산하의 다른 사이트)는 신뢰하지만, 가능하다면 필요한 기능에만 접근 권한을 제한하는 것이 현명하다고 생각합니다.

1개의 좋아요

플러그인을 위한 API를 공개한 것 때문에 정말 기쁩니다. 플러그인으로 시작해서 코어에 통합할 수 있는지 확인해 볼 수 있습니다.

2개의 좋아요

일반적으로 유용하다고 생각할 수 있는 스코프에 대해서는 #pr-welcome라고 생각합니다. 예를 들어 group_membership.edit 같은 것 말입니다.

5개의 좋아요