【问题标题】:HTTP Authentication header for OpenID authorization codesOpenID 授权码的 HTTP Authentication 标头
【发布时间】:2017-07-04 07:52:29
【问题描述】:

是否有适合与 OpenID Connect 一起使用的标准 HTTP 身份验证方案?我想到的场景如下:

HTTP 服务需要对用户进行身份验证。一种可能的身份验证方法是使用来自第 3 方 OpenID 提供者的联合身份。该服务作为机密客户端在第 3 方 OpenID Provider 中注册,并拥有一个 client_id 和一个客户端密码。

当用户尝试访问 HTTP 服务时,服务器会以 401 UnauthorizedWWW-Authenticate 标头进行响应,其中包含有关如何使用 OpenID 提供程序发起身份验证请求的信息:

WWW-Authenticate: OpenIDConnect realm="MyService", client_id="1234-5678", authorization_url="https://provider/authorize"

客户端联系授权端点,进行身份验证,然后获取授权码。然后通过Authorization 标头在对服务的后续请求中指定代码,例如:

GET / HTTP/1.1

Authorization: OpenIDConnect client_id="1234-5678", code="AAABAAA..."

服务将使用代码从 OpenID 提供者获取 ID 令牌,并与客户端建立经过身份验证的会话,例如通过设置 cookie 或返回一组新的凭据以用于后续请求。

OpenIDConnect 方案是我为这个例子编造的。我曾尝试寻找一种标准方法来做类似的事情,但没有结果给我留下了以下可能的答案:

  1. 我搜索的不够仔细。
  2. 我正在尝试做的是误导和错误的。
  3. 为此,每个人都实施了自己的自定义身份验证方案

【问题讨论】:

    标签: rest http authentication http-headers openid


    【解决方案1】:

    我想你一开始不知道去哪里找。由于RFC 7353,HTTP 中的身份验证方案受制于IANA HTTP Authentication Scheme Registry。在所述注册表中,您将找到受RFC 5849, section 3.5.1 约束的OAuth 方案,并且看起来很像您正在寻找的东西。话虽如此,但这是针对 OAuth 1.0 的。 OAUth 2.0 采用Basic (RFC 6749) 和Bearer (RFC 6750) 方案。

    这完全是关于授权(通过 OAuth)。不过,OpenID 的领域是身份验证。你可能想看看What's the difference between OpenID and OAuth?

    【讨论】:

    • 谢谢。由于 OpenID Connect 基于 OAuth 2.0,我认为 OAuth 1.0 方案不适合用于我的目的。我认为Bearer 不合适有两个原因:(1)它用于 OAuth 2.0 访问令牌,而我最终需要的是 id_token(正如您所指出的,我对身份验证而不是授权感兴趣); (2) 我需要发送授权码,而不是令牌。正如 OIDC 核心规范中所述,我正在有效地寻找一种可用于将授权代码从用户代理传输到机密客户端的方案。
    • 但是无论如何,由于您链接到的注册表不包含任何适合我的确切用例的内容,我想答案是没有定义任何标准方案。
    • @UlrikRasmussen 也许this guide 对你有帮助? (注意this part)但你是对的:没有专门为 OpenID Connect 保留的身份验证方案。
    猜你喜欢
    • 2011-06-08
    • 2015-05-30
    • 2016-04-24
    • 1970-01-01
    • 2022-12-17
    • 2012-04-18
    • 2016-06-02
    • 2016-09-06
    相关资源
    最近更新 更多