Azure AD B2C를 사용하여 WPF 데스크톱 앱에서 인증 옵션을 사용하도록 설정
이 문서에서는 WPF(Windows Presentation Foundation) 데스크톱 애플리케이션에 대한 Azure AD B2C(Azure Active Directory B2C) 인증 환경을 사용자 지정하고 개선할 수 있는 방법을 설명합니다.
시작하기 전에 Azure AD B2C를 사용하여 샘플 WPF 데스크톱 앱에서 인증 구성 문서를 숙지합니다.
로그인 이름 미리 채우기
사용자가 로그인하는 동안, 앱은 특정 사용자를 대상으로 지정할 수 있습니다. 앱이 사용자를 대상으로 하는 경우 권한 부여 요청에 login_hint
쿼리 매개 변수와 사용자의 로그인 이름을 지정할 수 있습니다. Azure AD B2C가 자동으로 로그인 이름을 채우며, 사용자는 암호만 입력하면 됩니다.
로그인 이름을 미리 입력하려면 다음을 수행합니다.
- 사용자 지정 정책을 사용하는 경우 직접 로그인 설정에 설명된 대로 필요한 입력 클레임을 추가합니다.
- MSAL(Microsoft 인증 라이브러리) 구성 개체를 찾은 다음, 로그인 힌트와 함께
withLoginHint()
메서드를 추가합니다.
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
.WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
.WithLoginHint("bob@contoso.com")
.ExecuteAsync();
ID 공급자 사전 선택
Facebook, LinkedIn 또는 Google 등과 같은 소셜 계정을 포함하도록 애플리케이션에 대한 로그인 과정을 구성한 경우 domain_hint
매개 변수를 지정할 수 있습니다. 이 쿼리 매개 변수는 로그인에 사용해야 하는 소셜 ID 공급자에 대한 힌트를 Azure AD B2C에 제공합니다. 예를 들어, 애플리케이션이 domain_hint=facebook.com
을 지정하는 경우, 로그인 흐름을 통해 Facebook 로그인 페이지로 직접 이동됩니다.
외부 ID 공급자로 사용자를 리디렉션하려면 다음을 수행합니다.
- 외부 ID 공급자의 도메인 이름을 확인합니다. 자세한 내용은 소셜 공급자로 로그인 리디렉션을 참조하세요.
- 기존
Dictionary
개체를 만들거나 사용하여 추가 쿼리 매개 변수를 저장합니다. - 해당 도메인 이름과 함께
domain_hint
매개 변수를 사전에 추가합니다(예:facebook.com
). - 추가 쿼리 매개 변수 개체를 MSAL 구성 개체의
WithExtraQueryParameters
메서드에 전달합니다.
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("domain_hint", "facebook.com");
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
.WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
.WithExtraQueryParameters(extraQueryParameters)
.ExecuteAsync();
UI 언어 지정
Azure AD B2C의 언어 사용자 지정을 사용하면 사용자 흐름 상에서 고객의 요구 사항에 맞게 다양한 언어를 수용할 수 있습니다. 자세한 내용은 언어 사용자 지정을 참조하세요.
기본 설정 언어를 지정하려면 다음을 수행합니다.
- 언어 사용자 지정을 구성합니다.
- 기존
Dictionary
개체를 만들거나 사용하여 추가 쿼리 매개 변수를 저장합니다. - 해당 언어 코드와 함께
ui_locales
매개 변수를 사전에 추가합니다(예:en-us
). - 추가 쿼리 매개 변수 개체를 MSAL 구성 개체의
WithExtraQueryParameters
메서드에 전달합니다.
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("ui_locales", "en-us");
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
.WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
.WithExtraQueryParameters(extraQueryParameters)
.ExecuteAsync();
사용자 지정 쿼리 문자열 매개 변수 전달
사용자 지정 정책을 사용하면 사용자 지정 쿼리 문자열 매개 변수를 전달할 수 있습니다. 페이지 콘텐츠를 동적으로 변경하려는 경우가 좋은 사용 사례입니다.
사용자 지정 쿼리 문자열 매개 변수를 전달하려면 다음 단계를 수행합니다.
- ContentDefinitionParameters 요소를 구성합니다.
- 기존
Dictionary
개체를 만들거나 사용하여 추가 쿼리 매개 변수를 저장합니다. -
campaignId
와 같은 사용자 지정 쿼리 문자열 매개 변수를 추가합니다. 매개 변수 값을 설정합니다(예:germany-promotion
). - 추가 쿼리 매개 변수 개체를 MSAL 구성 개체의
WithExtraQueryParameters
메서드에 전달합니다.
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("campaignId", "germany-promotion");
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
.WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
.WithExtraQueryParameters(extraQueryParameters)
.ExecuteAsync();
ID 토큰 힌트 전달
신뢰 당사자 애플리케이션은 OAuth2 권한 부여 요청의 일부로 인바운드 JWT(JSON Web Token)를 보낼 수 있습니다. 인바운드 토큰은 사용자 또는 권한 부여 요청에 대한 힌트입니다. Azure AD B2C는 토큰의 유효성을 검사하고 클레임을 추출합니다.
인증 요청에 ID 토큰 힌트를 포함하려면 다음을 수행합니다.
- 사용자 지정 정책에서 ID 토큰 힌트 기술 프로필을 정의합니다.
- 코드에서 ID 토큰을 생성하거나 획득한 다음, 토큰을 변수로 설정합니다(예:
idToken
). - 기존
Dictionary
개체를 만들거나 사용하여 추가 쿼리 매개 변수를 저장합니다. - ID 토큰을 저장하는 해당 변수를 사용하여
id_token_hint
매개 변수를 추가합니다. - 추가 쿼리 매개 변수 개체를 MSAL 구성 개체의
extraQueryParameters
특성에 전달합니다.
Dictionary<string, string> extraQueryParameters = new Dictionary<string, string>();
extraQueryParameters.Add("id_token_hint", idToken);
authResult = await app.AcquireTokenInteractive(App.ApiScopes)
.WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
.WithExtraQueryParameters(extraQueryParameters)
.ExecuteAsync();
로깅 구성
MSAL 라이브러리는 문제를 진단하는 데 유용한 로그 메시지를 생성합니다. 앱은 로깅을 구성할 수 있습니다. 이 앱은 세부 정보 수준과 개인 데이터와 조직 데이터가 기록되는지 여부에 대한 제어를 사용자 지정할 수도 있습니다.
MSAL 로깅 콜백을 만들고 사용자에게 인증 문제가 있을 때 로그를 제출할 수 있는 방법을 제공하는 것이 좋습니다. MSAL은 다음과 같은 수준의 로깅 세부 정보를 제공합니다.
- 오류: 무언가 잘못되어 오류가 발생했습니다. 이 수준은 디버깅 및 문제 식별에 사용됩니다.
- 경고: 오류 또는 장애가 반드시 발생한 것은 아니지만, 문제를 진단하고 파악하기 위한 정보입니다.
- 정보: MSAL은 디버깅이 아니라 정보 제공을 위해 이벤트를 기록합니다.
- 자세한 정보: 이 값은 기본 수준입니다. MSAL은 라이브러리 동작의 전체 세부 정보를 기록합니다.
기본적으로 MSAL 로거는 개인 또는 조직 데이터를 캡처하지 않습니다. 라이브러리는 개인 및 조직 데이터 로깅을 사용하도록 설정하는 옵션을 제공합니다.
다음 코드 조각은 MSAL 로깅을 구성하는 방법을 보여 줍니다.
PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
.WithB2CAuthority(AuthoritySignUpSignIn)
.WithRedirectUri(RedirectUri)
.WithLogging(Log, LogLevel.Info, false) // don't log P(ersonally) I(dentifiable) I(nformation) details on a regular basis
.Build();
리디렉션 URI 구성
데스크톱 앱 등록 프로세스 중에 리디렉션 URI를 선택할 때에는 다음과 같은 중요한 고려 사항을 유념하세요.
-
개발: 데스크톱 앱에서 개발 용도인 경우 리디렉션 URI를
http://localhost
로 설정할 수 있으며, Azure AD B2C는 요청의 모든 포트를 준수합니다. 등록된 URI에 포트가 포함된 경우 Azure AD B2C는 해당 포트만 사용합니다. 예를 들어 등록된 리디렉션 URI가http://localhost
인 경우 요청의 리디렉션 URI는http://localhost:<randomport>
일 수 있습니다. 등록된 리디렉션 URI가http://localhost:8080
인 경우 요청의 리디렉션 URI는http://localhost:8080
이여야 합니다. -
고유: 리디렉션 URI의 구성표는 모든 애플리케이션에 대해 고유해야 합니다. 보기
com.onmicrosoft.contosob2c.exampleapp://oauth/redirect
에서com.onmicrosoft.contosob2c.exampleapp
은 구성표입니다. 이 패턴을 따라야 합니다. 두 애플리케이션이 동일한 체계를 공유하는 경우 사용자는 애플리케이션을 선택할 수 있습니다. 사용자가 잘못 선택하면 로그인에 실패합니다. -
전체: 리디렉션 URI에는 구성표 및 경로가 있어야 합니다. 경로에는 도메인 뒤에 하나 이상의 슬래시 문자가 포함되어야 합니다. 예를 들어
//oauth/
는 실행되고//oauth
는 실행되지 않습니다. URI에 특수 문자를 포함하지 마세요. 예를 들어 밑줄 문자(_)는 사용할 수 없습니다.
다음 단계
- 자세히 알아보려면 .NET, UWP, NetCore 및 Xamarin 구성 옵션에 대한 MSAL을 참조하세요.