다음을 통해 공유


빠른 시작: iOS 또는 macOS 앱에서 사용자를 로그인하고 Microsoft Graph 호출

이 빠른 시작에서는 네이티브 iOS 또는 macOS 애플리케이션이 사용자를 로그인하고 Microsoft Graph API를 호출할 액세스 토큰을 가져오는 방법을 보여주는 코드 샘플을 다운로드하고 실행합니다.

빠른 시작은 iOS 및 macOS 앱 모두에 적용됩니다. 일부 단계는 iOS 앱에만 필요하며, 이러한 단계는 다음과 같이 표시됩니다.

필수 조건

샘플 작동 방법

이 빠른 시작에서 생성된 샘플 앱의 작동 방식을 보여 주는 다이어그램.

빠른 시작 앱 등록

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

애플리케이션을 등록하고 앱의 등록 정보를 솔루션에 수동으로 추가하려면 다음 단계를 따르세요.

  1. 최소한 애플리케이션 개발자 자격으로 Microsoft Entra 관리 센터에 로그인합니다.
  2. 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 설정 아이콘을 사용하여 디렉터리 + 구독 메뉴에서 애플리케이션을 등록하려는 테넌트로 전환합니다.
  3. ID>애플리케이션>앱 등록으로 이동합니다.
  4. 새 등록을 선택합니다.
  5. 애플리케이션의 이름을 입력합니다. 이 이름은 앱의 사용자에게 표시될 수 있으며 나중에 변경할 수 있습니다.
  6. 등록을 선택합니다.
  7. 관리에서 인증>플랫폼 추가>iOS를 선택합니다.
  8. 애플리케이션에 대한 번들 식별자를 입력합니다. 번들 식별자는 애플리케이션을 고유하게 식별하는 고유 문자열(예: com.<yourname>.identitysample.MSALMacOS)입니다. 사용하는 값을 기록해 둡니다. iOS 구성은 macOS 애플리케이션에도 적용할 수 있습니다.
  9. 이 빠른 시작 후반에 사용할 수 있도록 구성을 선택하고 MSAL 구성 세부 정보를 저장합니다.
  10. 완료를 선택합니다.

2단계: 샘플 프로젝트 다운로드

3단계: 종속성 설치

  1. 파일의 압축을 풉니다.
  2. 터미널 창에서 다운로드한 코드 샘플이 있는 폴더로 이동하고 pod install을 실행하여 최신 MSAL 라이브러리를 설치합니다.

4단계: 프로젝트 구성

위의 옵션 1을 선택한 경우 이러한 단계를 건너뛸 수 있습니다.

  1. XCode에서 프로젝트를 엽니다.

  2. ViewController.swift를 편집하고, 'let kClientID'로 시작하는 줄을 다음 코드 조각으로 바꿉니다. kClientID 값은 이 빠른 시작의 앞부분에서 앱을 등록할 때 저장한 clientID로 업데이트해야 합니다.

    let kClientID = "Enter_the_Application_Id_Here"
    
  3. Microsoft Entra 국가별 클라우드용 앱을 빌드하는 경우 'let kGraphEndpoint' 및 'let kAuthority'로 시작하는 줄을 올바른 엔드포인트로 바꿉니다. 글로벌 액세스의 경우 기본값을 사용합니다.

    let kGraphEndpoint = "https://graph.microsoft.com/"
    let kAuthority = "https://login.microsoftonline.com/common"
    
  4. 다른 엔드포인트는 여기에 설명되어 있습니다. 예를 들어, Microsoft Entra Germany에서 빠른 시작을 실행하려면 다음을 사용합니다.

    let kGraphEndpoint = "https://graph.microsoft.de/"
    let kAuthority = "https://login.microsoftonline.de/common"
    
  5. 프로젝트 설정을 엽니다. ID 섹션에 번들 식별자를 입력합니다.

  6. 마우스 오른쪽 단추로 Info.plist를 클릭하고, 파일 열기 형식>소스 코드를 차례로 선택합니다.

  7. dict 루트 노드 아래에서 Enter_the_bundle_Id_Here를 포털에서 사용한 번들 ID로 바꿉니다. 문자열의 msauth. 접두사를 확인합니다.

    <key>CFBundleURLTypes</key>
    <array>
       <dict>
          <key>CFBundleURLSchemes</key>
          <array>
             <string>msauth.Enter_the_Bundle_Id_Here</string>
          </array>
       </dict>
    </array>
    
  8. 앱을 빌드하고 실행하세요!

추가 정보

이 빠른 시작에 대한 자세한 내용은 다음 섹션을 참조하세요.

MSAL 가져오기

MSAL(MSAL.framework)은 사용자를 로그인하고 Microsoft ID 플랫폼에서 보호되는 API 액세스에 사용되는 토큰을 요청하는 데 사용되는 라이브러리입니다. 다음 프로세스를 사용하여 애플리케이션에 MSAL을 추가할 수 있습니다.

$ vi Podfile

다음을 이 podfile에 추가합니다(프로젝트의 대상 포함).

use_frameworks!

target 'MSALiOS' do
   pod 'MSAL'
end

CocoaPods 설치 명령을 실행합니다.

pod install

MSAL 초기화

다음 코드를 추가하여 MSAL에 대한 참조를 추가할 수 있습니다.

import MSAL

그런 다음, 아래 코드를 사용하여 MSAL을 초기화합니다.

let authority = try MSALAADAuthority(url: URL(string: kAuthority)!)

let msalConfiguration = MSALPublicClientApplicationConfig(clientId: kClientID, redirectUri: nil, authority: authority)
self.applicationContext = try MSALPublicClientApplication(configuration: msalConfiguration)
여기서 설명
clientId portal.azure.com에 등록된 애플리케이션의 애플리케이션 ID
authority Microsoft ID 플랫폼. 대부분의 경우 https://login.microsoftonline.com/common과 같습니다.
redirectUri 애플리케이션의 리디렉션 URI입니다. 'nil'을 전달하여 기본값을 사용하거나 사용자 지정 리디렉션 URI를 사용할 수 있습니다.

iOS 전용, 추가 앱 요구 사항

앱의 AppDelegate에도 다음이 있어야 합니다. 이렇게 하면 인증을 수행할 때 MSAL SDK에서 인증 broker 앱의 토큰 응답을 처리할 수 있습니다.

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {

    return MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String)
}

참고 항목

iOS 13 이상에서 UIApplicationDelegate 대신 UISceneDelegate를 채택하는 경우 이 코드를 scene:openURLContexts: 콜백에 대신 배치합니다(Apple 설명서 참조). 이전 iOS와의 호환성을 위해 UISceneDelegate 및 UIApplicationDelegate를 모두 지원하는 경우 MSAL 콜백을 두 곳 모두에 배치해야 합니다.

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {

   guard let urlContext = URLContexts.first else {
      return
   }

   let url = urlContext.url
   let sourceApp = urlContext.options.sourceApplication

   MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: sourceApp)
}

마지막으로, 앱에는 CFBundleURLTypes와 함께 Info.plistLSApplicationQueriesSchemes 항목이 있어야 합니다. 샘플에는 이 항목이 포함되어 있습니다.

<key>LSApplicationQueriesSchemes</key>
<array>
   <string>msauthv2</string>
   <string>msauthv3</string>
</array>

사용자 로그인 및 토큰 요청

MSAL에는 토큰 가져오기에 사용되는 두 가지 메서드인 acquireTokenacquireTokenSilent가 있습니다.

acquireToken: 대화형으로 토큰 가져오기

상황에 따라 사용자가 Microsoft ID 플랫폼과 상호 작용해야 합니다. 이러한 경우 최종 사용자는 해당 계정을 선택하거나, 해당 자격 증명을 입력하거나, 앱의 권한에 동의해야 할 수 있습니다. 예를 들면 다음과 같습니다.

  • 처음으로 사용자가 애플리케이션에 로그인한 경우
  • 사용자가 자신의 암호를 다시 설정하는 경우 해당 자격 증명을 입력해야 합니다.
  • 애플리케이션에서 처음으로 리소스에 대한 액세스를 요청하는 경우
  • MFA 또는 기타 조건부 액세스 정책이 필요한 경우
let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParamaters!)
self.applicationContext!.acquireToken(with: parameters) { (result, error) in /* Add your handling logic */}
여기서 설명
scopes 요청된 범위(즉 Microsoft Graph의 경우 [ "user.read" ], 사용자 지정 웹 API(api://<Application ID>/access_as_user)의 경우 [ "<Application ID URL>/scope" ])가 포함됩니다.

acquireTokenSilent: 자동으로 액세스 토큰 가져오기

사용자가 토큰을 요청할 때마다 앱에서 사용자가 로그인하도록 요구하지 않아야 합니다. 사용자가 이미 로그인한 경우 다음 메서드를 사용하면 앱에서 토큰을 자동으로 요청할 수 있습니다.

self.applicationContext!.getCurrentAccount(with: nil) { (currentAccount, previousAccount, error) in

   guard let account = currentAccount else {
      return
   }

   let silentParams = MSALSilentTokenParameters(scopes: self.kScopes, account: account)
   self.applicationContext!.acquireTokenSilent(with: silentParams) { (result, error) in /* Add your handling logic */}
}
여기서 설명
scopes 요청된 범위(즉 Microsoft Graph의 경우 [ "user.read" ], 사용자 지정 웹 API(api://<Application ID>/access_as_user)의 경우 [ "<Application ID URL>/scope" ])가 포함됩니다.
account 토큰을 요청하는 계정입니다. 이 빠른 시작은 단일 계정 애플리케이션에 대한 것입니다. 다중 계정 앱을 빌드하려면 accountsFromDeviceForParameters:completionBlock:를 사용하여 토큰 요청에 사용할 계정을 식별하고 올바른 accountIdentifier를 전달하는 논리를 정의해야 합니다.

도움말 및 지원 

도움이 필요하거나, 문제를 보고하거나, 지원 옵션에 대해 알아보려면 개발자를 위한 도움말 및 지원을 참조하세요.

다음 단계

Microsoft ID 플랫폼에서 액세스 토큰을 가져오고, 이를 사용하여 Microsoft Graph API를 호출하는 iOS 또는 macOS 앱을 빌드하는 단계별 자습서로 이동합니다.