WPF on .NET Core + Azure AD B2C에서 사용자 지정 웹 UI를 사용하여 인증하고 싶습니다.

2020/04/17 현재 MSAL.NET을 사용하여 WPF on .NET Core를 사용하면 시스템 브라우저에서 인증됩니다. 게다가 리디렉션 URL 로 http://localhost:ポート番号 와 같이, 비어 있는 포트를 스스로 발견하지 않으면 안 되는 것 같습니다.
B2C and ADFS 2019 do not yet implement the "any port" option. 
So you cannot set "http://localhost" (no port) redirect uri, 
but only "http://localhost:1234" (with port) uri.

해결 방법은 구현을 기다리거나 우선 사용자 지정 웹 UI 기능을 사용하여 시스템 브라우저가 아닌 자체 브라우저를 호스팅하는 Window를 실행하는 것입니다. 이전 브라우저를 사용하는 경우 이전 Edge 또는 새 Edge 또는 WPF가 가지고 있는 IE 기반 WebBrowser 컨트롤입니다.

이전 Edge의 WebView는 새 Edge가 WebView가 나오면 대체하는 것이 좋지만, 아직 개발자 미리보기 단계에 있습니다.

우선, 여기에서는 WPF 임베디드의 IE 가 간단하게 베이스의 WebBrowser 컨트롤을 사용해 보고 싶습니다.

만든



그래서 WPF의 WebBrowser 컨트롤을 사용하여 사용자 정의 웹 UI를 만들었습니다.

쉽게 시도 할 수 있도록 NuGet을 사용합니다.

이렇게 하면 Azure AD B2C에 적합한 앱을 만들어 네이티브 공용 애플리케이션을 추가할 수 있습니다.



Azure AD B2C에 앱을 등록하고 다음과 같이 설정했습니다. API 권한으로 적절한 API에 대한 권한도 부여합니다. (이렇게하지 않으면 액세스 토큰이 반환되지 않습니다)



IPublicClientApplication은 MSAL.NET을 일반적으로 사용할 때와 동일하며 AccireTokenInteractive를 사용하는 경우 WithCustomWebUi에 EmbeddedBrowserWebUi의 인스턴스를 전달합니다.
var r = await App.Current
    .PublicClientApplication
    .AcquireTokenInteractive(new[]
    {
        "https://xxx.onmicrosoft.com/xxxxxx-xxxx-xxx-xxx-xxxxx/xxx" // スコープ
    })
    .WithCustomWebUi(new EmbeddedBrowserWebUi(this)) // ここでカスタム UI を設定
    .ExecuteAsync();

EmbeddedBrowserWebUi 의 생성자에게는, 부모가 되는 Window 의 인스턴스를 건네줍니다.
이 부분은 리포지토리의 TestApp 프로젝트의 MainWindow.xaml.cs를 참조하십시오.

다음과 같은 느낌으로 움직입니다.



요약



그 중 신 Edge를 사용한 것이 릴리스된다고 생각하기 때문에, 릴리스되면 그쪽으로 환승한다고 해서, 일단 앱내 브라우저로 로그인 다이얼로그를 내고 싶은 경우는, 이런 느낌으로 실장하면 좋은 것이 아닐까 하는 곳 네요.

좋은 웹페이지 즐겨찾기