다음을 통해 공유


퍼블릭 프로젝트에 대한 확장 개발

Azure DevOps Services

Azure DevOps Services는 프라이빗 및 퍼블릭 프로젝트를 모두 지원합니다. 프라이빗 프로젝트는 명시적 권한이 있는 인증된 사용자에 대한 액세스를 제한합니다. 공용 프로젝트를 사용하면 비회원 사용자가 읽기 전용 상태로 프로젝트 콘텐츠를 볼 수 있습니다.

멤버가 아닌 사용자는 다음 중 하나일 수 있습니다.

  • 익명: Azure DevOps Services에 인증되지 않음
  • 공용: Azure DevOps Services에 인증되었지만 조직의 구성원이 아님

비회원 사용자는 인증된 사용자와 동일한 보기를 볼 수 있지만 Azure DevOps는 설정, 작업 및 빌드 큐 작업과 같은 비공용 기능을 숨기거나 사용하지 않도록 설정합니다.

중요합니다

공용 프로젝트 허용 정책이 이미 활성화된 조직만 프로젝트를 만들거나 프로젝트의 표시 여부를 공개로 변경할 수 있습니다. 정책을 사용하지 않는 조직에서는 이 정책을 더 이상 사용할 수 없습니다. Microsoft는 모든 공용 프로젝트 요구 사항에 대해 GitHub 를 사용하는 것이 좋습니다.

비회원 사용자에게 확장을 표시할지 여부를 결정합니다.

확장 개발자는 비회원 사용자가 확장의 전부 또는 일부를 사용할 수 있도록 할 수 있습니다. 이러한 사용자는 퍼블릭 프로젝트 내에서만 확장을 사용할 수 있습니다. 비회원 사용자가 확장을 사용할 수 없도록 선택하는 경우 변경이 필요하지 않으며, 이 결정은 퍼블릭 프로젝트 내에서 확장을 사용하는 멤버에게 영향을 주지 않습니다.

이 검사 목록을 사용하여 비회원 사용자가 확장을 사용할 수 있도록 할지 여부를 결정할 수 있습니다.

  • 확장은 비회원 사용자와 관련된 데이터를 제공합니다.
  • 확장은 프로젝트 수준에서 기능을 제공합니다.
  • 확장은 비회원 사용자가 액세스할 수 있는 제품 영역에 기여합니다.
  • 확장은 확장 데이터 서비스 또는 특정 Azure DevOps Services REST API와 같이 멤버가 아닌 사용자가 액세스할 수 없는 기능을 확장하거나 사용하지 않습니다. 자세한 내용은 제한 사항 섹션을 참조하세요 .

기여 가시성 설정

기본적으로 Azure DevOps는 조직 구성원에 대한 기여만 표시합니다. 비회원 사용자에게 기여에 대한 가시성을 제공하려면 해당 기여에 restrictedTo 대한 특성을 설정합니다. 이 값은 기여를 확인해야 하는 사용자 형식을 나열하는 문자열 배열입니다. 가능한 값은 다음과 같습니다.

  • member: 조직의 구성원인 인증된 사용자
  • public: 조직의 구성원이 아닌 인증된 사용자
  • anonymous: 인증되지 않은 사용자

익명, 공용 및 멤버 사용자에게 허브를 표시하도록 설정

{
    "contributions": [
        {
            "id": "my-hub",
            "type": "ms.vss-web.hub",
            "targets": [
                "ms.vss-code-web.code-hub-group"
            ],
            "restrictedTo": [
                "member",
                "public",
                "anonymous"
            ],
            "properties": {
                ...            
            }
        }
    ]
}

확장 매니페스트의 루트에서 restrictedTo 속성을 설정하여 모든 기여의 기본 가시성을 지정할 수도 있습니다. 그런 다음 개별 기여에 대해 이 기본값을 재정의할 수 있습니다.

한 개를 제외한 모든 기여를 모든 사용자가 볼 수 있도록 합니다.

{
    "id:": "my-extension",
    "name": "My Extension",
    "version": "1.0.0",
    ...
    "restrictedTo": [
           "anonymous",
           "public",
           "member"
    ],
    "contributions": [
        {
            "id": "my-member-only-widget",
            "type": "ms.vss-dashboards-web.widget",
            "restrictedTo": [
                "member"
            ],
            "properties": {
                ...
            }
        },
        {
            "id": "my-hub",
            "type": "ms.vss-web.hub",
            "targets": [
                "ms.vss-code-web.code-hub-group"
            ],
            "properties": {  
                ...              
            }
        },
        {
            "id": "my-second-hub",
            "type": "ms.vss-web.hub",
            "targets": [
                "ms.vss-work-web.work-hub-group"
            ],
            "properties": {  
                ...              
            }
        }            
    ]
}

비회원 사용자에 대한 제한 사항 이해

기여의 일부 또는 모든 측면을 공용 사용자가 사용할 수 있도록 하려면 다음 제한 사항을 고려하세요.

VSS SDK 메서드 제한

VSS.SDK.js핵심 SDK 스크립트를 사용하면 웹 확장이 부모 프레임과 통신하여 통신 초기화 및 현재 사용자 컨텍스트 정보 가져오기와 같은 작업을 수행할 수 있습니다. 다음 VSS SDK 메서드는 비회원 사용자를 지원하지 않습니다.

  • VSS.getAccessToken()
  • VSS.getAppToken()

확장 데이터 서비스 제한 사항

확장 데이터 서비스는 프로젝트의 범위가 지정되거나 보호되지 않은 데이터를 관리하므로 비회원 사용자는 어떤 유형의 확장 데이터도 읽거나 쓸 수 없습니다.

데이터 액세스 오류 처리

호출하는 사용자의 권한 제한으로 인해 데이터 서비스가 데이터에 액세스할 수 없는 경우 호출 getValue 에서 반환된 약속이 거부됩니다. reject 함수에 전달된 오류에는 호출이 데이터를 읽거나 쓰지 못한 이유를 이해하는 데 도움이 되는 이름 속성이 있습니다.

VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) {
    dataService.getValue("someKey").then(function(value) {
         // Process the value
    }, function(error) {
       if (error.name === "AccessCheckException") {
           alert(error.message);
       }
    });
});

REST API 액세스

Azure DevOps Services는 비회원 사용자에게 제한된 REST API 집합을 제공합니다. 이러한 API에는 멤버가 아닌 사용자가 일반적으로 액세스할 수 있는 기능에 대한 대부분의 조직 수준 및 프로젝트 수준 API가 포함됩니다. 비회원 사용자가 확장을 사용할 수 있도록 할지 여부를 결정할 때 이 정보를 고려합니다.

Azure DevOps는 버전 5.0부터 비회원 사용자가 특정 API를 사용할 수 있도록 하므로 버전 5.0 이상 API를 사용하는 것이 좋습니다.

ID 참조

대부분의 Azure DevOps Services REST API는 일반적인 "계약"을 사용하여 사용자 또는 그룹을 나타냅니다. 이메일 주소와 같은 멤버 정보를 보호하기 위해 Azure DevOps는 익명 또는 공용 사용자가 REST API를 호출할 때와 같은 uniqueName특정 필드를 생략합니다.

사용자 권한을 확인

사용 권한을 통해 확장의 기능을 나타낼지 활성화할지를 결정하십시오. 웹 확장 코드의 보안 REST API를 사용하여 현재 사용자가 Azure DevOps Services에서 작업을 완료할 수 있는 권한이 있는지 확인합니다. 이 방법을 사용하면 사용자가 무언가를 할 수 있는 권한이 있다고 생각하지 않고, 그렇지 않은 것을 발견할 수 있습니다.

사용자가 빌드를 큐에 대기할 수 있는 권한이 있는지 확인

이 예제에서는 Security REST 클라이언트를 사용하여 사용자에게 현재 프로젝트에서 빌드를 큐에 추가할 수 있는 권한이 있는지 확인하는 방법을 보여 줍니다. 기본적으로 비회원 사용자에게는 이 권한이 없습니다.

VSS.require(["VSS/Service", "VSS/security/RestClient"], function(VSS_Service, Security_RestClient) {
   var client = VSS_Service.getCollectionClient(Security_RestClient.SecurityHttpClient3);
 
   var securityToken = VSS.getWebContext().project.id;
 
   client.hasPermissionsBatch({
    evaluations: [
       {
           "securityNamespaceId": "33344D9C-FC72-4d6f-ABA5-FA317101A7E9",
           "token": securityToken,
           "permissions": 128 /* queue builds */
       }
    ],
    alwaysAllowAdministrators: true
}
).then(function(response) {
     console.log("Can user queue builds in this project? " + response.evaluations[0].value);
  });
});

대시보드 위젯 요구 사항 고려

다른 유형의 기여와 restrictedTo 마찬가지로 기여 속성은 대시보드 위젯 기여의 가시성을 제어합니다. 예를 들어 비회원 사용자와 멤버 사용자 모두에게 위젯을 표시하려면 다음을 수행합니다.

{
  "contributions": [
    {
      "id": "HelloWorldWidget",
      "type": "ms.vss-dashboards-web.widget",
      "targets": [
        "ms.vss-dashboards-web.widget-catalog"
      ],
      "restrictedTo": [
        "member",
        "public",
        "anonymous"
      ],
      "properties": {
          ...
      }
    }
  ]
}

위젯 설정 구성

비회원 사용자에 대한 위젯 표시 유형을 제어하는 경우 대시보드 프레임워크는 위젯 설정에 대한 선택적 개방형 스토리지 메커니즘도 제공합니다. 두 메커니즘은 퍼블릭 프로젝트에서 멤버가 아닌 사용자가 위젯 설정을 사용할 수 있는지 여부를 나타냅니다.

비회원 사용자에게 표시되는 구성 가능한 설정이 있는 위젯은 다음 패턴 중 하나를 따라 야 합니다 . 이러한 패턴을 따르지 않으면 위젯이 이러한 사용자에게 표시되지 않습니다.

패턴 1: 위젯은 해당 인스턴스가 프로젝트별 설정만 저장한다고 선언합니다.

위젯 기여의 canStoreCrossProjectSettings 속성을 false프로젝트별 위젯 설정으로 설정합니다.

{
    "id:": "HelloWorldWidget",
    "type": "ms.vss-dashboards-web.widget",
    ...
    "properties": {
        "canStoreCrossProjectSettings": false
    }
}

패턴 2: 위젯 인스턴스는 해당 설정이 프로젝트별로 지정됨을 선언합니다.

개별 위젯 인스턴스는 해당 설정이 프로젝트별 설정이며 비회원 사용자가 사용할 수 있음을 나타낼 수도 있습니다. 설정을 저장할 때, 위젯은 JSON 문자열 내에 hasCrossProjectSettingsfalse로 설정해야 합니다.

{
    "hasCrossProjectSettings": false,
    "hypotheticalWidgetOption": true,
    "backlogLevel": "Stories"
}

빌드 및 릴리스 요구 사항 고려

확장이 빌드 또는 릴리스 작업에 기여하는 경우 공용 프로젝트의 파이프라인에서 해당 작업을 사용하도록 변경할 필요가 없습니다.

작업 항목 추적 시 고려사항 관리

확장은 변경 없이 퍼블릭 프로젝트의 컨텍스트에서 멤버가 아닌 사용자에게는 작동하지 않습니다. 여기에는 작업 항목 양식, 기타 작업 항목 환경 및 REST API를 추적하는 작업 항목과의 상호 작용이 포함됩니다.

작업 항목 양식 제한 사항

Azure DevOps는 멤버가 아닌 사용자에 대한 모든 작업 항목 업데이트 또는 삭제에 실패합니다.

ID 처리

Azure DevOps Services REST API 버전 5.0 이상에서 서비스는 ID를 문자열 대신 개체로 IdentityRef 반환합니다. 앞에서 설명한 대로 비회원 사용자가 API를 호출하는 경우 Azure DevOps는 이러한 개체와 같은 uniqueName특정 필드를 반환하지 않습니다.

API 범위 제한

확장은 현재 사용자가 조직 구성원이 아닌 경우 프로젝트 범위 REST API만 호출할 수 있습니다. Azure DevOps는 프로젝트로 범위가 지정되지 않은 REST API 호출을 거부합니다.

쿼리 제한 사항

비회원 사용자는 작업 항목 쿼리와 관련된 다음과 같은 제한 사항에 직면합니다.

  • 멤버가 아닌 사용자는 ID 또는 경로로만 알려진 쿼리를 실행할 수 있습니다.
  • 쿼리의 범위는 현재 프로젝트로 지정해야 합니다. Azure DevOps는 현재 프로젝트에 속하지 않는 작업 항목을 제외합니다.
  • 멤버가 아닌 사용자는 새 쿼리를 만들거나 WIQL 쿼리를 실행할 수 없습니다.