Неявный поток OAuth2 с C# Windows Forms
Я разрабатываю приложение для форм Windows на С #, которое должно пройти аутентификацию с использованием неявного потока (клиент не принимает другой поток). В качестве требования мне нужно открыть системный браузер по умолчанию для аутентификации (чтобы в приложении не было встроенного веб-представления)
Я пытаюсь использовать OidcClient C# и образцы, но не могу заставить его работать.
Самое близкое, что у меня было, было использование ConsoleSystemBrowser
. Но используя приведенный ниже код, я всегда получаюUnknownError
с empty response
.
Я вижу в браузере id_token: http://127.0.0.1:54423/auth/signin-oidc#id_token=XXX
. Как я могу это прочитать?
var browser = new SystemBrowser();
var redirectUri = string.Format($"http://127.0.0.1:{browser.Port}/auth/signin-oidc");
var options = new OidcClientOptions
{
Authority = "https://demo.identityserver.io",
ClientId = "implicit",
Scope = "openid profile api",
RedirectUri = redirectUri,
Browser = browser
};
var client = new OidcClient(options);
var state = await client.PrepareLoginAsync(new Dictionary<string, string>()
{
{ OidcConstants.AuthorizeRequest.ResponseType, OidcConstants.ResponseTypes.IdTokenToken}
});
var browserOption = new BrowserOptions(state.StartUrl, redirectUri)
{
Timeout = TimeSpan.FromSeconds(300),
DisplayMode = DisplayMode.Hidden,
ResponseMode = OidcClientOptions.AuthorizeResponseMode.Redirect
};
var result = await browser.InvokeAsync(browserOption, default);
result.ResultType => BrowserResultType.UnknownError
1 ответ
Ваше приложение должно зарегистрировать частный URL scheme
с сетевым компонентом ОС. Затем URL-адреса вида "x-my-app://xxx" будут перенаправлены в ваше приложение. (И вы регистрируете URL-адрес в OAuth IdP, чтобы он работал как URL-адрес перенаправления.)
Что касается Windows, похоже, что Microsoft называет это "подключаемыми протоколами". Видеть
Источником примеров кода для этого шаблона может быть настольное приложение github - это открытый исходный код, который регистрирует свою собственную схему в Windows.
Регистрирует частную схему x-github-client
Вы можете увидеть, как это делается в исходнике, также смотрите здесь