【问题标题】:WinFormsSample with 'native.hybrid' Client does no longer work?带有“native.hybrid”客户端的 WinFormsSample 不再起作用?
【发布时间】:2022-01-06 03:57:27
【问题描述】:

如果我将此示例中的客户端更改为“native.hybrid” https://github.com/IdentityModel/IdentityModel.OidcClient.Samples/tree/master/WinFormsWebView

并设置 Flow = OidcClientOptions.AuthenticationFlow.Hybrid

然后可以登录到 IS4(延迟 5 秒后),但我的默认 Web 浏览器中会出现一个新的登录表单。

使用客户端“interactive.public”可以正常工作。我的问题是我的原生寡妇应用程序应该使用哪个流程?我的意思是它是“OpenID Connect 混合流”,请参阅https://identityserver4.readthedocs.io/en/latest/topics/grant_types.html

如果使用混合流,如何适应这个样本?

【问题讨论】:

  • 我将使用交互式客户端,混合流需要在客户端上进行额外的实现。 “交互式客户端应该使用基于授权码的流程。为了防止代码替换,应该使用混合流程或 PKCE。如果 PKCE 可用,这是解决问题的更简单的解决方案。”

标签: identityserver4 identitymodel


【解决方案1】:

当前选择与 OIDC 一起使用的授权的经验法则是:

  • 机器对机器通信:使用 ClientCredentials

  • 交互式客户端(Web 应用程序、SPA 或本机/移动应用程序):使用代码 + PKCE


ClientCredentials:此流程包含对令牌端点的单个请求,提供 client_id 和 client_secret(如用户/密码)以根据权限验证自己。


代码+PKCE:这个流程包含两个请求:

  1. 授权端点的请求将在 Front-Channel 中完成,在任何情况下都使用 Web 浏览器,并将响应(如果成功)重定向到提供的 redirect_uri(之前在服务器上配置) )。在此重定向中,权威机构将在其他参数中添加“代码”作为“片段”或“查询”(example.com/signin#code=1234)。

  2. 对令牌端点的请求,提供接收到的代码,该代码将以请求的实际令牌进行响应。

这里的问题是如何验证发出第二个请求的客户端。在混合流程中,我们使用一个秘密,就像客户端凭据一样,问题是并非所有应用程序都能够安全地维护这个秘密(即:SPA 将其所有代码加载到客户端浏览器上,因此任何人都可以窃取该秘密) (这就是我们区分机密(能够保密)和公共客户的原因)。

这就是 PKCE 派上用场的时候:它通过添加额外的检查来增强此流程的安全性:

  1. 在第一个授权请求中,客户端先前创建了一个随机字符串“asdfasdf”并计算其哈希值。该哈希值与用于计算它的算法一起添加到请求中,例如:SHA256。

  2. 在第二个请求中,客户端将字符串包含在纯文本“asdfasdf”中,这样​​权限可以计算该字符串的哈希值并检查它是否与第一个请求中提供的匹配。如果是这样,那么我们可以得出结论,发出第二个请求的客户端与发出第一个请求的客户端相同。鉴于第一个请求以先前配置的redirect_uri 结束,只有授权客户端才能完成流程。

【讨论】:

    猜你喜欢
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多