권한 및 동의에 대해 알아보기

완료됨

Microsoft ID 플랫폼과 통합되는 애플리케이션은 사용자와 관리자가 데이터 액세스 방법을 제어할 수 있는 권한 부여 모델을 따릅니다.

Microsoft ID 플랫폼은 OAuth 2.0 권한 부여 프로토콜을 구현합니다. OAuth 2.0은 사용자 대신 타사 앱에서 웹에 호스트된 리소스에 액세스할 수 있도록 하는 방법입니다. Microsoft ID 플랫폼과 통합되는 웹 호스트팅 리소스에는 리소스 식별자 또는 애플리케이션 ID URI가 있습니다.

Microsoft 웹 호스팅 리소스의 몇 가지 예는 다음과 같습니다.

  • Microsoft Graph: https://graph.microsoft.com
  • Microsoft 365 메일 API: https://outlook.office.com
  • Azure Key Vault: https://vault.azure.net

Microsoft ID 플랫폼과 통합된 타사 리소스의 경우도 마찬가지입니다. 이러한 리소스는 해당 리소스의 기능을 더 작은 청크로 나누는 데 사용할 수 있는 사용 권한 집합을 정의할 수도 있습니다. 리소스 기능이 작은 권한 집합으로 분할되면 기능을 수행하는 데 필요한 권한만 요청하도록 타사 앱을 빌드할 수 있습니다. 사용자 및 관리자는 앱이 어떤 데이터에 액세스할 수 있는지 알 수 있습니다.

OAuth 2.0에서는 이러한 유형의 권한 집합을 범위라고 합니다. 권한이라고 하는 경우도 있습니다. Microsoft ID 플랫폼에서 권한은 문자열 값으로 표시됩니다. 앱은 scope 쿼리 매개 변수에 사용 권한을 지정하여 필요한 권한을 요청합니다. ID 플랫폼은 잘 정의된 여러 OpenID Connect 범위와 리소스 기반 권한(각 권한은 리소스의 식별자 또는 애플리케이션 ID URI에 권한 값을 추가하여 표시됨)을 지원합니다. 예를 들어 권한 문자열 https://graph.microsoft.com/Calendars.Read는 Microsoft Graph에서 사용자 일정을 읽을 수 있는 권한을 요청하는 데 사용됩니다.

앱은 대부분 Microsoft ID 플랫폼 권한 부여 엔드포인트에 대한 요청에서 범위를 지정하여 이러한 사용 권한을 요청합니다. 그러나 일부 높은 수준의 권한은 관리자의 동의를 통해서만 부여할 수 있습니다. 관리자 동의 엔드포인트를 사용하여 요청하거나 부여할 수 있습니다.

참고

Microsoft ID 플랫폼에 대한 권한 부여, 토큰 또는 동의 엔드포인트에 대한 요청에서 리소스 식별자가 범위 매개 변수에서 생략되는 경우 리소스를 Microsoft Graph로 간주됩니다. 예를 들어 scope=User.Readhttps://graph.microsoft.com/User.Read와 같습니다.

사용 권한 유형

Microsoft ID 플랫폼은 위임된 액세스앱 전용 액세스라는 두 가지 형식의 권한을 지원합니다.

  • 위임된 액세스는 로그인한 사용자가 있는 앱에서 사용됩니다. 이러한 앱의 경우 사용자 또는 관리자가 앱이 요청하는 권한에 동의합니다. 이 앱은 대상 리소스를 호출할 때 로그인한 사용자 역할을 할 수 있는 권한을 위임받습니다.

  • 앱 전용 액세스 권한은 로그인한 사용자 없이 실행되는 앱(예: 백그라운드 서비스 또는 디먼으로 실행되는 앱)에서 사용합니다. 관리자만 앱 전용 액세스 권한에 동의할 수 있습니다.

Microsoft ID 플랫폼의 애플리케이션이 필요한 리소스 또는 API에 액세스하려면 동의가 필요합니다. 앱이 성공하기 위해 알아야 할 수 있는 여러 종류의 동의가 있습니다. 권한을 정의하는 경우 사용자가 앱 또는 API에 액세스 권한을 얻는 방법도 이해해야 합니다.

정적 사용자 동의, 증분 사용자 동의와 동적 사용자 동의관리자 동의와 같은 세 가지 동의 유형이 있습니다.

고정적 사용자 동의 시나리오에서 Azure Portal의 앱 구성에 필요한 모든 권한을 지정해야 합니다. 사용자(또는 해당하는 경우 관리자)가 이 앱에 대한 동의를 받지 못한 경우 Microsoft ID 플랫폼은 사용자에게 지금 동의를 제공하라는 메시지를 표시합니다. 또한 정적 사용 권한을 통해 관리자는 조직의 모든 사용자를 대신하여 동의를 얻을 수 있습니다.

Azure Portal에 정의된 앱의 정적 권한은 코드를 멋지고 간단하게 유지했지만, 개발자에게 몇 가지 가능한 문제를 줄 수 있습니다.

  • 사용자가 처음 로그인할 때 앞으로 앱에서 필요로 하게 될 모든 권한을 요청해야 합니다. 이로 인해 권한 목록이 매우 길어서 최종 사용자는 처음 로그인 시 앱의 액세스를 승인하지 않을 수 있습니다.

  • 앱이 액세스할 수도 있는 모든 리소스를 미리 알아야 합니다. 리소스의 임의 개수에 액세스할 수 있는 앱을 만드는 것은 어렵습니다.

Microsoft ID 플랫폼 엔드포인트를 사용하면 Azure Portal의 앱 등록 정보에 정의된 정적 권한을 무시하고, 대신에 권한을 점진적으로 요청할 수 있습니다. 고객이 추가 앱 기능을 사용하기 때문에 사전에는 최소 권한을 요청하고 시간 경과에 따라 더 많은 권한을 요청할 수 있습니다.

이렇게 하려면 애플리케이션 등록 정보에 미리 정의할 필요 없이, 액세스 토큰을 요청할 때 scope 매개 변수에 새 범위를 포함시켜서 언제든지 앱에 필요한 범위를 지정할 수 있습니다. 사용자가 요청에 추가된 새 범위에 아직 동의하지 않은 경우에는 새 권한에만 동의하라는 메시지가 표시됩니다. 증분식 또는 동적 동의는 위임된 권한에만 적용되며 앱 전용 액세스 권한에는 적용되지 않습니다.

중요

동적 동의는 편리할 수 있지만 권한에 대해 관리자 동의가 필요한데 관리자 동의 환경은 동의 시간에 해당 권한에 대해 인식하지 못한다는 큰 문제가 있습니다. 관리자 권한이 필요하거나 앱에 동적 동의가 사용되는 경우에는 Azure Portal에 관리자 동의가 필요한 권한의 하위 집합뿐만 아니라 모든 권한을 등록해야 합니다. 이렇게 하면 테넌트 관리자가 모든 사용자를 대신하여 동의할 수 있습니다.

관리자 동의는 앱이 높은 권한의 특정 사용 권한에 액세스해야 하는 경우 필요합니다. 관리자 동의는 관리자가 몇몇 다른 제어를 포함해야 앱 또는 사용자가 조직의 높은 권한 데이터에 액세스하는 것을 인증합니다.

조직을 대신하여 관리자 동의를 얻으려면 앱에 대해 등록된 정적 권한이 있어야 합니다. 전체 조직을 대신하여 동의를 제공할 관리자가 필요한 경우 앱 등폴 포털에서 앱에 대해 해당 권한을 설정합니다. 이렇게 하면 조직 관리자가 애플리케이션을 설정하는 데 필요한 주기가 줄어듭니다.

Openid Connect 또는 OAuth 2.0 권한 부여 요청에서 앱은 범위 쿼리 매개 변수를 사용하여 필요한 사용 권한을 요청할 수 있습니다. 예를 들어 사용자가 앱에 로그인하면 앱은 다음 예제와 같은 요청을 보냅니다. 가독성을 위해 줄 바꿈이 추가됩니다.

GET https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&scope=
https%3A%2F%2Fgraph.microsoft.com%2Fcalendars.read%20
https%3A%2F%2Fgraph.microsoft.com%2Fmail.send
&state=12345

scope 매개 변수는 앱이 요청하는 공백으로 구분된 위임된 권한 범위 목록입니다. 각 권한은 리소스 식별자(애플리케이션 ID URI)에 권한 값을 추가하여 표시됩니다. 요청 예제에서 앱에는 사용자의 일정을 읽고 사용자로 메일을 보낼 수 있는 권한이 필요합니다.

사용자가 자격 증명을 입력하면 Microsoft ID 플랫폼은 사용자 동의와 일치하는 레코드를 확인합니다. 사용자가 과거에 요청된 권한에 동의하지 않은 경우 관리자가 전체 조직을 대신하여 해당 권한에 동의하지 않으면 Microsoft ID 플랫폼은 요청된 권한을 부여해 달라고 사용자에게 요청합니다.