다음을 통해 공유


시나리오: Web API가 Web API를 대신 호출(대리 호출 시나리오)

사용자 역할을 하는 또 다른 Web API를 호출하는 Web API를 빌드하는 방법을 알아봅니다.

이 문서를 읽기 전에 AD FS 개념On-Behalf_Of 흐름을 숙지해야 합니다.

Overview

  • 아래 다이어그램에 표시되지 않은 클라이언트(웹 앱)는 보호된 웹 API를 호출하고 "권한 부여" Http 헤더에 JWT 전달자 토큰을 제공합니다.

  • 보호된 Web API는 토큰의 유효성을 검사하고 MSAL AcquireTokenOnBehalfOf 메서드를 사용하여 AD FS에서 다른 토큰을 요청하여 사용자를 대신하여 두 번째 웹 API(다운스트림 웹 API라는 이름)를 호출할 수 있게 합니다.

  • 보호된 웹 API는 이 토큰으로 다운스트림 API를 호출합니다. AcquireTokenSilentlater를 호출하여 다른 다운스트림 API에 대한 토큰을 요청할 수도 있습니다(그러나 여전히 동일한 사용자를 대신함). AcquireTokenSilent는 필요할 때 토큰을 새로 고칩니다.

    overview

To better understand how to configure on behalf of auth scenario in AD FS, let's use a sample available here and walkthrough the app registration and code configuration steps.

Pre-requisites

  • GitHub 클라이언트 도구
  • AD FS 2019 이상 구성 및 실행
  • Visual Studio 2013 이상

AD FS에 앱 등록

이 섹션는 네이티브 앱을 공용 클라이언트로 등록하고 Web API를 AD FS에서 RP(신뢰 당사자)로 등록하는 방법을 설명합니다.

  1. In AD FS Management, right-click on Application Groups and select Add Application Group.

  2. On the Application Group Wizard, for the Name enter WebApiToWebApi and under Client-Server applications select the Native application accessing a Web API template. Click Next.

    네이티브 애플리케이션이 웹 API 템플릿에 액세스하는 것을 강조표시한 애플리케이션 그룹 추가 마법사의 시작 페이지 스크린샷.

  3. Copy the Client Identifier value. It will be used later as the value for ClientId in the application's App.config file. Enter the following for Redirect URI: - https://ToDoListClient. Click Add. Click Next.

    리디렉션 U R I를 보여주는 애플리케이션 그룹 추가 마법사의 네이티브 애플리케이션 페이지의 스크린샷.

  4. On the Configure Web API screen, enter the Identifier:https://localhost:44321/. Click Add. Click Next. This value will be used later in the application's App.config and Web.Config files.

    올바른 식별자를 보여주는 애플리케이션 그룹 추가 마법사의 Web API 구성 페이지의 스크린샷.

  5. On the Apply Access Control Policy screen, select Permit everyone and click Next.

    모든 사용자 허용 옵션이 강조 표시된 애플리케이션 그룹 추가 마법사의 액세스 제어 정책 선택 페이지 스크린샷.

  6. On the Configure Application Permissions screen, select openid and user_impersonation. Click Next.

    선택한 열린 I D를 보여주는 애플리케이션 그룹 추가 마법사의 애플리케이션 사용 권한 구성 페이지 스크린샷.

  7. On the Summary screen, click Next.

  8. On the Complete screen, click Close.

  9. In AD FS Management, click on Application Groups and select WebApiToWebApi application group. Right-click and select Properties.

    강조 표시된 WebApiToWebApi 그룹과 드롭다운 목록의 속성 옵션을 보여주는 A D F S 관리 대화 상자의 스크린샷.

  10. On WebApiToWebApi properties screen, click Add application….

    WebApiToWebApi - Web A P I 애플리케이션이 나열된 것을 보여주는 WebApiToWebApi 속성 대화 상자의 스크린샷.

  11. Under Standalone applications, select Server application.

    서버 애플리케이션 옵션이 강조 표시된 WebApiToWebApi 마법사에 새 애플리케이션을 추가하기 위한 시작 페이지의 스크린샷.

  12. On Server Application screen, add https://localhost:44321/ as the Client Identifier and Redirect URI.

    WebApiToWebApi 마법사에서 새 애플리케이션을 추가하기 위한 단계 중 서버 애플리케이션 페이지의 스크린샷으로, 올바른 클라이언트 식별자 및 리디렉션 URI를 보여줍니다.

  13. 애플리케이션 자격 증명 구성 화면에서 공유 비밀 생성을 선택합니다. 나중에 사용할 비밀을 복사합니다.

    선택한 공유 비밀 생성 옵션과 생성된 공유 비밀이 강조 표시된 것을 보여주는 WebApiToWebApi에 새 애플리케이션 추가 마법사의 애플리케이션 자격 증명 애플리케이션 구성 페이지의 스크린샷.

  14. On the Summary screen, click Next.

  15. On the Complete screen, click Close.

  16. In AD FS Management, click on Application Groups and select WebApiToWebApi application group. Right-click and select Properties.

    강조 표시된 WebApiToWebApi 그룹과 드롭다운 목록의 속성 옵션을 보여주는 A D F S 관리 대화 상자의 두 번째 스크린샷.

  17. On WebApiToWebApi properties screen, click Add application….

    WebApiToWebApi - Web A P I 애플리케이션이 나열된 것을 보여주는 WebApiToWebApi 속성 대화 상자의 두 번째 스크린샷.

  18. Under Standalone applications, select Web API.

    강조 표시된 웹 A P I 옵션을 보여주는 WebApiToWebApi 마법사에 새 애플리케이션 추가의 시작 페이지 스크린샷.

  19. On Configure Web API, add https://localhost:44300 as the Identifier.

    올바른 리디렉션 U R I를 보여주는 WebApiToWebApi 마법사에 새 애플리케이션 추가 마법사의 Web A P I 구성 페이지의 스크린샷.

  20. On the Apply Access Control Policy screen, select Permit everyone and click Next.

    모든 사용자 허용 옵션이 강조 표시된 WebApiToWebApi에 새 애플리케이션 추가 마법사의 액세스 제어 정책 선택 페이지의 스크린샷.

  21. On the Configure Application Permissions screen, click Next.

    다음 옵션이 호출된 것을 보여주는 WebApiToWebApi 마법사에 새 애플리케이션 추가의 애플리케이션 사용 권한 구성 페이지의 스크린샷.

  22. On the Summary screen, click Next.

  23. On the Complete screen, click Close.

  24. WebApiToWebApi – Web API 2 속성 화면에서 확인 클릭

  25. WebApiToWebApi 속성 화면에서 WebApiToWebApi – Web API를 선택하고 편집…을 클릭합니다.

    강조표시된 WebApiToWebApi - Web A P I 애플리케이션을 보여주는 WebApiToWebApi 속성 대화 상자의 스크린샷.

  26. WebApiToWebApi – Web API 속성 화면에서 발급 변환 규칙 탭을 선택하고 규칙 추가…를 클릭합니다.

    발급 변환 규칙 탭을 보여주는 WebApiToWebApi - Web A P I 속성 대화 상자의 스크린샷.

  27. 추가 변환 클레임 규칙 마법사의 드롭다운에서 사용자 지정 규칙으로 클레임 전송을 선택하고 다음을 클릭합니다.

    선택된 사용자 지정 규칙 옵션을 사용하여 클레임 보내기 옵션을 선택한 변형 클레임 규칙 추가 마법사의 규칙 템플릿 선택 페이지의 스크린샷.

  28. Enter PassAllClaims in Claim rule name: field and x:[] => issue(claim=x); claim rule in Custom rule: field and click Finish.

    위에서 설명한 구성을 보여주는 변환 클레임 규칙 추가 마법사의 규칙 구성 페이지의 스크린샷.

  29. WebApiToWebApi – Web API 속성 화면에서 확인 클릭

  30. WebApiToWebApi 속성 화면에서 WebApiToWebApi – Web API 2를 선택하고 편집… 클릭
    강조표시된 WebApiToWebApi - Web A P I 2 애플리케이션을 보여주는 WebApiToWebApi 속성 대화 상자의 스크린샷.

  31. WebApiToWebApi – Web API 2 속성 화면에서 발급 변환 규칙 탭을 선택하고 규칙 추가…를 클릭합니다.

  32. 변환 클레임 규칙 마법사의 화면에서 드롭다운 메뉴에서 사용자 지정 규칙을 사용하여 클레임 보내기를 선택하고 다음을 클릭하십시오. 변환 클레임 규칙 추가 마법사의 규칙 템플릿 선택 페이지에서 사용자 지정 규칙 옵션을 선택한 두 번째 스크린샷입니다.

  33. PassAllClaims를 Claim rule name: 필드에 입력하고, 그리고 x:[] => issue(claim=x); claim rule를 Custom rule: 필드에 입력한 다음 마침을 클릭합니다.

    위에서 설명한 구성을 보여주는 변환 클레임 규칙 추가 마법사의 규칙 구성 페이지의 두 번째 스크린샷.

  34. WebApiToWebApi – Web API 2 속성 화면과 WebApiToWebApi 속성 화면에서 확인을 각각 클릭합니다.

Code Configuration

이 섹션는 다른 Web API를 호출하도록 Web API를 구성하는 방법을 설명합니다.

  1. Download the sample from here

  2. Visual Studio를 사용하여 샘플 열기

  3. App.config 파일을 엽니다. 다음을 수정합니다.

    • ida:Authority - https://[당신의 AD FS 호스트 이름]/adfs/ 를 입력하세요.

    • ida:ClientId - 위의 AD FS 섹션에서 앱 등록의 #3 값을 입력합니다.

    • ida:RedirectUri - 위의 AD FS 섹션에서 앱 등록의 #3 값을 입력합니다.

    • todo:TodoListResourceId – 위의 AD FS 섹션에서 앱 등록에서 #4의 식별자 값 입력

    • ida: todo:TodoListBaseAddress - 위의 AD FS 섹션에서 앱 등록에서 #4의 식별자 값을 입력합니다.

      수정된 값을 보여주는 앱 구성 파일의 스크린샷.

  4. ToDoListService 아래의 Web.config 파일을 엽니다. 다음을 수정합니다.

    • ida:Audience - 위의 AD FS 섹션에서 앱 등록에서 #12의 클라이언트 식별자 값을 입력합니다.

    • ida:ClientId - 위의 AD FS 섹션에서 앱 등록에서 #12의 클라이언트 식별자 값을 입력합니다.

    • Ida: ClientSecret - 위의 AD FS 섹션에서 앱 등록에서 #13에서 복사한 공유 비밀을 입력합니다.

    • ida:RedirectUri - 위의 AD FS 섹션에서 앱 등록의 #12에서 RedirectUri 값을 입력합니다.

    • ida: AdfsMetadataEndpoint - https://[AD FS 호스트 이름]/federationmetadata/2007-06/federationmetadata.xml에 접속합니다.

    • ida:OBOWebAPIBase - 위의 AD FS 섹션에서 앱 등록에서 #19의 식별자 값을 입력합니다.

    • ida:Authority - 입력 https://[your AD FS hostname]/adfs

      수정된 값을 보여주는 ToDoListService 아래의 웹 구성 파일 스크린샷.

  5. WebAPIOBO 아래의 Web.config 파일을 엽니다. 다음을 수정합니다.

    • ida: AdfsMetadataEndpoint - https://[AD FS 호스트 이름]/federationmetadata/2007-06/federationmetadata.xml에 접속합니다.

    • ida:Audience - 위의 AD FS 섹션에서 앱 등록에서 #12의 클라이언트 식별자 값을 입력합니다.

      수정된 값을 보여주는 WebAPIOBO 아래의 웹 구성 파일 스크린샷.

샘플 테스트

이 섹션은 위에서 구성한 샘플을 테스트하는 방법을 보여줍니다.

코드가 변경되면 솔루션을 다시 빌드

  1. Visual Studio에서 솔루션을 마우스 오른쪽 단추로 클릭하고 시작 프로젝트 설정... 선택

    프로젝트 시작 설정 옵션이 강조 표시된 솔루션을 마우스 오른쪽 단추로 클릭할 때 표시되는 목록의 스크린샷.

  2. On the Properties pages make sure Action is set to Start for each of the Projects, except TodoListSPA.

    선택한 여러 시작 프로젝트 옵션과 모든 프로젝트의 작업이 시작으로 설정된 것을 보여주는 솔루션 속성 페이지 대화 상자의 스크린샷.

  3. Visual Studio 맨 위에서 녹색 화살표를 클릭합니다.

    시작 옵션이 호출된 Visual Studio UI의 스크린샷.

  4. On the Native App's Main Screen, click on Sign In.

    할 일 목록 클라이언트 대화 상자의 스크린샷.

    네이티브 앱 화면이 표시되지 않으면 시스템에 프로젝트 리포지토리가 저장된 폴더에서 *msalcache.bin 파일을 검색하여 제거합니다.

  5. AD FS 로그인 페이지로 리디렉션될 수 있습니다. 로그인하세요.

    로그인 페이지의 스크린샷.

  6. 로그인한 후에 할 일 만들기 항목에서 Web Api 호출에 대한 텍스트 Web Api를 입력합니다. Click Add item. 그러면 Web API(To Do List Service)를 호출한 다음 Web API 2(WebAPIOBO)를 호출하여 캐시에 항목을 추가합니다.

    할 일 항목 섹션을 채우는 새 할 일 항목이 있는 할 일 목록 클라이언트 대화 상자의 스크린샷.

Next Steps

AD FS OpenID Connect/OAuth 흐름 및 애플리케이션 시나리오