클라이언트 자격 증명을 사용하여 서비스를 호출하는 서비스(공유 암호 또는 인증서)Service to service calls using client credentials (shared secret or certificate)

중요

V 2.0 (Microsoft identity platform )은 AZURE ACTIVE DIRECTORY (Azure AD) developer platform (v1.0)의 진화입니다.Microsoft identity platform (v2.0) is an evolution of the Azure Active Directory (Azure AD) developer platform (v1.0). 이 플랫폼을 사용하면 개발자가 모든 Microsoft ID에 로그인하고, Microsoft Graph와 같은 Microsoft API 또는 개발자가 빌드한 API를 호출하기 위한 토큰을 가져오는 애플리케이션을 빌드할 수 있습니다.It allows developers to build applications that sign in all Microsoft identities and get tokens to call Microsoft APIs such as Microsoft Graph or APIs that developers have built. 이 콘텐츠는 이전의 Azure AD v1.0 엔드포인트에 대한 것입니다.This content is for the older, Azure AD v1.0 endpoint. 새 프로젝트에는 v2.0 엔드포인트를 사용하는 것이 좋습니다.We recommend that you use the v2.0 endpoint for new projects. 자세한 내용은 Microsoft ID 플랫폼(v2.0)으로 업데이트하는 이유For more info, read Why update to Microsoft identity platform (v2.0)? Microsoft ID 플랫폼 제한 사항을 참조하세요.as well as Microsoft identity platform limitations.

OAuth 2.0 클라이언트 자격 증명 부여 흐름은 사용자를 가장하는 대신 다른 웹 서비스를 호출할 때 웹 서비스( 기밀 클라이언트)가 자체 자격 증명을 사용하여 인증하도록 허용합니다.The OAuth 2.0 Client Credentials Grant Flow permits a web service (confidential client) to use its own credentials instead of impersonating a user, to authenticate when calling another web service. 이 시나리오에서 클라이언트는 일반적으로 중간 계층 웹 서비스, 데몬 서비스 또는 웹 사이트입니다.In this scenario, the client is typically a middle-tier web service, a daemon service, or web site. 더 높은 수준의 보증을 위해 Azure AD는 호출 서비스가 자격 증명으로 인증서(공유 암호 대신)를 사용할 수 있도록 합니다.For a higher level of assurance, Azure AD also allows the calling service to use a certificate (instead of a shared secret) as a credential.

클라이언트 자격 증명 부여 흐름 다이어그램Client credentials grant flow diagram

다음 다이어그램에서는 Azure Active Directory(Azure AD)에서 클라이언트 자격 증명 부여 흐름이 작동하는 방법에 대해 설명합니다.The following diagram explains how the client credentials grant flow works in Azure Active Directory (Azure AD).

OAuth 2.0 클라이언트 자격 증명 부여 흐름

  1. 클라이언트 애플리케이션은 Azure AD 토큰 발급 엔드포인트 인증하고 액세스 토큰을 요청합니다.The client application authenticates to the Azure AD token issuance endpoint and requests an access token.
  2. Azure AD 토큰 발급 엔드포인트가 액세스 토큰을 발급합니다.The Azure AD token issuance endpoint issues the access token.
  3. 보안 리소스에 인증하는 데 액세스 토큰이 사용됩니다.The access token is used to authenticate to the secured resource.
  4. 보안 리소스의 데이터는 클라이언트 애플리케이션에 반환됩니다.Data from the secured resource is returned to the client application.

Azure AD에서 서비스 등록Register the Services in Azure AD

Azure AD(Azure Active Directory)에서 호출 서비스와 수신 서비스를 등록합니다.Register both the calling service and the receiving service in Azure Active Directory (Azure AD). 자세한 지침은 Azure Active Directory와 애플리케이션 통합을 참조하세요.For detailed instructions, see Integrating applications with Azure Active Directory.

액세스 토큰 요청Request an Access Token

액세스 토큰을 요청하려면 테넌트별 Azure AD 엔드포인트에 HTTP POST를 사용합니다.To request an access token, use an HTTP POST to the tenant-specific Azure AD endpoint.

https://login.microsoftonline.com/<tenant id>/oauth2/token

서비스 간 액세스 토큰 요청Service-to-service access token request

클라이언트 애플리케이션이 공유 암호 또는 인증서 중에서 어떤 방식으로 보호되도록 선택되는지에 따라 두 가지 사례가 있습니다.There are two cases depending on whether the client application chooses to be secured by a shared secret, or a certificate.

첫 번째 사례: 공유 비밀을 사용하여 액세스 토큰 요청First case: Access token request with a shared secret

공유 암호를 사용할 경우 서비스 간 액세스 토큰 요청에는 다음 매개 변수가 있습니다.When using a shared secret, a service-to-service access token request contains the following parameters:

매개 변수Parameter TypeType 설명Description
grant_typegrant_type 필수required 요청된 부여 유형을 지정합니다.Specifies the requested grant type. 클라이언트 자격 증명 부여 흐름에서 값은 client_credentials이어야 합니다.In a Client Credentials Grant flow, the value must be client_credentials.
client_idclient_id 필수required 호출 웹 서비스의 Azure AD 클라이언트 ID를 지정합니다.Specifies the Azure AD client id of the calling web service. 호출하는 애플리케이션의 클라이언트 ID를 찾으려면 Azure Portal에서 Azure Active Directory, 앱 등록 및 애플리케이션을 차례로 클릭합니다.To find the calling application's client ID, in the Azure portal, click Azure Active Directory, click App registrations, click the application. client_id는 애플리케이션 ID입니다.The client_id is the Application ID
client_secretclient_secret 필수required Azure AD에서 호출 웹 서비스 또는 디먼 애플리케이션에 대해 등록된 키를 입력합니다.Enter a key registered for the calling web service or daemon application in Azure AD. 키를 만들려면 Azure Portal에서 Azure Active Directory, 앱 등록 및 애플리케이션, 설정를 차례로 클릭하고, 키를 추가합니다.To create a key, in the Azure portal, click Azure Active Directory, click App registrations, click the application, click Settings, click Keys, and add a Key. 이 비밀을 제공하는 경우 URL로 인코딩합니다.URL-encode this secret when providing it.
리소스resource 필수required 수신 웹 서비스의 앱 ID URI를 입력합니다.Enter the App ID URI of the receiving web service. 앱 ID URI를 찾으려면 Azure Portal에서 Azure Active Directory, 앱 등록, 서비스 애플리케이션 및 설정속성을 차례로 클릭합니다.To find the App ID URI, in the Azure portal, click Azure Active Directory, click App registrations, click the service application, and then click Settings and Properties.

예제Example

다음 HTTP POST는 https://service.contoso.com/ 웹 서비스에 대한 액세스 토큰을 요청합니다.The following HTTP POST requests an access token for the https://service.contoso.com/ web service. client_id 은(는) 액세스 토큰을 요청하는 웹 서비스를 식별합니다.The client_id identifies the web service that requests the access token.

POST /contoso.com/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=625bc9f6-3bf6-4b6d-94ba-e97cf07a22de&client_secret=qkDwDJlDfig2IpeuUZYKH1Wb8q1V0ju6sILxQQqhJ+s=&resource=https%3A%2F%2Fservice.contoso.com%2F

두 번째 사례: 인증서를 사용하여 액세스 토큰 요청Second case: Access token request with a certificate

인증서를 사용한 서비스 간 액세스 토큰 요청에는 다음 매개 변수가 있습니다.A service-to-service access token request with a certificate contains the following parameters:

매개 변수Parameter TypeType 설명Description
grant_typegrant_type 필수required 요청된 응답 유형을 지정합니다.Specifies the requested response type. 클라이언트 자격 증명 부여 흐름에서 값은 client_credentials이어야 합니다.In a Client Credentials Grant flow, the value must be client_credentials.
client_idclient_id 필수required 호출 웹 서비스의 Azure AD 클라이언트 ID를 지정합니다.Specifies the Azure AD client id of the calling web service. 호출하는 애플리케이션의 클라이언트 ID를 찾으려면 Azure Portal에서 Azure Active Directory, 앱 등록 및 애플리케이션을 차례로 클릭합니다.To find the calling application's client ID, in the Azure portal, click Azure Active Directory, click App registrations, click the application. client_id는 애플리케이션 ID입니다.The client_id is the Application ID
client_assertion_typeclient_assertion_type 필수required 값은 urn:ietf:params:oauth:client-assertion-type:jwt-bearer이어야 합니다.The value must be urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertionclient_assertion requiredrequired 애플리케이션의 자격 증명으로 등록한 인증서를 사용하여 만들고 서명해야 하는 어설션(JSON Web Token)입니다.An assertion (a JSON Web Token) that you need to create and sign with the certificate you registered as credentials for your application. 인증서 등록 방법 및 어설션 형식에 대한 자세한 내용은 인증서 자격 증명을 참조하세요.Read about certificate credentials to learn how to register your certificate and the format of the assertion.
리소스resource 필수required 수신 웹 서비스의 앱 ID URI를 입력합니다.Enter the App ID URI of the receiving web service. 앱 ID URI를 찾으려면 Azure Portal에서 Azure Active Directory, 앱 등록, 서비스 애플리케이션 및 설정속성을 차례로 클릭합니다.To find the App ID URI, in the Azure portal, click Azure Active Directory, click App registrations, click the service application, and then click Settings and Properties.

client_secret 매개 변수가 두 개의 매개 변수 client_assertion_type 및 client_assertion으로 바뀐다는 것을 제외하고 공유 비밀에 따른 요청 사례와 매개 변수는 거의 동일합니다.Notice that the parameters are almost the same as in the case of the request by shared secret except that the client_secret parameter is replaced by two parameters: a client_assertion_type and client_assertion.

예제Example

다음 HTTP POST는 인증서를 사용하여 https://service.contoso.com/ 웹 서비스에 대한 액세스 토큰을 요청합니다.The following HTTP POST requests an access token for the https://service.contoso.com/ web service with a certificate. client_id 은(는) 액세스 토큰을 요청하는 웹 서비스를 식별합니다.The client_id identifies the web service that requests the access token.

POST /<tenant_id>/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

resource=https%3A%2F%contoso.onmicrosoft.com%2Ffc7664b4-cdd6-43e1-9365-c2e1c4e1b3bf&client_id=97e0a5b7-d745-40b6-94fe-5f77d35c6e05&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}M8U3bSUKKJDEg&grant_type=client_credentials

서비스 간 액세스 토큰 응답Service-to-Service Access Token Response

성공 응답에는 다음 매개 변수가 있는 JSON OAuth 2.0 응답이 있습니다.A success response contains a JSON OAuth 2.0 response with the following parameters:

매개 변수Parameter DescriptionDescription
access_tokenaccess_token 요청된 액세스 토큰입니다.The requested access token. 호출 웹 서비스는 이 토큰을 사용하여 수신 웹 서비스에 인증할 수 있습니다.The calling web service can use this token to authenticate to the receiving web service.
token_typetoken_type 토큰 유형 값을 나타냅니다.Indicates the token type value. Azure AD는 전달자유형만 지원합니다.The only type that Azure AD supports is Bearer. 전달자 토큰에 대한 자세한 내용은 OAuth 2.0 권한 부여 프레임워크: 전달자 토큰 사용(RFC 6750)을 참조하세요.For more information about bearer tokens, see The OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).
expires_inexpires_in 액세스 토큰이 유효한 기간(초)입니다.How long the access token is valid (in seconds).
expires_onexpires_on 액세스 토큰이 만료되는 시간입니다.The time when the access token expires. 날짜는 1970-01-01T0:0:0Z UTC부터 만료 시간까지 기간(초)으로 표시됩니다.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time. 이 값은 캐시된 토큰의 수명을 결정하는 데 사용됩니다.This value is used to determine the lifetime of cached tokens.
not_beforenot_before 액세스 토큰은 사용할 수 있게 되는 시작 시간입니다.The time from which the access token becomes usable. 날짜는 1970-01-01T0:0:0Z UTC부터 토큰 유효 기간까지의 기간(초)으로 표시됩니다.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until time of validity for the token.
resourceresource 수신 웹 서비스의 앱 ID URI입니다.The App ID URI of the receiving web service.

응답 예제Example of response

다음 예제는 웹 서비스에 액세스 토큰 요청에 대한 성공 응답을 보여줍니다.The following example shows a success response to a request for an access token to a web service.

{
"access_token":"eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw",
"token_type":"Bearer",
"expires_in":"3599",
"expires_on":"1388452167",
"resource":"https://service.contoso.com/"
}

보안 리소스에 액세스하는 데 액세스 토큰 사용Use the access token to access the secured resource

서비스는 획득한 액세스 토큰을 사용하여 Authorization 헤더에서 토큰을 설정하고 다운스트림 웹 API에 대한 인증된 요청을 수행할 수 있습니다.The service can use the acquired access token to make authenticated requests to the downstream web API by setting the token in the Authorization header.

예제Example

GET /me?api-version=2013-11-08 HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw

참고 항목See also