Identityserver4 WinFormsSample与';本地。混合';客户端不再工作了?

Identityserver4 WinFormsSample与';本地。混合';客户端不再工作了?,identityserver4,identitymodel,Identityserver4,Identitymodel,如果我将此示例中的客户端更改为“native.hybrid” 设定 Flow=OIDClientOptions.AuthenticationFlow.Hybrid 然后,登录到IS4就可以了(延迟5秒后),但我的默认web浏览器中会出现一个新的登录表单 与客户“interactive.public”配合很好。我的问题是,我的本地widows应用程序应该使用哪个流?我的意思是它是“OpenID连接混合流”,参见 如果要使用混合流,如何调整此示例?当前选择与OIDC一起使用的授权的经验法则是:

如果我将此示例中的客户端更改为“native.hybrid”

设定 Flow=OIDClientOptions.AuthenticationFlow.Hybrid

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

与客户“interactive.public”配合很好。我的问题是,我的本地widows应用程序应该使用哪个流?我的意思是它是“OpenID连接混合流”,参见


如果要使用混合流,如何调整此示例?

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

  • 机器对机器通信:使用客户端凭据

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


ClientCredentials:此流由对令牌端点的单个请求组成,提供客户端id和客户端机密(如用户/密码)以针对授权进行身份验证


代码+PKCE:此流程由两个请求组成:

  • 授权端点的请求,在任何情况下都将在前端通道中使用web浏览器完成,并将通过重定向到提供的
    重定向\u uri
    (以前在服务器上配置)进行响应(如果成功)。在此重定向中,管理局将在其他参数中添加“代码”作为“片段”或“查询”(example.com/signin#code=1234)

  • 对令牌端点的请求,提供接收到的代码,该代码将使用请求的实际令牌进行响应

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

    PKCE即将派上用场:它通过添加一个额外的检查来增强此流的安全性:

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

  • 在第二个请求中,客户端包含纯文本“asdfasdf”中的字符串,这样管理机构就可以计算该字符串的哈希值,并检查它是否与第一个请求中提供的匹配。如果是,那么我们可以得出结论,发出第二个请求的客户机与发出第一个请求的客户机相同。假设第一个请求在先前配置的
    重定向\u uri
    上结束,则只有授权的客户端才能完成流


  • 当前选择与OIDC一起使用的补助金的经验法则是:

    • 机器对机器通信:使用客户端凭据

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


    ClientCredentials:此流由对令牌端点的单个请求组成,提供客户端id和客户端机密(如用户/密码)以针对授权进行身份验证


    代码+PKCE:此流程由两个请求组成:

  • 授权端点的请求,在任何情况下都将在前端通道中使用web浏览器完成,并将通过重定向到提供的
    重定向\u uri
    (以前在服务器上配置)进行响应(如果成功)。在此重定向中,管理局将在其他参数中添加“代码”作为“片段”或“查询”(example.com/signin#code=1234)

  • 对令牌端点的请求,提供接收到的代码,该代码将使用请求的实际令牌进行响应

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

    PKCE即将派上用场:它通过添加一个额外的检查来增强此流的安全性:

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

  • 在第二个请求中,客户端包含纯文本“asdfasdf”中的字符串,这样,权限可以计算该字符串的哈希,并检查它是否与第一个请求上提供的字符串匹配。如果是,那么我们可以得出结论,发出第二个请求的客户机与发出第一个请求的客户机相同。假设第一个请求在先前配置的
    重定向\u uri
    上结束,则只有授权的客户端才能完成流


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