빠른 시작: iOS 또는 macOS 앱에서 사용자를 로그인하고 Microsoft Graph 호출
이 빠른 시작에서는 네이티브 iOS 또는 macOS 애플리케이션이 사용자를 로그인하고 Microsoft Graph API를 호출할 액세스 토큰을 가져오는 방법을 보여주는 코드 샘플을 다운로드하고 실행합니다.
빠른 시작은 iOS 및 macOS 앱 모두에 적용됩니다. 일부 단계는 iOS 앱에만 필요하며, 이러한 단계는 다음과 같이 표시됩니다.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- XCode 10 이상
- iOS 10 이상
- macOS 10.12 이상
샘플 작동 방법
빠른 시작 앱 등록
팁
이 문서의 단계는 시작하는 포털에 따라 약간 다를 수 있습니다.
애플리케이션을 등록하고 앱의 등록 정보를 솔루션에 수동으로 추가하려면 다음 단계를 따르세요.
- 최소한 애플리케이션 개발자 자격으로 Microsoft Entra 관리 센터에 로그인합니다.
- 여러 테넌트에 액세스할 수 있는 경우 위쪽 메뉴의 설정 아이콘을 사용하여 디렉터리 + 구독 메뉴에서 애플리케이션을 등록하려는 테넌트로 전환합니다.
- ID>애플리케이션>앱 등록으로 이동합니다.
- 새 등록을 선택합니다.
- 애플리케이션의 이름을 입력합니다. 이 이름은 앱의 사용자에게 표시될 수 있으며 나중에 변경할 수 있습니다.
- 등록을 선택합니다.
- 관리에서 인증>플랫폼 추가>iOS를 선택합니다.
- 애플리케이션에 대한 번들 식별자를 입력합니다. 번들 식별자는 애플리케이션을 고유하게 식별하는 고유 문자열(예:
com.<yourname>.identitysample.MSALMacOS
)입니다. 사용하는 값을 기록해 둡니다. iOS 구성은 macOS 애플리케이션에도 적용할 수 있습니다. - 이 빠른 시작 후반에 사용할 수 있도록 구성을 선택하고 MSAL 구성 세부 정보를 저장합니다.
- 완료를 선택합니다.
2단계: 샘플 프로젝트 다운로드
3단계: 종속성 설치
- 파일의 압축을 풉니다.
- 터미널 창에서 다운로드한 코드 샘플이 있는 폴더로 이동하고
pod install
을 실행하여 최신 MSAL 라이브러리를 설치합니다.
4단계: 프로젝트 구성
위의 옵션 1을 선택한 경우 이러한 단계를 건너뛸 수 있습니다.
XCode에서 프로젝트를 엽니다.
ViewController.swift를 편집하고, 'let kClientID'로 시작하는 줄을 다음 코드 조각으로 바꿉니다.
kClientID
값은 이 빠른 시작의 앞부분에서 앱을 등록할 때 저장한 clientID로 업데이트해야 합니다.let kClientID = "Enter_the_Application_Id_Here"
Microsoft Entra 국가별 클라우드용 앱을 빌드하는 경우 'let kGraphEndpoint' 및 'let kAuthority'로 시작하는 줄을 올바른 엔드포인트로 바꿉니다. 글로벌 액세스의 경우 기본값을 사용합니다.
let kGraphEndpoint = "https://graph.microsoft.com/" let kAuthority = "https://login.microsoftonline.com/common"
다른 엔드포인트는 여기에 설명되어 있습니다. 예를 들어, Microsoft Entra Germany에서 빠른 시작을 실행하려면 다음을 사용합니다.
let kGraphEndpoint = "https://graph.microsoft.de/" let kAuthority = "https://login.microsoftonline.de/common"
프로젝트 설정을 엽니다. ID 섹션에 번들 식별자를 입력합니다.
마우스 오른쪽 단추로 Info.plist를 클릭하고, 파일 열기 형식>소스 코드를 차례로 선택합니다.
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>
앱을 빌드하고 실행하세요!
추가 정보
이 빠른 시작에 대한 자세한 내용은 다음 섹션을 참조하세요.
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.plist에 LSApplicationQueriesSchemes
항목이 있어야 합니다. 샘플에는 이 항목이 포함되어 있습니다.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>msauthv2</string>
<string>msauthv3</string>
</array>
사용자 로그인 및 토큰 요청
MSAL에는 토큰 가져오기에 사용되는 두 가지 메서드인 acquireToken
및 acquireTokenSilent
가 있습니다.
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 앱을 빌드하는 단계별 자습서로 이동합니다.