【问题标题】:OAuth2 Implicit Flow with C# Windows Forms带有 C# Windows 窗体的 OAuth2 隐式流
【发布时间】:2020-05-17 22:54:40
【问题描述】:

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

我正在尝试使用OidcClient C#Samples,但无法正常工作。

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

【问题讨论】:

    标签: c# oauth-2.0 implicit-flow oidc-client


    【解决方案1】:

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

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

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

    它注册了私有方案x-github-client你可以在source看到它是如何完成的,也可以看here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-23
      • 2021-07-26
      • 2015-01-02
      • 1970-01-01
      • 2023-03-24
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多