【问题标题】:OpenId Connect Implicit Flow with Resource Owner Password Credentials GrantOpenId Connect 隐式流与资源所有者密码凭证授予
【发布时间】:2015-08-16 06:58:22
【问题描述】:

我目前正在开发一个用于演示目的的 OpenId 服务器/客户端,但我很难理解以下规范。
http://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthRequest

1) clientApp 向 serverApp 发送请求(ajax)以获取 session id

2) clientApp 向 serverApp 发送认证请求(ajax)

{
  response_type : "id_token",
  scope: "openid profile",    
  client_id: "clientApp",
  redirect_uri : "clientAppAddress/redirecturi",
  state: ???,
  nonce: ??? 
}

grant_type、用户名和密码没有可选字段(如 RFC6749:访问令牌请求)。如何传输凭据?

此外,我不明白“状态”和“随机数”背后的概念。规范说,nonce 的值“需要包括每个会话的状态并且攻击者无法猜测。对于 Web 服务器客户端实现此目的的一种方法是将加密随机值存储为 HttpOnly 会话 cookie,并使用该值的加密哈希作为nonce 参数。”,而 state 用于缓解 CSRF,XSRF “通过加密将此参数的值与浏览器 cookie 绑定”。它们之间的区别在哪里,它们如何提高安全性?我会为他们两个都使用 sessionid 的哈希值(存储在 http only cookie 中,并在第一个请求中传输到客户端)?

【问题讨论】:

    标签: oauth-2.0 openid-connect


    【解决方案1】:

    验证用户的实际方法,因此传输凭据不是 OpenID Connect 规范的一部分。 OpenID Connect 规范仅告诉您如何将有关身份验证事件和用户的信息传输到对等点。用户身份验证的方式与此无关。

    state 参数用于关联请求和响应,并在请求和响应之间共享上下文。您通常会与state 关联的一件事是用户尝试访问的 URL,因此在成功的身份验证响应后您可以重定向到该 URL。

    nonce 参数是为了防止重放攻击,因为该值应该被缓存。

    它们一起用于防止跨站点请求伪造,其中攻击者掌握了id_token 并尝试对 RP 使用它来冒充攻击者浏览器中的用户。

    最好为statenonce 使用其他值而不是直接从session_id 派生,因为您可能希望从同一个会话重新启动身份验证,然后nonce 重放预防会阻止您重复使用它(并区分您和攻击者)。此外,state 应该是不可猜测的,因此与之前在同一会话中使用的不同。

    【讨论】:

      猜你喜欢
      • 2014-07-25
      • 2015-01-06
      • 2014-09-02
      • 2018-05-25
      • 2016-12-31
      • 1970-01-01
      • 2015-05-30
      • 2016-03-03
      • 1970-01-01
      相关资源
      最近更新 更多