다음을 통해 공유


클라이언트 자격 증명(공유 비밀 또는 인증서)을 사용하여 서비스 간 호출

경고

이 콘텐츠는 이전 Azure AD v1.0 엔드포인트용입니다. 새 프로젝트에 Microsoft ID 플랫폼 사용합니다.

OAuth 2.0 클라이언트 자격 증명 부여 흐름은 웹 서비스(기밀 클라이언트)가 사용자를 가장하는 대신 자체 자격 증명을 사용하여 다른 웹 서비스를 호출할 때 인증할 수 있도록 허용합니다. 이 시나리오에서 클라이언트는 일반적으로 중간 계층 웹 서비스, 디먼 서비스 또는 웹 사이트입니다. 더 높은 수준의 보증을 위해 Azure AD를 사용하면 호출 서비스에서 공유 비밀 대신 인증서를 자격 증명으로 사용할 수 있습니다.

클라이언트 자격 증명 부여 흐름 다이어그램

다음 다이어그램에서는 Azure AD(Azure Active Directory)에서 클라이언트 자격 증명 부여 흐름이 작동하는 방식을 설명합니다.

OAuth2.0 클라이언트 자격 증명 부여 흐름OAuth2.0 Client Credentials Grant FlowOAuth2.0 Client Credentials Grant Flow

  1. 클라이언트 애플리케이션은 Azure AD 토큰 발급 엔드포인트에 인증하고 액세스 토큰을 요청합니다.
  2. Azure AD 토큰 발급 엔드포인트는 액세스 토큰을 발급합니다.
  3. 액세스 토큰은 보안 리소스에 인증하는 데 사용됩니다.
  4. 보안 리소스의 데이터가 클라이언트 애플리케이션에 반환됩니다.

Azure AD에서 서비스 등록

Azure AD(Azure Active Directory)에서 호출 서비스와 수신 서비스를 모두 등록합니다. 자세한 지침은 Azure Active Directory애플리케이션 통합을 참조하세요.

액세스 토큰 요청

액세스 토큰을 요청하려면 테넌트별 Azure AD 엔드포인트에 대한 HTTP POST를 사용합니다.

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

서비스 간 액세스 토큰 요청

클라이언트 애플리케이션이 공유 비밀 또는 인증서로 보호되도록 선택할지 여부에 따라 두 가지 경우가 있습니다.

첫 번째 사례: 공유 암호를 사용하여 액세스 토큰 요청

공유 비밀을 사용하는 경우 서비스-서비스 액세스 토큰 요청에는 다음 매개 변수가 포함됩니다.

매개 변수 유형 설명
인증 유형 필수 요청된 권한 부여 유형을 지정합니다. 클라이언트 자격 증명 부여 흐름에서 값은 client_credentials합니다.
클라이언트 ID 필수 호출 웹 서비스의 Azure AD 클라이언트 ID를 지정합니다. 호출 애플리케이션의 클라이언트 ID를 찾으려면 azure Portal Azure Active Directory 클릭하고 앱 등록 클릭하고 애플리케이션을 클릭합니다. client_id는 애플리케이션 ID입니다
클라이언트 비밀키 필수 Azure AD에서 호출 웹 서비스 또는 디먼 애플리케이션에 등록된 키를 입력합니다. 키를 만들려면 Azure Portal에서 Azure Active Directory 클릭하고, 앱 등록 클릭하고, 애플리케이션을 클릭하고, 설정클릭하고, 클릭하고, 키를 추가합니다. 이 비밀을 제공할 때 URL로 인코딩합니다.
자원 필수 수신 웹 서비스의 앱 ID URI를 입력합니다. 앱 ID URI를 찾으려면 Azure Portal에서 Azure Active Directory 클릭하고 앱 등록 클릭한 다음 서비스 애플리케이션을 클릭한 다음 설정속성클릭합니다.

예시

다음 HTTP POST는 웹 서비스에 대한 https://service.contoso.com/ 요청합니다. client_id 액세스 토큰을 요청하는 웹 서비스를 식별합니다.

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

두 번째 사례: 인증서를 사용하여 액세스 토큰 요청

인증서를 사용하는 서비스-서비스 액세스 토큰 요청에는 다음 매개 변수가 포함됩니다.

매개 변수 유형 설명
인증 유형 필수 요청된 응답 유형을 지정합니다. 클라이언트 자격 증명 부여 흐름에서 값은 client_credentials합니다.
클라이언트 ID 필수 호출 웹 서비스의 Azure AD 클라이언트 ID를 지정합니다. 호출 애플리케이션의 클라이언트 ID를 찾으려면 azure Portal Azure Active Directory 클릭하고 앱 등록 클릭하고 애플리케이션을 클릭합니다. client_id는 애플리케이션 ID입니다
클라이언트_어설션_타입 필수 값은 urn:ietf:params:oauth:client-assertion-type:jwt-bearer 이어야 합니다.
클라이언트 어설션 필수 어플리케이션의 자격 증명으로 등록한 인증서를 사용하여 생성하고 서명해야 하는 JSON 웹 토큰(어설션)입니다. 인증서 등록 방법 및 어설션 형식에 대한 자세한 내용은 인증서 자격 증명을 참조하세요.
자원 필수 수신 웹 서비스의 앱 ID URI를 입력합니다. 앱 ID URI를 찾으려면 Azure Portal에서 Azure Active Directory 클릭하고 앱 등록 클릭한 다음 서비스 애플리케이션을 클릭한 다음 설정속성클릭합니다.

client_secret 매개 변수가 client_assertion_type 매개 변수와 client_assertion 두 매개 변수로 대체된다는 점을 제외하고 매개 변수는 공유 비밀에 의한 요청의 경우와 거의 동일합니다.

예시

다음 HTTP POST는 인증서를 사용하여 https://service.contoso.com/ 웹 서비스에 대한 액세스 토큰을 요청합니다. client_id 액세스 토큰을 요청하는 웹 서비스를 식별합니다.

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

서비스 간 액세스 토큰 응답

성공 응답에는 다음 매개 변수가 포함된 JSON OAuth 2.0 응답이 포함됩니다.

매개 변수 설명
액세스 토큰 (access_token) 요청된 액세스 토큰입니다. 호출 웹 서비스는 이 토큰을 사용하여 수신 웹 서비스에 인증할 수 있습니다.
토큰 유형 토큰 형식 값을 나타냅니다. Azure AD에서 지원하는 유일한 유형은 전달자입니다. 전달자 토큰에 대한 자세한 내용은 OAuth 2.0 권한 부여 프레임워크: 전달자 토큰 사용량(RFC 6750)참조하세요.
만료 시간 액세스 토큰의 유효 기간(초)입니다.
만료일 액세스 토큰이 만료되는 시간입니다. 날짜는 만료 시간까지 1970-01-01T0:0:0Z UTC의 초 수로 표시됩니다. 이 값은 캐시된 토큰의 수명을 결정하는 데 사용됩니다.
이전 사용 불가 액세스 토큰을 사용할 수 있게 되는 시간입니다. 날짜는 토큰의 유효 시간까지 1970-01-01T0:0:0Z UTC의 초 수로 표시됩니다.
자원 수신 웹 서비스의 앱 ID URI입니다.

응답 예제

다음 예제에서는 웹 서비스에 대한 액세스 토큰 요청에 대한 성공 응답을 보여 줍니다.

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

액세스 토큰을 사용하여 보안 리소스에 액세스

서비스는 획득된 액세스 토큰을 사용하여 Authorization 헤더에서 토큰을 설정하여 다운스트림 웹 API에 대한 인증된 요청을 수행할 수 있습니다.

예시

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

참고하십시오