728x90
728x170
아래의 .Net Frameork 버전의 코드를 .NET6 에서 코딩하게되면 PlatformParameters 부분에서 ICustomWebUi 를 요구한다.
var authContext = new AuthenticationContext("https://login.microsoftonline.com/common");
var result = await authContext.AcquireTokenAsync("https://graph.microsoft.com", "your app id", new Uri("urn:ietf:wg:oauth:2.0:oob"), new PlatformParameters(PromptBehavior.Auto));
.Net6 버전으로 바꾸면 아래와같다.
(진행하고 있는 프로젝트에서 아래와 같이 바꿨지만 아직 자동 로그인이 문제가 되고 있어 뭔가 완벽하지는 않는것 같다.)
class CustomWebUi : ICustomWebUi
{
private readonly Dispatcher _dispatcher;
public CustomWebUi(Dispatcher dispatcher)
{
_dispatcher = dispatcher ?? throw new ArgumentNullException(nameof(dispatcher))
}
public Task<Uri> AcquireAuthorizationCodeAsync(Uri authorizationUri, Uri redirectUr
{
var tcs = new TaskCompletionSource<Uri>();
_dispatcher.InvokeAsync(() =>
{
var webView = new WebView();
var w = new Window
{
Title = "Auth",
WindowStyle = WindowStyle.ToolWindow,
Content = webView,
};
w.Loaded += (_, __) => webView.Navigate(authorizationUri);
webView.NavigationCompleted += (_, e) =>
{
System.Diagnostics.Debug.WriteLine(e.Uri);
if (e.Uri.Query.Contains("code="))
{
tcs.SetResult(e.Uri);
w.DialogResult = true;
w.Close();
}
if (e.Uri.Query.Contains("error="))
{
tcs.SetException(new Exception(e.Uri.Query));
w.DialogResult = false;
w.Close();
}
};
webView.UnsupportedUriSchemeIdentified += (_, e) =>
{
if (e.Uri.Query.Contains("code="))
{
tcs.SetResult(e.Uri);
w.DialogResult = true;
w.Close();
}
else
{
tcs.SetException(new Exception($"Unknown error: {e.Uri}"));
w.DialogResult = false;
w.Close();
}
};
if (w.ShowDialog() != true && !tcs.Task.IsCompleted)
{
tcs.SetException(new Exception("canceled"));
}
});
return tcs.Task;
}
}
사용
var authContext = new AuthenticationContext("https://login.microsoftonline.com/common");
var result = await authContext.AcquireTokenAsync("https://graph.microsoft.com",
"your app id",
new Uri("urn:ietf:wg:oauth:2.0:oob"),
new PlatformParameters(PromptBehavior.Auto, new CustomWebUi(Dispatcher)));
MessageBox.Show(result.AccessToken);
728x90
그리드형
'C#' 카테고리의 다른 글
[C#] Chrome 브라우저 Google 사이트 에서 특정 단어 조회페이지 열기 (0) | 2022.09.28 |
---|---|
[C#] Edge 에서 특정 Tab 닫기 (0) | 2022.09.23 |
[C#] Edge Open 하기 (항상 새로운 창으로 띄우기) (0) | 2022.09.23 |
[C#] ExpandoObject 사용하기 (0) | 2022.09.15 |
(.NET) xenko - 링크 (0) | 2017.04.30 |