2017-02-15 139 views
0

是否有它适合与ID连接到使用一个标准的HTTP认证方案?我心目中的场景如下:HTTP认证报头的OpenID授权码

HTTP服务需要用户的身份验证。其中一种可能的身份验证方法是使用来自第三方OpenID提供商的联合身份。该服务作为机密客户端向第三方OpenID提供商注册,并拥有client_id和客户机密钥。

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

客户端将联系授权:

当用户试图访问HTTP服务,该服务器具有401 Unauthorized,以及有关如何发起与OpenID提供的认证请求一个WWW-Authenticate报头信息包含响应端点,进行身份验证,然后获得授权码。该代码随后经由Authorization头的后续请求到服务指定,例如:

GET/HTTP/1.1 

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

该服务将使用的代码来从OpenID提供获得ID令牌和与所述客户端建立一个鉴权会话,例如通过设置一个cookie或返回一组新的凭证用于后续请求。

OpenIDConnect方案是我弥补了这个例子。我试图寻找一种标准的方式来做类似的事情,而缺乏结果让我有以下可能的答案:

  1. 我还没有足够努力的搜索。
  2. 我想要做的是误导和错误。
  3. 每个人实现自己的定制身份验证方案用于此目的

回答

0

我想你不知道到哪里寻找在首位。由于RFC 7353,HTTP中的认证方案受制于IANA HTTP Authentication Scheme Registry。在所述注册表中,您将找到OAuth计划,该计划受RFC 5849, section 3.5.1约束,并且看起来很像您正在寻找的东西。这就是说,但是,这是OAuth 1.0。 OAUTH 2.0诉诸BasicRFC 6749)和BearerRFC 6750)方案。

此以其整体被concernig 授权(通过OAuth)。不过,OpenID的领域是认证。你可能想看看What's the difference between OpenID and OAuth?

+0

感谢。由于OpenID Connect基于OAuth 2.0,因此我认为OAuth 1.0方案不适合用于我的目的。我认为'承载者'是不合适的,原因有两个:(1)它是OAuth 2.0访问令牌,而我最终需要的是一个id_token(正如你指出的那样,我对认证感兴趣而不是授权)。 (2)我需要发送授权码,而不是令牌。正如OIDC Core规范中所述,我正在有效地寻找一种可用于将授权代码从用户代理传输到机密客户端的方案。 –

+0

但无论如何,由于您链接到的注册表不包含适合我的确切用例的任何内容,我想答案是没有定义任何标准方案。 –

+0

@UlrikRasmussen也许[本指南](http://openid.net/specs/openid-connect-basic-1_0.html)对你有帮助?(注意[这部分](http://openid.net/specs/openid-connect-basic-1_0.html#TokenRequest))但是你是对的:没有专门为OpenID Connect预留的认证方案。 – DaSourcerer