【发布时间】: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 中,并在第一个请求中传输到客户端)?
【问题讨论】: