Azure AD B2C에서 API 커넥터로 사용되는 API 보호

Azure AD B2C 사용자 흐름 내에서 REST API를 통합하는 경우 인증을 사용하여 REST API 엔드포인트를 보호해야 합니다. REST API 인증을 사용하면 Azure AD B2C와 같이 적절한 자격 증명이 있는 서비스만 엔드포인트에 대한 호출을 수행할 수 있습니다. 이 문서에서는 REST API를 보호하는 방법을 살펴봅니다.

필수 조건

등록 사용자 흐름에 API 커넥터 추가 가이드의 단계를 완료합니다.

HTTP 기본 인증 또는 HTTPS 클라이언트 인증서 인증을 사용하여 API 엔드포인트를 보호할 수 있습니다. 두 경우 모두 API 엔드포인트를 호출할 때 Azure AD B2C에서 사용할 자격 증명을 제공합니다. API 엔드포인트는 자격 증명을 확인하고 권한 부여 결정을 내립니다.

HTTP 기본 인증

HTTP 기본 인증은 RFC 2617에 정의되어 있습니다. 기본 인증은 다음과 같이 작동합니다.

  • Azure AD B2C는 Authorization 헤더에서 클라이언트 자격 증명(usernamepassword)을 사용하여 HTTP 요청을 보냅니다.

  • 자격 증명은 base64로 인코딩된 문자열 username:password로 형식이 지정됩니다.

  • 그러면 API는 이러한 값을 검사하여 다른 권한 부여 결정을 수행할 수 있게 됩니다.

HTTP 기본 인증을 사용하여 API 커넥터를 구성하려면 다음 단계를 수행합니다.

  1. Azure Portal에 로그인합니다.
  2. Azure 서비스에서 Azure AD B2C를 선택하거나 Azure AD B2C를 검색하여 선택합니다.
  3. API 커넥터를 선택한 다음, 구성하려는 API 커넥터를 선택합니다.
  4. 인증 형식으로 기본을 선택합니다.
  5. REST API 엔드포인트의 사용자 이름암호를 제공합니다. Providing basic authentication configuration for an API connector.
  6. 저장을 선택합니다.

REST API 사용자 이름 및 암호 정책 키 추가

HTTP 기본 인증을 사용하여 REST API 기술 프로필을 구성하려면 다음 암호화 키를 만들어 사용자 이름 및 암호를 저장합니다.

  1. Azure Portal에 로그인합니다.
  2. 여러 테넌트에 액세스할 수 있는 경우 상단 메뉴의 설정 아이콘을 선택하여 디렉터리 + 구독 메뉴에서 Azure AD B2C 테넌트로 전환합니다.
  3. Azure Portal의 왼쪽 상단 모서리에서 모든 서비스를 선택하고 Azure AD B2C를 검색하여 선택합니다.
  4. 개요 페이지에서 ID 경험 프레임워크를 선택합니다.
  5. 정책 키, 추가를 차례로 선택합니다.
  6. 옵션에서 수동을 선택합니다.
  7. 이름RestApiUsername을 입력합니다. B2C_1A_ 접두사를 자동으로 추가할 수 있습니다.
  8. 비밀 상자에 REST API 사용자 이름을 입력합니다.
  9. 키 사용에는 암호화를 선택합니다.
  10. 만들기를 실행합니다.
  11. 정책 키를 다시 선택합니다.
  12. 추가를 선택합니다.
  13. 옵션에서 수동을 선택합니다.
  14. 이름RestApiPassword를 입력합니다. B2C_1A_ 접두사를 자동으로 추가할 수 있습니다.
  15. 비밀 상자에 REST API 암호를 입력합니다.
  16. 키 사용에는 암호화를 선택합니다.
  17. 만들기를 실행합니다.

HTTP 기본 인증을 사용하도록 REST API 기술 프로필 구성

필요한 키를 만든 후에 REST API 기술 프로필 메타데이터를 구성하여 자격 증명을 참조합니다.

  1. 작업 디렉터리에서 확장 정책 파일(TrustFrameworkExtensions.xml)을 엽니다.
  2. REST API 기술 프로필을 검색합니다. 예를 들면 REST-ValidateProfile 또는 REST-GetProfile와 같은 인터페이스를 정의할 수 있습니다.
  3. <Metadata> 요소를 찾습니다.
  4. AuthenticationTypeBasic로 변경합니다.
  5. AllowInsecureAuthInProductionfalse로 변경합니다.
  6. </Metadata> 요소를 닫은 직후 다음 XML 코드 조각을 추가합니다.
    <CryptographicKeys>
        <Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_RestApiUsername" />
        <Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_RestApiPassword" />
    </CryptographicKeys>
    

다음 XML 코드 조각은 HTTP 기본 인증을 사용하여 구성된 RESTful 기술 프로필의 예제입니다.

<ClaimsProvider>
  <DisplayName>REST APIs</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="REST-GetProfile">
      <DisplayName>Get user extended profile Azure Function web hook</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">https://your-account.azurewebsites.net/api/GetProfile?code=your-code</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="AuthenticationType">Basic</Item>
        <Item Key="AllowInsecureAuthInProduction">false</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_RestApiUsername" />
        <Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_RestApiPassword" />
      </CryptographicKeys>
      ...
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

HTTPS 클라이언트 인증서 인증

클라이언트 인증서 인증은 클라이언트, Azure AD B2C에서 해당 ID를 증명하기 위해 해당 클라이언트 인증서를 서버에 제공하는 상호 인증서 기반 인증입니다. 이는 SSL 핸드셰이크의 일부로 발생합니다. API는 Azure AD B2C와 같은 유효한 클라이언트에 속하는 인증서의 유효성을 검사하고 권한부여 결정을 수행하는 일을 담당합니다. 클라이언트 인증서는 X.509 디지털 인증서입니다.

Important

프로덕션 환경에서는 인증 기관에서 인증서를 서명해야 합니다.

인증서 만들기

인증서를 만들려면 자체 서명된 인증서 및 서명된 인증서의 인증서 발급자 공급자와의 통합 옵션이 포함된 Azure Key Vault를 사용할 수 있습니다. 권장 설정은 다음과 같습니다.

  • 제목: CN=<yourapiname>.<tenantname>.onmicrosoft.com
  • 콘텐츠 형식: PKCS #12
  • 수명 주기 작업 유형: Email all contacts at a given percentage lifetime 또는 Email all contacts a given number of days before expiry
  • 키 유형: RSA
  • 키 크기: 2048
  • 내보낼 수 있는 프라이빗 키: Yes(.pfx 파일을 내보내는 데 필요)

그러면 사용자가 인증서를 내보낼수 있습니다.

옵션 2: PowerShell 모듈을 사용하여 자체 서명된 인증서 준비

인증서가 아직 없는 경우 자체 서명된 인증서를 사용할 수 있습니다. 자체 서명된 인증서는 CA(인증 기관)가 서명하지 않은 보안 인증서이며, CA가 서명한 인증서의 보안 보장을 제공하지 않습니다.

Windows에서는 PowerShell에서 New-SelfSignedCertificate cmdlet을 사용하여 인증서를 생성합니다.

  1. 다음 PowerShell 명령을 실행하여 자체 서명된 인증서를 실행합니다. 애플리케이션 및 Azure AD B2C 테넌트 이름(예: contosowebapp.contoso.onmicrosoft.com)에 맞게 -Subject 인수를 수정합니다. -NotAfter 날짜를 조정하여 인증서에 다른 만료 날짜를 지정할 수도 있습니다.

    New-SelfSignedCertificate `
        -KeyExportPolicy Exportable `
        -Subject "CN=yourappname.yourtenant.onmicrosoft.com" `
        -KeyAlgorithm RSA `
        -KeyLength 2048 `
        -KeyUsage DigitalSignature `
        -NotAfter (Get-Date).AddMonths(12) `
        -CertStoreLocation "Cert:\CurrentUser\My"
    
  2. Windows 컴퓨터에서 사용자 인증서 관리를 검색하여 선택합니다.

  3. 인증서 - 현재 사용자에서 개인>인증서>yourappname.yourtenant.onmicrosoft.com을 선택합니다.

  4. 인증서를 선택한 다음 작업>모든 작업>내보내기를 선택합니다.

  5. 다음>예, 프라이빗 키를 내보냅니다>다음을 선택합니다.

  6. 내보내기 파일 형식의 기본값을 수락한 다음, 다음을 선택합니다.

  7. 암호 옵션을 사용하도록 설정하고 인증서 암호를 입력한 다음, 다음을 선택합니다.

  8. 인증서를 저장할 위치를 지정하려면 찾아보기를 선택하고 원하는 디렉터리로 이동합니다.

  9. 다른 이름으로 저장 창에서 파일 이름을 입력한 다음, 저장을 선택합니다.

  10. 다음>마침을 선택합니다.

Azure AD B2C가 .pfx 파일 암호를 수락하려면 AES256-SHA256이 아니라 Windows 인증서 저장소 내보내기 유틸리티의 TripleDES-SHA1 옵션을 사용하여 암호를 암호화해야 합니다.

API 커넥터 구성

클라이언트 인증서 인증을 사용하여 API 커넥터를 구성하려면 다음 단계를 수행합니다.

  1. Azure Portal에 로그인합니다.
  2. Azure 서비스에서 Azure AD B2C를 선택합니다.
  3. API 커넥터를 선택한 다음, 구성하려는 API 커넥터를 선택합니다.
  4. 인증 형식으로 인증서를 선택합니다.
  5. 인증서 업로드 상자에서 프라이빗 키가 있는 인증서의 .pfx 파일을 선택합니다.
  6. 암호 입력 상자에 인증서의 암호를 입력합니다. Providing certificate authentication configuration for an API connector.
  7. 저장을 선택합니다.

권한 부여 결정 수행

API는 API 엔드포인트를 보호하기 위해 전송된 클라이언트 인증서를 기준으로 권한 부여를 구현해야 합니다. Azure App Service 및 Azure Functions의 경우 TLS 상호 인증 구성을 참조하여 API 코드에서 인증서를 사용하도록 설정하고 유효성을 검사하는 방법을 알아보세요. 또는 Azure API Management를 API 서비스 앞의 계층으로 사용하여 원하는 값에 대해 클라이언트 인증서 속성을 확인할 수 있습니다.

인증서를 갱신하는 중

인증서 만료 시점에 대한 미리 알림 경고를 설정하는 것이 좋습니다. 새 인증서를 생성하고 사용된 인증서가 만료되려고 할 때 위의 단계를 반복해야 합니다. 새 인증서 사용을 "롤"하기 위해 API 서비스는 새 인증서가 배포되는 동안 일시적으로 이전 인증서와 새 인증서를 계속 수락할 수 있습니다.

기존 API 커넥터에 새 인증서를 업로드하려면 API 커넥터에서 API 커넥터를 선택하고 새 인증서 업로드를 클릭합니다. 만료되지 않고 시작 날짜가 지난 가장 최근에 업로드된 인증서는 Azure AD B2C에서 자동으로 사용됩니다.

Providing a new certificate to an API connector when one already exists.

클라이언트 인증서 정책 키 추가

  1. Azure Portal에 로그인합니다.
  2. 여러 테넌트에 액세스할 수 있는 경우 상단 메뉴의 설정 아이콘을 선택하여 디렉터리 + 구독 메뉴에서 Azure AD B2C 테넌트로 전환합니다.
  3. Azure Portal의 왼쪽 상단 모서리에서 모든 서비스를 선택하고 Azure AD B2C를 검색하여 선택합니다.
  4. 개요 페이지에서 ID 경험 프레임워크를 선택합니다.
  5. 정책 키, 추가를 차례로 선택합니다.
  6. 옵션 상자에서 업로드를 선택합니다.
  7. 이름 상자에 RestApiClientCertificate를 입력합니다. B2C_1A_ 접두사가 자동으로 추가됩니다.
  8. 파일 업로드 상자에서 프라이빗 키가 있는 인증서 .pfx 파일을 선택합니다.
  9. 암호 상자에 인증서의 암호를 입력합니다.
  10. 만들기를 실행합니다.

클라이언트 인증서 인증을 사용하도록 REST API 기술 프로필 구성

필요한 키를 만든 후에 REST API 기술 프로필 메타데이터를 구성하여 클라이언트 인증서를 참조합니다.

  1. 작업 디렉터리에서 확장 정책 파일(TrustFrameworkExtensions.xml)을 엽니다.
  2. REST API 기술 프로필을 검색합니다. 예를 들면 REST-ValidateProfile 또는 REST-GetProfile와 같은 인터페이스를 정의할 수 있습니다.
  3. <Metadata> 요소를 찾습니다.
  4. AuthenticationTypeClientCertificate로 변경합니다.
  5. AllowInsecureAuthInProductionfalse로 변경합니다.
  6. </Metadata> 요소를 닫은 직후 다음 XML 코드 조각을 추가합니다.
    <CryptographicKeys>
       <Key Id="ClientCertificate" StorageReferenceId="B2C_1A_RestApiClientCertificate" />
    </CryptographicKeys>
    

다음 XML 코드 조각은 HTTP 클라이언트 인증서를 사용하여 구성된 RESTful 기술 프로필의 예제입니다.

<ClaimsProvider>
  <DisplayName>REST APIs</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="REST-GetProfile">
      <DisplayName>Get user extended profile Azure Function web hook</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">https://your-account.azurewebsites.net/api/GetProfile?code=your-code</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="AuthenticationType">ClientCertificate</Item>
        <Item Key="AllowInsecureAuthInProduction">false</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="ClientCertificate" StorageReferenceId="B2C_1A_RestApiClientCertificate" />
      </CryptographicKeys>
      ...
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

OAuth2 전달자 인증

전달자 토큰 인증은 OAuth 2.0 권한 부여 프레임워크: 전달자 토큰 사용(RFC 6750)에 정의됩니다. 전달자 토큰 인증에서 Azure AD B2C는 인증 헤더에서 토큰을 사용하여 HTTP 요청을 보냅니다.

Authorization: Bearer <token>

전달자 토큰은 불투명 문자열입니다. 이 토큰은 JWT 액세스 토큰이거나 REST API에서 Azure AD B2C가 인증 헤더에서 보낼 것으로 예상하는 문자열일 수 있습니다. Azure AD B2C는 다음과 같은 유형을 지원합니다.

  • 전달자 토큰 Restful 기술 프로필에서 전달자 토큰을 보낼 수 있으려면 먼저 정책에서 전달자 토큰을 획득한 다음, RESTful 기술 프로필에서 사용해야 합니다.
  • 정적 전달자 토큰 REST API에서 장기 액세스 토큰을 발급하는 경우 이 방법을 사용합니다. 정적 전달자 토큰을 사용하려면 정책 키를 만들고 RESTful 기술 프로필에서 정책 키로 참조를 만듭니다.

OAuth2 전달자 사용

다음 단계에서는 클라이언트 자격 증명을 사용하여 전달자 토큰을 가져와서 REST API 호출의 인증 헤더에 전달하는 방법을 보여 줍니다.

전달자 토큰을 저장할 클레임 정의

클레임은 Azure AD B2C 정책 실행 중에 데이터의 임시 스토리지를 제공합니다. 클레임 스키마에서 클레임을 선언합니다. 액세스 토큰은 나중에 사용하기 위해 클레임에 저장되어야 합니다.

  1. 정책의 확장 파일을 엽니다. 예: SocialAndLocalAccounts/TrustFrameworkExtensions.xml.
  2. BuildingBlocks 요소를 검색합니다. 요소가 존재하지 않는 경우 추가합니다.
  3. ClaimsSchema 요소를 찾습니다. 요소가 존재하지 않는 경우 추가합니다.
  4. ClaimsSchema 요소에 다음 클레임을 추가합니다.
<ClaimType Id="bearerToken">
  <DisplayName>Bearer token</DisplayName>
  <DataType>string</DataType>
</ClaimType>
<ClaimType Id="grant_type">
  <DisplayName>Grant type</DisplayName>
  <DataType>string</DataType>
</ClaimType>
<ClaimType Id="scope">
  <DisplayName>scope</DisplayName>
  <DataType>string</DataType>
</ClaimType>

액세스 토큰 획득

페더레이션 ID 공급자에서 얻거나, 액세스 토큰을 반환하는 REST API를 호출하거나, ROPC 흐름을 사용하거나 클라이언트 자격 증명 흐름을 사용하는 등 여러 방법 중 하나로 액세스 토큰을 얻을 수 있습니다. 클라이언트 자격 증명 흐름은 일반적으로 사용자의 직접적인 상호 작용 없이 백그라운드에서 실행해야 하는 서버 간 상호 작용에 사용됩니다.

Microsoft Entra 액세스 토큰 획득

다음 예제에서는 REST API 기술 프로필을 사용하여 HTTP 기본 인증으로 전달된 클라이언트 자격 증명을 사용하여 Microsoft Entra 토큰 엔드포인트에 대한 요청을 만듭니다. 자세한 내용은 Microsoft ID 플랫폼 및 OAuth 2.0 클라이언트 자격 증명 흐름을 참조하세요.

기술 프로필이 Microsoft Entra ID와 상호 작용하여 액세스 토큰을 가져오려면 애플리케이션을 등록해야 합니다. Azure AD B2C는 Microsoft Entra 플랫폼을 사용합니다. Azure AD B2C 테넌트 또는 관리하는 모든 Microsoft Entra 테넌트에서 앱을 만들 수 있습니다. 애플리케이션을 등록하려면 다음을 수행합니다.

  1. Azure Portal에 로그인합니다.
  2. 여러 테넌트에 액세스할 수 있는 경우 상단 메뉴의 설정 아이콘을 선택하여 디렉터리 + 구독 메뉴에서 Azure AD B2C 테넌트로 전환합니다.
  3. 왼쪽 메뉴에서 Microsoft Entra ID를 선택합니다. 또는 전체 서비스를 선택하고 Microsoft Entra ID를 검색하여 선택합니다.
  4. 앱 등록을 선택한 다음, 새 등록을 선택합니다.
  5. 애플리케이션의 이름을 입력합니다. 예를 들어 Client_Credentials_Auth_app을 입력합니다.
  6. 지원되는 계정 유형에서 이 조직 디렉터리의 계정만을 선택합니다.
  7. 등록을 선택합니다.
  8. 애플리케이션(클라이언트) ID를 기록해 둡니다.

클라이언트 자격 증명 흐름의 경우 애플리케이션 비밀을 만들어야 합니다. 클라이언트 암호는 애플리케이션 암호라고도 합니다. 애플리케이션은 이 비밀을 사용하여 액세스 토큰을 획득합니다.

  1. Microsoft Entra ID - 앱 등록 페이지에서 사용자가 만든 애플리케이션을 선택합니다(예: Client_Credentials_Auth_app).
  2. 왼쪽 메뉴의 관리에서 인증서 및 비밀을 선택합니다.
  3. 새 클라이언트 비밀을 선택합니다.
  4. 설명 상자에 클라이언트 암호에 대한 설명을 입력합니다. 예: clientsecret1.
  5. 만료에서 암호가 유효한 기간을 선택한 다음 추가를 선택합니다.
  6. 클라이언트 애플리케이션 코드에서 사용할 비밀 을 기록합니다. 이 비밀 값은 이 페이지에서 나가면 다시 표시되지 않습니다. 이 값을 애플리케이션의 코드에서 애플리케이션 비밀로 사용합니다.

Azure AD B2C 정책 키 만들기

이전에 Azure AD B2C 테넌트에 기록한 클라이언트 ID와 클라이언트 암호 값을 저장해야 합니다.

  1. Azure Portal에 로그인합니다.
  2. 여러 테넌트에 액세스할 수 있는 경우 상단 메뉴의 설정 아이콘을 선택하여 디렉터리 + 구독 메뉴에서 Azure AD B2C 테넌트로 전환합니다.
  3. Azure Portal의 왼쪽 상단 모서리에서 모든 서비스를 선택하고 Azure AD B2C를 검색하여 선택합니다.
  4. 개요 페이지에서 ID 경험 프레임워크를 선택합니다.
  5. 정책 키, 추가를 차례로 선택합니다.
  6. 옵션으로는 Manual을 선택합니다.
  7. 정책 키 SecureRESTClientId이름을 입력합니다. B2C_1A_ 접두사가 키의 이름에 자동으로 추가됩니다.
  8. 이전에 기록한 클라이언트 ID를 비밀에 입력합니다.
  9. 키 사용에서 Signature를 선택합니다.
  10. 만들기를 실행합니다.
  11. 다음 설정을 사용하여 다른 정책 키를 만듭니다.
    • 이름: SecureRESTClientSecret.
    • 비밀: 이전에 기록한 클라이언트 암호를 입력합니다.

ServiceUrl의 경우 테넌트 이름을 Microsoft Entra 테넌트 이름으로 바꿉니다. 사용 가능한 모든 옵션은 RESTful 기술 프로필 참조를 참조하세요.

<TechnicalProfile Id="REST-AcquireAccessToken">
  <DisplayName></DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ServiceUrl">https://login.microsoftonline.com/your-tenant-name.onmicrosoft.com/oauth2/v2.0/token</Item>
    <Item Key="AuthenticationType">Basic</Item>
     <Item Key="SendClaimsIn">Form</Item>
  </Metadata>
  <CryptographicKeys>
    <Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_SecureRESTClientId" />
    <Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_SecureRESTClientSecret" />
  </CryptographicKeys>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="grant_type" DefaultValue="client_credentials" AlwaysUseDefaultValue="true" />
    <InputClaim ClaimTypeReferenceId="scope" DefaultValue="https://graph.microsoft.com/.default" AlwaysUseDefaultValue="true" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="bearerToken" PartnerClaimType="access_token" />
  </OutputClaims>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

참고 항목

다른 기술 프로필에서 grant_type 또는 scope 클레임을 사용하는 경우, 잘못된 값에 대한 바인딩에서 잠재적인 충돌을 피하기 위해 DefaultValue도 지정하고 AlwaysUseDefaultValue="true"를 사용하는 것이 좋습니다.

전달자 토큰 인증을 사용하도록 REST 기술 프로필 변경

사용자 지정 정책에서 전달자 토큰 인증을 지원하려면 다음 단계에 따라 REST API 기술 프로필을 수정합니다.

  1. 작업 디렉터리에서 TrustFrameworkExtensions.xml 확장 정책 파일을 엽니다.

  2. Id="REST-API-SignUp"이 포함된 <TechnicalProfile> 노드를 검색합니다.

  3. <Metadata> 요소를 찾습니다.

  4. 다음과 같이 AuthenticationTypeBearer로 변경합니다.

    <Item Key="AuthenticationType">Bearer</Item>
    
  5. 다음과 같이 UseClaimAsBearerTokenbearerToken으로 변경하거나 추가합니다. bearerToken은 전달자 토큰이 검색되는 클레임의 이름입니다(REST-AcquireAccessToken에서 출력 클레임).

    <Item Key="UseClaimAsBearerToken">bearerToken</Item>
    
  6. 이전 단계의 클레임을 입력 클레임으로 추가합니다.

    <InputClaim ClaimTypeReferenceId="bearerToken"/>
    

정책을 업데이트하면 기술 프로필은 다음 XML 코드와 비슷하게 표시됩니다.

<ClaimsProvider>
  <DisplayName>REST APIs</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="REST-GetProfile">
      <DisplayName>Get user extended profile Azure Function web hook</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">https://your-account.azurewebsites.net/api/GetProfile?code=your-code</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="AuthenticationType">Bearer</Item>
        <Item Key="UseClaimAsBearerToken">bearerToken</Item>
        <Item Key="AllowInsecureAuthInProduction">false</Item>
      </Metadata>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="bearerToken"/>
      </InputClaims>
      ...
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

REST 기술 프로필 호출

REST-GetProfile 기술 프로필을 호출하려면 먼저 REST-AcquireAccessToken 기술 프로필을 사용하여 Microsoft Entra 액세스 토큰을 획득해야 합니다. 다음 예제에서는 유효성 검사 기술 프로필에서 REST-GetProfile 기술 프로필을 호출하는 방법을 보여줍니다.

<ValidationTechnicalProfiles>
  <ValidationTechnicalProfile ReferenceId="REST-AcquireAccessToken" />
  <ValidationTechnicalProfile ReferenceId="REST-GetProfile" />
</ValidationTechnicalProfiles>

다음 예제에서는 사용자 경험 또는 하위 경험에서 REST-GetProfile 기술 프로필을 호출하는 방법을 보여줍니다.

<OrchestrationSteps>
  <OrchestrationStep Order="2" Type="ClaimsExchange">
    <ClaimsExchanges>
      <ClaimsExchange Id="REST-AcquireAccessTokens" TechnicalProfileReferenceId="REST-AcquireAccessToken" />
    </ClaimsExchanges>
  </OrchestrationStep>

  <OrchestrationStep Order="3" Type="ClaimsExchange">
    <ClaimsExchanges>
      <ClaimsExchange Id="REST-GetProfile" TechnicalProfileReferenceId="REST-GetProfile" />
    </ClaimsExchanges>
  </OrchestrationStep>
</OrchestrationSteps>

정적 OAuth2 전달자 사용

OAuth2 전달자 토큰 정책 키 추가

OAuth2 전달자 토큰으로 REST API 기술 프로필을 구성하려면 REST API 소유자로부터 액세스 토큰을 받습니다. 그리고 다음 암호화 키를 만들어 전달자 토큰을 저장합니다.

  1. Azure Portal에 로그인합니다.
  2. 여러 테넌트에 액세스할 수 있는 경우 상단 메뉴의 설정 아이콘을 선택하여 디렉터리 + 구독 메뉴에서 Azure AD B2C 테넌트로 전환합니다.
  3. Azure Portal의 왼쪽 상단 모서리에서 모든 서비스를 선택하고 Azure AD B2C를 검색하여 선택합니다.
  4. 개요 페이지에서 ID 경험 프레임워크를 선택합니다.
  5. 정책 키, 추가를 차례로 선택합니다.
  6. 옵션으로는 Manual을 선택합니다.
  7. 정책 키의 이름을 입력합니다. 예: RestApiBearerToken. B2C_1A_ 접두사가 키의 이름에 자동으로 추가됩니다.
  8. 이전에 기록해 두었던 클라이언트 비밀을 비밀에 입력합니다.
  9. 키 사용에서 Encryption를 선택합니다.
  10. 만들기를 실행합니다.

전달자 토큰 정책 키를 사용하도록 REST API 기술 프로필 구성

필요한 키를 만든 후에 REST API 기술 프로필 메타데이터를 구성하여 전달자 토큰을 참조합니다.

  1. 작업 디렉터리에서 확장 정책 파일(TrustFrameworkExtensions.xml)을 엽니다.
  2. REST API 기술 프로필을 검색합니다. 예를 들면 REST-ValidateProfile 또는 REST-GetProfile와 같은 인터페이스를 정의할 수 있습니다.
  3. <Metadata> 요소를 찾습니다.
  4. AuthenticationTypeBearer로 변경합니다.
  5. AllowInsecureAuthInProductionfalse로 변경합니다.
  6. </Metadata> 요소를 닫은 직후 다음 XML 코드 조각을 추가합니다.
    <CryptographicKeys>
       <Key Id="BearerAuthenticationToken" StorageReferenceId="B2C_1A_RestApiBearerToken" />
    </CryptographicKeys>
    

다음 XML 코드 조각은 전달자 토큰 인증을 사용하여 구성된 RESTful 기술 프로필의 예제입니다.

<ClaimsProvider>
  <DisplayName>REST APIs</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="REST-GetProfile">
      <DisplayName>Get user extended profile Azure Function web hook</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">https://your-account.azurewebsites.net/api/GetProfile?code=your-code</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="AuthenticationType">Bearer</Item>
        <Item Key="AllowInsecureAuthInProduction">false</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="BearerAuthenticationToken" StorageReferenceId="B2C_1A_RestApiBearerToken" />
      </CryptographicKeys>
      ...
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

등록 기술 프로필에 REST-AcquireAccessToken을 호출하는 유효성 검사 기술 프로필 참조를 추가합니다. 이 동작은 유효성 검사가 성공적으로 수행된 후에만 디렉터리에 계정을 만들도록 Azure AD B2C가 이동한다는 것을 의미합니다.

예시:

```XML
<ValidationTechnicalProfiles>
   ....
   <ValidationTechnicalProfile ReferenceId="REST-AcquireAccessToken" />
   ....
</ValidationTechnicalProfiles>

API 키 인증

일부 서비스는 "API 키" 메커니즘을 사용하여 호출자가 HTTP 헤더 또는 HTTP 쿼리 매개변수로 고유 키를 포함하도록 요구함으로써 개발 중에 HTTP 엔드포인트에 대한 액세스를 난독 처리합니다. Azure Functions의 경우 code엔드포인트 URL에 쿼리 매개 변수로 포함하여 이 작업을 수행할 수 있습니다. 예 - https://contoso.azurewebsites.net/api/endpoint?code=0123456789).

프로덕션 환경에서 단독으로 사용해야 하는 메커니즘이 아닙니다. 따라서 기본 또는 인증서 인증에 대한 구성이 항상 필요합니다. 개발 목적으로 인증 방법(권장하지 않음)을 구현하지 않으려면 API 커넥터 구성에서 '기본' 인증을 선택하고 적절한 승인 구현하는 동안 API가 무시할 수 있는 usernamepassword에 대한 임시 값을 사용할 수 있습니다.

API 키는 REST API 엔드포인트 액세스를 위해 사용자를 인증하는 데 사용되는 고유 식별자입니다. 키는 사용자 지정 HTTP 헤더로 전송됩니다. 예를 들어 Azure Functions HTTP 트리거x-functions-key HTTP 헤더를 사용하여 요청자를 식별합니다.

API 키 정책 키 추가

API 키 인증을 사용하여 REST API 기술 프로필을 구성하려면 다음 암호화 키를 만들어 API 키를 저장합니다.

  1. Azure Portal에 로그인합니다.
  2. 여러 테넌트에 액세스할 수 있는 경우 상단 메뉴의 설정 아이콘을 선택하여 디렉터리 + 구독 메뉴에서 Azure AD B2C 테넌트로 전환합니다.
  3. Azure Portal의 왼쪽 상단 모서리에서 모든 서비스를 선택하고 Azure AD B2C를 검색하여 선택합니다.
  4. 개요 페이지에서 ID 경험 프레임워크를 선택합니다.
  5. 정책 키, 추가를 차례로 선택합니다.
  6. 옵션에서 수동을 선택합니다.
  7. 이름RestApiKey를 입력합니다. B2C_1A_ 접두사를 자동으로 추가할 수 있습니다.
  8. 비밀 상자에 REST API 키를 입력합니다.
  9. 키 사용에는 암호화를 선택합니다.
  10. 만들기를 실행합니다.

API 키 인증을 사용하도록 REST API 기술 프로필 구성

필요한 키를 만든 후 자격 증명을 참조하도록 REST API 기술 프로필 메타데이터를 구성합니다.

  1. 작업 디렉터리에서 확장 정책 파일(TrustFrameworkExtensions.xml)을 엽니다.
  2. REST API 기술 프로필을 검색합니다. 예를 들면 REST-ValidateProfile 또는 REST-GetProfile와 같은 인터페이스를 정의할 수 있습니다.
  3. <Metadata> 요소를 찾습니다.
  4. AuthenticationTypeApiKeyHeader로 변경합니다.
  5. AllowInsecureAuthInProductionfalse로 변경합니다.
  6. </Metadata> 요소를 닫은 직후 다음 XML 코드 조각을 추가합니다.
    <CryptographicKeys>
        <Key Id="x-functions-key" StorageReferenceId="B2C_1A_RestApiKey" />
    </CryptographicKeys>
    

암호화 키의 Id는 HTTP 헤더를 정의합니다. 이 예에서 API 키는x-functions-key로 전송됩니다.

다음 XML 코드 조각은 API 키 인증을 사용하여 Azure Function을 호출하도록 구성된 RESTful 기술 프로필의 예제입니다.

<ClaimsProvider>
  <DisplayName>REST APIs</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="REST-GetProfile">
      <DisplayName>Get user extended profile Azure Function web hook</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="ServiceUrl">https://your-account.azurewebsites.net/api/GetProfile?code=your-code</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="AuthenticationType">ApiKeyHeader</Item>
        <Item Key="AllowInsecureAuthInProduction">false</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="x-functions-key" StorageReferenceId="B2C_1A_RestApiKey" />
      </CryptographicKeys>
      ...
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

다음 단계