Share via


특성 컬렉션 시작 및 이벤트 제출(미리 보기)에 대한 사용자 지정 인증 확장 만들기

적용 대상: 회색 X 기호가 있는 흰색 원입니다. Workforce 테넌트 흰색 검사 기호 기호가 있는 녹색 원입니다. 외부 테넌트(자세한 정보)

이 문서에서는 고객을 위해 Microsoft Entra 외부 ID에서 사용자 등록 환경을 확장하는 방법을 설명합니다. 고객 등록 사용자 흐름에서 이벤트 수신기를 사용하여 특성 모음 이전 및 특성 제출 시 특성 모음 프로세스를 확장할 수 있습니다.

  • OnAttributeCollectionStart 이벤트는 특성 모음 페이지가 렌더링되기 전에 특성 모음 단계 시작 시 발생합니다. 값을 미리 채우고 차단 오류를 표시하는 등의 작업을 추가할 수 있습니다.

    지금 체험하기

    이 기능을 사용해 보려면 Woodgrove 식료품 데모로 이동하여 "사전 등록 특성" 사용 사례를 시작합니다.

  • OnAttributeCollectionSubmit 이벤트는 사용자가 특성을 입력하고 제출한 후에 발생합니다. 사용자의 항목 유효성 검사 또는 수정과 같은 작업을 추가할 수 있습니다.

    지금 체험하기

    이 기능을 사용해 보려면 Woodgrove Groceries 데모로 이동하여 "등록 특성 유효성 검사" 사용 사례 또는 "사용자가 등록 프로세스를 계속하지 못하도록 차단" 사용 사례를 시작합니다.

특성 모음 시작 및 제출 이벤트에 대한 사용자 지정 인증 확장을 만드는 것 외에도 각 이벤트에 대해 수행할 워크플로 작업을 정의하는 REST API를 만들어야 합니다. 프로그래밍 언어, 프레임워크 및 호스팅 환경을 사용하여 REST API를 만들고 호스트할 수 있습니다. 이 문서에서는 C# Azure Functions를 사용하는 빠른 방법을 보여 줍니다. Azure Functions를 사용하면 먼저 VM(가상 머신)을 만들거나 웹 애플리케이션을 게시하지 않고도 서버리스 환경에서 코드를 실행할 수 있습니다.

필수 조건

1단계: 사용자 지정 인증 확장 REST API 만들기(Azure 함수 앱)

이 문서의 단계는 시작하는 포털에 따라 약간 다를 수 있습니다.

이 단계에서는 Azure Functions를 사용하여 HTTP 트리거 함수 API를 만듭니다. 함수 API는 사용자 흐름에 대한 비즈니스 논리의 원본입니다. 트리거 함수를 만든 후 다음 이벤트 중 하나에 대해 구성할 수 있습니다.

  1. 관리자 계정으로 Azure Portal에 로그인합니다.

  2. Azure Portal 메뉴 또는 페이지에서 리소스 만들기를 선택합니다.

  3. 함수 앱을 검색하여 선택하고 만들기를 선택합니다.

  4. 기본 사항 페이지에서 함수 앱 설정을 다음 표에서 지정한 대로 사용합니다.

    설정 제안 값 설명
    구독 구독 새 함수 앱을 만들 구독입니다.
    리소스 그룹 myResourceGroup 기존 리소스 그룹을 선택하거나 함수 앱을 만들 새 리소스 그룹의 이름을 선택합니다.
    함수 앱 이름 전역적으로 고유한 이름 새 함수 앱을 식별하는 이름입니다. 유효한 문자는 a-z(대/소문자 구분 안 함), 0-9-입니다.
    게시 코드 코드 파일 또는 Docker 컨테이너를 게시하는 옵션입니다. 이 자습서에서는 코드를 선택합니다.
    런타임 스택 .NET 선호하는 프로그래밍 언어입니다. 이 자습서에서는 .NET을 선택합니다.
    버전 6(LTS) In-process .NET 런타임의 버전입니다. In-process는 포털에서 함수를 만들고 수정할 수 있음을 의미하며, 이 가이드에 권장됩니다.
    지역 기본 지역 사용자 또는 함수가 액세스할 수 있는 기타 서비스에 가까운 지역을 선택합니다.
    운영 체제 Windows 운영 체제는 런타임 스택 선택에 따라 미리 선택됩니다.
    플랜 유형 사용량(서버리스) 함수 앱에 리소스가 할당되는 방법을 정의하는 호스팅 계획입니다.
  5. 검토 + 만들기를 선택하여 앱 구성 선택 항목을 검토한 다음, 만들기를 선택합니다. 배포에는 몇 분 정도 걸립니다.

  6. 배포되면 리소스로 이동을 선택하여 새 함수 앱을 봅니다.

1.1 HTTP 트리거 함수 만들기

이제 Azure 함수 앱을 만들었으므로 HTTP 요청으로 호출하려는 작업에 대한 HTTP 트리거 함수를 만듭니다. Microsoft Entra 사용자 지정 인증 확장에서 HTTP 트리거를 참조하고 호출합니다.

  1. 함수 앱의 개요 페이지 내에서 함수 창을 선택하고 Azure Portal에서 만들기 아래에서 함수 만들기를 선택합니다.
  2. 함수 만들기 창에서 개발 환경 속성을 포털에서 개발로 둡니다. 템플릿에서 HTTP 트리거를 선택합니다.
  3. 템플릿 세부 정보에서 새 함수 속성에 대해 CustomAuthenticationExtensionsAPI를 입력합니다.
  4. 권한 부여 수준에서 함수를 선택합니다.
  5. 만들기를 실행합니다.

1.2 OnAttributeCollectionStart에 대한 HTTP 트리거 구성

  1. 메뉴에서 코드 + 테스트를 선택합니다.
  2. 구현하려는 시나리오에 대해 아래 계속, 차단 또는 SetPrefillValues 탭을 선택합니다. 코드를 제공된 코드 조각으로 바꿉니다.
  3. 코드를 바꾼 후 상단 메뉴에서 함수 URL 가져오기을 선택하고 URL을 복사합니다. 이 URL을 대상 URL에 대한 2단계: 사용자 지정 인증 확장 만들기 및 등록에서 사용합니다.

이 HTTP 트리거를 사용하여 추가 작업이 필요하지 않은 경우 사용자가 등록 흐름을 계속할 수 있도록 합니다.

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Text;

public static async Task<object> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic request = JsonConvert.DeserializeObject(requestBody);


    var actions = new List<ContinueWithDefaultBehavior>{
        new ContinueWithDefaultBehavior { type = "microsoft.graph.attributeCollectionStart.continueWithDefaultBehavior"}
    };

    var dataObject = new Data {
        type = "microsoft.graph.onAttributeCollectionStartResponseData",
        actions= actions
    };

    dynamic response = new ResponseObject {
        data = dataObject
    };

    // Send the response
    return response;
}

public class ResponseObject
{
    public Data data { get; set; }
}

[JsonObject]
public class Data {
    [JsonProperty("@odata.type")]
    public string type { get; set; }
    public List<ContinueWithDefaultBehavior> actions { get; set; }
}

[JsonObject]
public class ContinueWithDefaultBehavior {
    [JsonProperty("@odata.type")]
    public string type { get; set; }
}

1.3 OnAttributeCollectionSubmit에 대한 HTTP 트리거 구성

  1. 메뉴에서 코드 + 테스트를 선택합니다.
  2. 구현하려는 시나리오에 대해 아래 계속, 차단, 값 수정 또는 유효성 검사 오류 탭을 선택합니다. 코드를 제공된 코드 조각으로 바꿉니다.
  3. 코드를 바꾼 후 상단 메뉴에서 함수 URL 가져오기을 선택하고 URL을 복사합니다. 이 URL을 대상 URL에 대한 2단계: 사용자 지정 인증 확장 만들기 및 등록에서 사용합니다.

이 HTTP 트리거를 사용하여 추가 작업이 필요하지 않은 경우 사용자가 등록 흐름을 계속할 수 있도록 합니다.

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Text;

public static async Task<object> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic request = JsonConvert.DeserializeObject(requestBody);
    
    var actions = new List<ContinueWithDefaultBehavior>{
        new ContinueWithDefaultBehavior { type = "microsoft.graph.attributeCollectionSubmit.continueWithDefaultBehavior"}
    };
						
    var dataObject = new Data {
        type = "microsoft.graph.onAttributeCollectionSubmitResponseData",
        actions= actions
    };
	    
	dynamic response = new ResponseObject {
        data = dataObject
    };

    // Send the response
    return response;
}

public class ResponseObject
{
    public Data data { get; set; }
}

[JsonObject]
public class Data {
    [JsonProperty("@odata.type")]
    public string type { get; set; }
    
    public List<ContinueWithDefaultBehavior> actions { get; set; }
}

[JsonObject]
public class ContinueWithDefaultBehavior {
    [JsonProperty("@odata.type")]
	public string type { get; set; }
}

2단계: 사용자 지정 인증 확장 만들기 및 등록

이 단계에서는 Microsoft Entra ID에서 Azure 함수를 호출하는 데 사용하는 사용자 지정 인증 확장을 등록합니다. 사용자 지정 인증 확장에는 REST API 엔드포인트에 대한 정보, REST API에서 구문 분석하는 특성 모음 시작 및 제출 작업, REST API에 인증하는 방법이 포함됩니다.

  1. 적어도 애플리케이션 관리자인증 관리자Microsoft Entra 관리 센터에 로그인합니다.

  2. ID>외부 ID>사용자 지정 인증 확장으로 이동합니다.

  3. 사용자 지정 확장 만들기를 선택합니다.

  4. 기본에서 AttributeCollectionStart 이벤트 또는 AttributeCollectionSubmit 이벤트를 선택한 다음, 다음을 선택합니다. 이전 단계의 구성 과 일치하는지 확인합니다.

  5. 엔드포인트 구성에서 다음 속성을 입력합니다.

    • 이름 - 사용자 지정 인증 확장의 이름입니다. 예를 들어 On Attribute Collection 이벤트가 있습니다.
    • 대상 URL - Azure 함수 URL의 {Function_Url}입니다.
    • 설명 - 사용자 지정 인증 확장에 대한 설명입니다.
  6. 다음을 선택합니다.

  7. API 인증에서 새 앱 등록 만들기 옵션을 선택하여 함수 앱을 나타내는 앱 등록을 만듭니다.

  8. 앱에 이름(예: Azure Functions 인증 이벤트 API)을 지정합니다.

  9. 다음을 선택합니다.

  10. 만들기를 선택하여 사용자 지정 인증 확장과 연결된 애플리케이션 등록을 만듭니다.

사용자 지정 인증 확장을 만든 후 등록한 앱에 애플리케이션 동의를 부여하여 사용자 지정 인증 확장이 API에 인증할 수 있도록 합니다.

  1. ID>외부 ID>사용자 지정 인증 확장(미리 보기)으로 이동합니다.
  2. 목록에서 사용자 지정 인증 확장을 선택합니다.
  3. 개요 탭에서 권한 부여 버튼을 선택하여 등록한 앱에 대한 관리자 동의를 제공합니다. 사용자 지정 인증 확장은 client_credentialsReceive custom authentication extension HTTP requests 권한을 사용하여 Azure 함수 앱을 인증합니다. 수락을 선택합니다.

3단계: 사용자 흐름에 사용자 지정 인증 확장 추가

이제 사용자 지정 인증 확장을 하나 이상의 사용자 흐름과 연결할 수 있습니다.

참고 항목

사용자 흐름을 만들어야 하는 경우 고객에 대한 등록 및 로그인 사용자 흐름 만들기의 단계를 따릅니다.

3.1 기존 사용자 흐름에 사용자 지정 인증 확장 추가

  1. 애플리케이션 관리자인증 관리자 이상으로 Microsoft Entra 관리 센터에 로그인합니다.

  2. 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 설정 아이콘 을 사용하여 외부 테넌트로 전환합니다.

  3. ID>External Identities>사용자 흐름으로 이동합니다.

  4. 목록에서 사용자 흐름을 선택합니다.

  5. 사용자 지정 인증 확장을 선택합니다.

  6. 사용자 지정 인증 확장 페이지에서 사용자 지정 인증 확장을 사용자 흐름의 두 가지 단계에 연결할 수 있습니다.

    • 사용자로부터 정보를 수집하기 전에 OnAttributeCollectionStart 이벤트와 연결됩니다. 편집 연필을 선택합니다. OnAttributeCollectionStart 이벤트에 대해 구성된 사용자 지정 확장만 표시됩니다. 특성 모음 시작 이벤트에 대해 구성한 애플리케이션을 선택한 다음 선택을 선택합니다.
    • 사용자가 정보를 제출할 때 OnAttributeCollectionSubmit 이벤트와 연결됩니다. OnAttributeCollectionSubmit 이벤트에 대해 구성된 사용자 지정 확장만 표시됩니다. 특성 모음 제출 이벤트에 대해 구성한 애플리케이션을 선택한 다음 선택을 선택합니다.
  7. 두 특성 모음 단계 옆에 나열된 애플리케이션이 올바른지 확인합니다.

  8. 저장 아이콘을 선택합니다.

4단계: 애플리케이션 테스트

토큰을 가져와서 사용자 지정 인증 확장을 테스트하려면 https://jwt.ms 앱을 사용하면 됩니다. 토큰의 디코딩된 콘텐츠를 표시하는 Microsoft 자체 웹 애플리케이션입니다(토큰의 콘텐츠는 브라우저를 떠나지 않음).

다음 단계에 따라 jwt.ms 웹 애플리케이션을 등록합니다.

4.1 jwt.ms 웹 애플리케이션 등록

  1. 최소한 응용 프로그램 관리자Microsoft Entra 관리 센터에 로그인합니다.
  2. ID>애플리케이션>애플리케이션 등록으로 이동합니다.
  3. 새 등록을 선택합니다.
  4. 애플리케이션의 이름을 입력합니다. 예를 들어 내 테스트 애플리케이션입니다.
  5. 지원되는 계정 유형에서 이 조직 디렉터리의 계정만을 선택합니다.
  6. 리디렉션 URI플랫폼 선택 드롭다운에서 을 선택한 다음, URL 텍스트 상자에 https://jwt.ms를 입력합니다.
  7. 등록을 선택하여 앱 등록을 완료합니다.

4.2 애플리케이션 ID 가져오기

앱 등록의 개요에서 애플리케이션(클라이언트) ID를 복사합니다. 이후 단계에서 앱 ID를 <client_id>라고 합니다. Microsoft Graph에서는 appId 속성으로 참조됩니다.

4.3 암시적 흐름 사용

jwt.ms 테스트 애플리케이션은 암시적 흐름을 사용합니다. 내 테스트 애플리케이션 등록 시 암시적 흐름을 사용하도록 설정합니다.

  1. 관리에서 인증을 선택합니다.
  2. 암시적 허용 및 하이브리드 흐름 아래에서 ID 토큰(암시적 및 하이브리드 흐름에 사용됨) 확인란을 선택합니다.
  3. 저장을 선택합니다.

5단계: Azure Function 보호

Microsoft Entra 사용자 지정 인증 확장은 서버 간 흐름을 사용하여 HTTP Authorization 헤더에서 Azure Function으로 보내는 액세스 토큰을 가져옵니다. 특히 프로덕션 환경에서 Azure에 함수를 게시할 때 권한 부여 헤더에서 보낸 토큰의 유효성을 검사해야 합니다.

Azure Function을 보호하려면 다음 단계에 따라 들어오는 토큰의 유효성을 검사하기 위해 Azure Functions 인증 이벤트 API 애플리케이션 등록과 Microsoft Entra 인증을 통합합니다.

참고 항목

Azure 함수 앱이 사용자 지정 인증 확장이 등록된 테넌트가 아닌 다른 Azure 테넌트에서 호스트되는 경우 5.1 OpenID Connect ID 공급자 사용 단계로 건너뜁니다.

5.1 Azure Function에 ID 공급자 추가

  1. Azure Portal에 로그인합니다.

  2. 이전에 게시한 함수 앱을 탐색하고 선택합니다.

  3. 왼쪽 메뉴에서 인증을 선택합니다.

  4. ID 공급자 추가를 선택합니다.

  5. Microsoft를 ID 공급자로 선택합니다.

  6. 테넌트 유형으로 고객을 선택합니다.

  7. 앱 등록에서 사용자 지정 클레임 공급자를 client_id 등록할 때 이전에 만든 Azure Functions 인증 이벤트 API 앱 등록을 입력합니다.

  8. 발급자 URL경우 다음 URLhttps://{domainName}.ciamlogin.com/{tenant_id}/v2.0을 입력합니다.

    • {domainName}는 외부 테넌트 기본 이름입니다.
    • {tenantId} 는 외부 테넌트의 테넌트 ID입니다. 사용자 지정 인증 확장은 여기에 등록해야 합니다.
  9. 인증되지 않은 요청에서 ID 공급자로 HTTP 401 권한 없음을 선택합니다.

  10. 토큰 저장소 옵션을 선택 취소합니다.

  11. 추가를 선택하여 Azure Function에 인증을 추가합니다.

    외부 테넌트에 있는 동안 함수 앱에 인증을 추가하는 방법을 보여 주는 스크린샷

5.2 OpenID 커넥트 ID 공급자 사용

5단계: Azure 함수 보호를 구성한 경우 이 단계를 건너뜁니다. 그러지 않으면 Azure Function이 사용자 지정 인증 확장이 등록된 테넌트와 다른 테넌트에서 호스트되는 경우 다음 단계에 따라 함수를 보호합니다.

  1. Azure Portal에 로그인한 다음 이전에 게시한 함수 앱으로 이동하여 선택합니다.

  2. 왼쪽 메뉴에서 인증을 선택합니다.

  3. ID 공급자 추가를 선택합니다.

  4. ID 공급자로 OpenID Connect를 선택합니다.

  5. Contoso Microsoft Entra ID와 같은 이름을 제공합니다.

  6. 메타데이터 항목에서 문서 URL에 다음 URL을 입력합니다. {tenantId}를 Microsoft Entra 테넌트 ID로 바꿉니다.

    https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration
    
  7. 앱 등록에서 이전에 만든Azure Functions 인증 이벤트 API 앱 등록의 애플리케이션 ID(클라이언트 ID)를 입력합니다.

  8. Microsoft Entra 관리 센터에서 다음을 수행합니다.

    1. 이전에 만든Azure Functions 인증 이벤트 API 앱 등록을 선택합니다.
    2. 인증서 및 비밀>클라이언트 암호>새 클라이언트 암호를 선택합니다.
    3. 클라이언트 비밀에 대한 설명을 추가합니다.
    4. 암호에 대해 만료를 선택하거나 사용자 지정 수명을 지정합니다.
    5. 추가를 선택합니다.
    6. 클라이언트 애플리케이션 코드에서 사용할 비밀 을 기록합니다. 이 비밀 값은 이 페이지에서 나가면 다시 표시되지 않습니다.
  9. Azure 함수로 돌아간 후, 앱 등록에서 클라이언트 암호를 입력합니다.

  10. 토큰 저장소 옵션을 선택 취소합니다.

  11. 추가를 선택하여 OpenID Connect ID 공급자를 추가합니다.

6단계: 애플리케이션 테스트

사용자 지정 인증 확장을 테스트하려면 다음 단계를 수행합니다.

  1. 새 프라이빗 브라우저를 열고 다음 URL로 이동합니다.

    https://<domainName>.ciamlogin.com/<tenant_id>/oauth2/v2.0/authorize?client_id=<client_id>&response_type=code+id_token&redirect_uri=https://jwt.ms&scope=openid&state=12345&nonce=12345
    
    • <domainName> 외부 테넌트 이름으로 바꾸고 외부 테넌트 ID로 대체 <tenant-id> 합니다.
    • <client_id>을(를) 사용자 흐름에 추가한 애플리케이션의 ID로 바꿉니다.
  2. 로그인하면 https://jwt.ms에 디코딩된 토큰이 표시됩니다.

다음 단계