1

我正在开发需要使用隐式流进行身份验证的 ac# windows 窗体应用程序(客户端不接受另一个流)。根据要求,我需要打开默认系统浏览器进行身份验证(因此应用程序上没有嵌入式 Web 视图)

我正在尝试使用OidcClient C#示例,但我无法让它工作。

我得到的最接近的是使用ConsoleSystemBrowser. 但是使用下面的代码我总是得到一个UnknownErrorwith 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
4

1 回答 1

0

scheme您的应用程序应该向操作系统的网络组件注册一个私有 URL 。然后,“x-my-app://xxx”形式的 URL 将被转发到您的应用程序。(并且您使用 OAuth IdP 注册 URL,因此它可以用作重定向 URL。)

对于 Windows,微软似乎将其称为“可插入协议”。看

此模式的代码示例源可能来自 github 桌面应用程序——它是开源的,并在 Windows 中注册了自己的方案。

它注册了私有方案x-github-client你可以在源代码中看到它是如何完成的,也可以看到这里

于 2020-08-28T09:21:39.707 回答