다음을 통해 공유


빠른 시작: SPA(단일 페이지 앱)에서 사용자를 로그인하고 Microsoft Graph API를 호출합니다.

이 빠른 시작에서는 샘플 SPA(단일 페이지 앱)를 사용하여 PKCE(Proof Key for Code Exchange)와 함께 인증 코드 흐름 사용하여 사용자를 로그인하고 Microsoft Graph API를 호출하는 방법을 보여 줍니다. 이 샘플에서는 Microsoft 인증 라이브러리 사용하여 인증을 처리합니다.

필수 구성 요소

  • 활성 구독이 있는 Azure 계정입니다. 계정이 없으면 무료 계정을 만드세요.
  • 이 Azure 계정에는 애플리케이션을 관리할 수 있는 권한이 있어야 합니다. 다음 Microsoft Entra 역할에는 필요한 권한이 포함됩니다.
    • 애플리케이션 관리자
    • 애플리케이션 개발자
    • 클라우드 애플리케이션 관리자.
  • Node.js.
  • Visual Studio Code 또는 다른 코드 편집기.

애플리케이션 및 레코드 식별자 등록

등록을 완료하려면 애플리케이션에 이름을 제공하고, 지원되는 계정 유형을 지정하고, 리디렉션 URI를 추가합니다. 등록되면 애플리케이션 개요 창에 애플리케이션 소스 코드에 필요한 식별자가 표시됩니다.

  1. Microsoft Entra 관리 센터에 로그인합니다.

  2. 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 설정 아이콘 사용하여 디렉터리 + 구독 메뉴에서 애플리케이션을 등록하려는 테넌트로 전환합니다.

  3. ID>애플리케이션>앱 등록찾아 새 등록 선택합니다.

  4. 애플리케이션을 위한 이름을 입력합니다. 예를 들어, identity-client-spa같은 것입니다.

  5. 지원되는 계정 유형경우 이 조직 디렉터리에서 계정만선택합니다. 다양한 계정 유형에 대한 정보를 보려면 내게 선택을 도와주세요 옵션을 선택하세요.

  6. 등록선택합니다.

    Microsoft Entra 관리 센터에서 이름을 입력하고 계정 유형을 선택하는 방법을 보여 주는 스크린샷

  7. 등록이 완료되면 애플리케이션의 개요 창이 표시됩니다. 애플리케이션 소스 코드에서 사용할 디렉터리(테넌트) ID애플리케이션(클라이언트) ID 기록합니다.

    Microsoft Entra 관리 센터의 개요 페이지에 있는 식별자 값을 보여 주는 스크린샷

    메모

    지원되는 계정 유형은 애플리케이션 지원하는 계정 수정참조하여 변경할 수 있습니다.


플랫폼 리디렉션 URI 추가

앱 등록에 앱 유형을 지정하려면 다음 단계를 수행합니다.

  1. 관리아래에서 인증선택합니다.
  2. 플랫폼 구성 페이지에서 플랫폼 추가선택한 다음, SPA 옵션을 선택합니다.
  3. 리디렉션 URI에 http://localhost:3000을(를) 입력하세요.
  4. 구성을 선택하여 변경 내용을 저장합니다.

샘플 애플리케이션 복제 또는 다운로드

샘플 애플리케이션을 가져오려면 GitHub에서 복제하거나 .zip 파일로 다운로드할 수 있습니다.

  • 샘플을 복제하려면 명령 프롬프트를 열고 프로젝트를 만들 위치로 이동하고 다음 명령을 입력합니다.

    git clone https://github.com/Azure-Samples/ms-identity-docs-code-javascript.git
    
  • .zip 파일다운로드합니다. 이름 길이가 260자 미만인 파일 경로로 추출합니다.

프로젝트 구성

  1. IDE에서 샘플이 포함된 ms-identity-docs-code-javascript 프로젝트 폴더를 엽니다.

  2. vanillajs-spa/App/public/authConfig.js 열고 관리 센터에 기록된 정보로 다음 값을 업데이트합니다.

    /**
     * Configuration object to be passed to MSAL instance on creation. 
     * For a full list of MSAL.js configuration parameters, visit:
     * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md 
     */
    const msalConfig = {
        auth: {
    
             // WORKFORCE TENANT
             authority: "https://login.microsoftonline.com/Enter_the_Tenant_Info_Here", //  Replace the placeholder with your tenant info
             // EXTERNAL TENANT
             // authority: "https://Enter_the_Tenant_Subdomain_Here.ciamlogin.com/", // Replace the placeholder with your tenant subdomain
            redirectUri: '/', // You must register this URI on App Registration. Defaults to window.location.href e.g. http://localhost:3000/
            navigateToLoginRequestUrl: true, // If "true", will navigate back to the original request location before processing the auth code response.
        },
        cache: {
            cacheLocation: 'sessionStorage', // Configures cache location. "sessionStorage" is more secure, but "localStorage" gives you SSO.
            storeAuthStateInCookie: false, // set this to true if you have to support IE
        },
        system: {
            loggerOptions: {
                loggerCallback: (level, message, containsPii) => {
                    if (containsPii) {
                        return;
                    }
                    switch (level) {
                        case msal.LogLevel.Error:
                            console.error(message);
                            return;
                        case msal.LogLevel.Info:
                            console.info(message);
                            return;
                        case msal.LogLevel.Verbose:
                            console.debug(message);
                            return;
                        case msal.LogLevel.Warning:
                            console.warn(message);
                            return;
                    }
                },
            },
        },
    };
    
    /**
     * Scopes you add here will be prompted for user consent during sign-in.
     * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request.
     * For more information about OIDC scopes, visit: 
     * https://learn.microsoft.com/en-us/entra/identity-platform/permissions-consent-overview#openid-connect-scopes
     * https://learn.microsoft.com/en-us/entra/identity-platform/permissions-consent-overview#openid-connect-scopes
     */
    const loginRequest = {
        scopes: ["User.Read"],
    };
    
    /**
     * An optional silentRequest object can be used to achieve silent SSO
     * between applications by providing a "login_hint" property.
     */
    
    // const silentRequest = {
    //   scopes: ["openid", "profile"],
    //   loginHint: "example@domain.net"
    // };
    
    // exporting config object for jest
    if (typeof exports !== 'undefined') {
        module.exports = {
            msalConfig: msalConfig,
            loginRequest: loginRequest,
        };
        module.exports = {
            msalConfig: msalConfig,
            loginRequest: loginRequest,
        };
    }
    
    • clientId - 클라이언트라고도 하는 애플리케이션의 식별자입니다. 따옴표의 텍스트를 이전에 기록된 애플리케이션(클라이언트) ID 값으로 바꿉니다.
    • authority - 권한은 MSAL이 토큰을 요청할 수 있는 디렉터리를 나타내는 URL입니다. Enter_the_Tenant_Info_Here 이전에 기록된 디렉터리(테넌트) ID 값으로 바꿉니다.
    • redirectUri - 애플리케이션의 리디렉션 URI. 필요한 경우 따옴표로 된 텍스트를 이전에 기록된 리디렉션 URI로 바꿉니다.

애플리케이션 실행 및 로그인 및 로그아웃

Node.js사용하여 웹 서버에서 프로젝트를 실행합니다.

  1. 서버를 시작하려면 프로젝트 디렉터리 내에서 다음 명령을 실행합니다.

    cd vanillajs-spa/App
    npm install
    npm start
    
  2. 터미널에 표시되는 https URL(예: https://localhost:3000)을 복사하여 브라우저에 붙여넣습니다. 프라이빗 또는 시크릿 브라우저 세션을 사용하는 것이 좋습니다.

  3. 단계를 수행하고 필요한 세부 정보를 입력하여 Microsoft 계정으로 로그인합니다. 한 번 암호를 보낼 수 있도록 전자 메일 주소를 요청합니다. 메시지가 표시되면 코드를 입력합니다.

  4. 애플리케이션은 액세스 권한을 부여한 데이터에 대한 액세스를 유지하고 로그인하여 프로필을 읽을 수 있는 권한을 요청합니다. 수락선택합니다. 애플리케이션에 로그인하고 Microsoft Graph API에서 프로필 세부 정보에 액세스했음을 나타내는 다음 스크린샷이 나타납니다.

    API 호출 결과를 보여 주는 JavaScript 앱의 스크린샷

필수 구성 요소

  • 외부 테넌트입니다. 만들려면 다음 방법 중에서 선택합니다.
  • 이 Azure 계정에는 애플리케이션을 관리할 수 있는 권한이 있어야 합니다. 다음 Microsoft Entra 역할에는 필요한 권한이 포함됩니다.
    • 애플리케이션 관리자
    • 애플리케이션 개발자
    • 클라우드 애플리케이션 관리자.
  • Node.js.
  • Visual Studio Code 또는 다른 코드 편집기.

애플리케이션 및 레코드 식별자 등록

애플리케이션이 Microsoft Entra를 사용하여 사용자를 로그인할 수 있도록 하려면 사용자가 만든 애플리케이션을 Microsoft Entra 외부 ID로 인식해야 합니다. 앱 등록은 앱과 Microsoft Entra 간에 트러스트 관계를 설정합니다. 애플리케이션을 등록할 때 외부 ID는 인증 요청을 만들 때 앱을 식별하는 데 사용되는 값인 애플리케이션(클라이언트) ID알려진 고유 식별자를 생성합니다.

다음 단계에서는 Microsoft Entra 관리 센터에서 앱을 등록하는 방법을 보여 줍니다.

  1. Microsoft Entra 관리 센터애플리케이션 개발자이상으로 로그인하세요.

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

  3. 아이덴티티>>앱 등록로 이동합니다.

  4. + 새 등록선택합니다.

  5. 표시되는 애플리케이션 등록 페이지

    1. 앱 사용자에게 표시되는 의미 있는 애플리케이션 이름 입력합니다(예: ciam-client-app ).
    2. 지원되는 계정 유형에서 이 조직 디렉터리의 계정만을 선택합니다.
  6. 등록선택합니다.

  7. 등록에 성공하면 애플리케이션의 개요 창이 표시됩니다. 애플리케이션 소스 코드에서 사용할 애플리케이션(클라이언트) ID 기록합니다.

플랫폼 리디렉션 URI 추가

앱 등록에 앱 유형을 지정하려면 다음 단계를 수행합니다.

  1. 관리아래에서 인증선택합니다.
  2. 플랫폼 구성 페이지에서 플랫폼 추가선택한 다음, SPA 옵션을 선택합니다.
  3. 리디렉션 URI에 http://localhost:3000를 입력합니다.
  4. 구성을 선택하여 변경 내용을 저장합니다.

애플리케이션을 등록하면 User.Read 권한이 할당됩니다. 그러나 테넌트는 외부 테넌트이므로 고객 사용자 자체는 이 권한에 동의할 수 없습니다. 테넌트 관리자는 테넌트에 있는 모든 사용자를 대신하여 이 권한에 동의해야 합니다.

  1. 앱 등록 페이지에서 만든 애플리케이션(예: ciam-client-app)을 선택하여 개요 페이지를 엽니다.

  2. 관리아래에서 API 권한을 선택합니다.

    1. 테넌트 이름><대한 관리자 동의 부여선택한 다음, 선택합니다.
    2. 새로 고침를 선택한 다음, 테넌트 이름><에 대해 부여된 것이 상태 아래에 표시되는지 확인합니다.

사용자 흐름 만들기

고객이 앱을 사용할 때 등록 또는 로그인 환경을 보려면 앱을 사용자 흐름과 연결해야 합니다. 많은 애플리케이션을 사용자 흐름과 연결할 수 있지만 단일 애플리케이션은 하나의 사용자 흐름에만 연결할 수 있습니다.

  1. 사이드바 메뉴에서 Identity을 선택합니다.

  2. 외부 ID을 선택한 다음 사용자 흐름을 선택하세요.

  3. 사용자 흐름 페이지에서 앞에서 만든 사용자 흐름 이름(예: SignInSignUpSample )을 선택합니다.

  4. 사용에서 애플리케이션선택합니다.

  5. 애플리케이션 을 선택하여추가합니다.

  6. ciam-client-app 같은 목록에서 애플리케이션을 선택하거나 검색 상자를 사용하여 애플리케이션을 찾은 다음 선택합니다.

  7. 선택합니다.

앱을 사용자 흐름과 연결한 후에는 Microsoft Entra 관리 센터 내에서 애플리케이션에 대한 사용자의 등록 또는 로그인 환경을 시뮬레이션하여 사용자 흐름을 테스트할 수 있습니다. 이렇게 하려면 등록 및 로그인 사용자 흐름 테스트하기단계를 사용합니다.

SPA를 사용자 흐름과 연결

고객이 앱을 사용할 때 등록 또는 로그인 환경을 보려면 앱을 사용자 흐름과 연결해야 합니다. 많은 애플리케이션을 사용자 흐름과 연결할 수 있지만 단일 애플리케이션은 하나의 사용자 흐름에만 연결할 수 있습니다.

  1. 사이드바 메뉴에서 신원을 선택합니다.

  2. 외부 ID을 선택하고, 그 다음에 사용자 흐름을 선택하세요.

  3. 사용자 흐름 페이지에서 앞에서 만든 사용자 흐름 이름(예: SignInSignUpSample )을 선택합니다.

  4. 사용 중 애플리케이션을 선택합니다.

  5. 애플리케이션추가를 선택합니다.

  6. ciam-client-app 같은 목록에서 애플리케이션을 선택하거나 검색 상자를 사용하여 애플리케이션을 찾은 다음 선택합니다.

  7. 선택합니다.

앱을 사용자 흐름과 연결한 후에는 Microsoft Entra 관리 센터 내에서 애플리케이션에 대한 사용자의 등록 또는 로그인 환경을 시뮬레이션하여 사용자 흐름을 테스트할 수 있습니다. 등록 및 로그인 사용자 흐름을 테스트하려면 단계의을 사용하세요.

샘플 SPA 복제 또는 다운로드

샘플 애플리케이션을 가져오려면 GitHub에서 복제하거나 .zip 파일로 다운로드할 수 있습니다.

  • 샘플을 복제하려면 명령 프롬프트를 열고 프로젝트를 만들 위치로 이동하고 다음 명령을 입력합니다.

    git clone https://github.com/Azure-Samples/ms-identity-ciam-javascript-tutorial.git
    
  • 샘플다운로드합니다. 이름 길이가 260자 미만인 파일 경로로 추출합니다.

샘플 SPA 구성

  1. App/public/authConfig.js 열고 다음을 Microsoft Entra 관리 센터에서 가져온 값으로 바꿉다.

    • Enter_the_Application_Id_Here 이전에 등록한 앱의 애플리케이션(클라이언트) ID로 바꿉니다.
    • Enter_the_Tenant_Subdomain_Here 디렉터리(테넌트) 하위 도메인으로 바꿉니다. 예를 들어 테넌트 주 도메인이 contoso.onmicrosoft.com경우 contoso사용합니다. 테넌트 이름이 없는 경우 테넌트 세부 정보를 읽는 방법을배우세요.
  2. 파일을 저장합니다.

프로젝트 실행 및 로그인

  1. 서버를 시작하려면 프로젝트 디렉터리 내에서 다음 명령을 실행합니다.

    cd 1-Authentication\0-sign-in-vanillajs\App
    npm install
    npm start
    
  2. 터미널에 표시되는 https URL(예: https://localhost:3000)을 복사하여 브라우저에 붙여넣습니다. 프라이빗 또는 시크릿 브라우저 세션을 사용하는 것이 좋습니다.

  3. 테넌트에 등록된 계정으로 로그인합니다.

  4. 애플리케이션에 로그인하고 Microsoft Graph API에서 프로필 세부 정보에 액세스했음을 나타내는 다음 스크린샷이 나타납니다.

    API 호출 결과를 보여 주는 JavaScript 앱의 스크린샷

애플리케이션에서 로그아웃

  1. 페이지에서 로그아웃 단추를 찾아 선택합니다.
  2. 로그아웃할 계정을 선택하라는 메시지가 표시됩니다. 로그인하는 데 사용한 계정을 선택합니다.

로그아웃했음을 나타내는 메시지가 나타납니다. 이제 브라우저 창을 닫을 수 있습니다.