Oauth 我什么时候会在OpenID Connect中使用带有response\u type=code id\u令牌的混合流?

Oauth 我什么时候会在OpenID Connect中使用带有response\u type=code id\u令牌的混合流?,oauth,oauth-2.0,openid-connect,Oauth,Oauth 2.0,Openid Connect,我一直在阅读OpenId Connect及其流,这些流是隐式流、授权代码流和混合流 例如,我知道隐式流有点不安全,应该只在公共客户端(如SPA应用程序)中使用 现在,我正在尝试了解可用于非公共应用程序(如.Net MVC应用程序)的混合流,在这些应用程序中,您可以进行反向通信,从而可以保存一个秘密密码 阅读有关混合流的信息,我知道它有3种不同类型的响应类型,可以是: 代码id\u令牌 代码令牌 代码id\u令牌 对我来说,最好的响应类型是code id_token,我可以在前面的通道中获取代码,

我一直在阅读OpenId Connect及其流,这些流是隐式流授权代码流混合流

例如,我知道隐式流有点不安全,应该只在公共客户端(如SPA应用程序)中使用

现在,我正在尝试了解可用于非公共应用程序(如.Net MVC应用程序)的混合流,在这些应用程序中,您可以进行反向通信,从而可以保存一个秘密密码

阅读有关混合流的信息,我知道它有3种不同类型的响应类型,可以是:

  • 代码id\u令牌
  • 代码令牌
  • 代码id\u令牌
  • 对我来说,最好的响应类型是code id_token,我可以在前面的通道中获取代码,然后将代码发送给Identity Server提供商,并通过后面的通道获取访问令牌


    我一直在搜索关于响应类型=代码id\u令牌代码令牌的真实应用程序的信息,但除了读到在这些流中,第一个令牌由作为前端通道的授权端点发出,而通过交换授权代码发出的最终令牌在作为后端通道的令牌端点发出,因此本质上被认为更安全,我不明白你用这个干什么。任何信息都会被欣然接受。

    为什么混合流?经常被记录的理由是,在获取访问令牌的过程中,您的应用程序可以通过id_令牌立即获得有关用户的信息。从技术上讲这是正确的,但它仍然很少在野外使用

    一个真实的例子是OpenAPI基金会下的一个工作组开发的金融级API(FAPI)配置文件。出于安全原因,建议使用混合流。值得注意的是,流的通道分割“功能”本身不足以提供所需的安全属性,需要其他移动部件的更多“合作”。发件人:

    此配置文件描述服务器和客户端的安全规定 通过定义度量标准,适用于财务级API 为了缓解:

    • 利用[RFC6749]中端点弱绑定的攻击(例如恶意端点攻击、IdP混合攻击)
    • 利用OpenID Connect返回的混合流修改[RFC6749]中未受保护的授权请求和响应的攻击 授权响应中的ID令牌
    及详情

    8.3.3身份提供者(IdP)混合攻击

    在此攻击中,客户端 注册了多个IdP,其中一个是返回的流氓IdP 属于诚实的IDP之一的同一
    客户id
    。当用户 点击恶意链接或访问受损站点 授权请求被发送到流氓IdP。那流氓的IdP呢 将客户端重定向到具有相同
    客户端id的诚实IdP
    。如果 用户已登录诚实的IdP,然后 可以跳过身份验证,并生成代码并返回给 客户。由于客户端与流氓IdP交互,因此 代码被发送到恶意IdP的令牌端点。在这一点上 攻击者拥有可在以下位置交换为访问令牌的有效代码: 诚实的IdP

    这通过使用OpenID Connect混合流得到缓解,其中 诚实的IdP的发卡机构标识符包含在
    iss
    的值中。 然后,客户端将代码发送到令牌端点,该端点是 与发卡机构标识符关联,因此它将无法访问 攻击者

    8.4.3。授权响应参数注入攻击

    当受害者和攻击者使用同一依赖方客户端时,就会发生此攻击。 攻击者能够以某种方式捕获授权代码并 从受害者的授权响应中声明,并在其 自己的授权响应

    这可以通过使用OpenID连接混合流来缓解,其中
    c_hash
    at_hash
    s_hash
    可用于验证 授权代码、访问令牌和状态参数。服务器可以 验证状态是否与浏览器中存储的状态相同 授权请求时的会话

    有关这两种攻击和对策的更多技术说明,请参阅


    要获得真正详细的描述,请参阅本文

    混合流允许后端以脱机方式(当用户不再通过浏览器发送请求时)或独立于前端继续代表用户行事。。。同时做其他事情。它可以使用后通道交换的刷新令牌继续获取新的访问令牌并无限期地工作