5 重定向到OP进行验证
请求参数 | 参数值 |
openid.ns | http://specs.openid.net/auth/2.0 OpenID版本号 |
openid.mode | checkid_setup 允许用户与OP之间交互(比如普通登录) |
openid.claimed_id | (可选) 用户宣称的OpenID. 如果用户不采用代理方式,那么这与本地标识相同 |
openid.identity | (可选)本地标识 |
openid.assoc_handle | (可选) 建立关联阶段生成的通讯句柄 |
openid.return_to | (可选)认证完成之后重定向到RP端的URL |
openid.realm | (可选) OpenID服务器请求用户信任的URL |
注意:RP并没有直接发送HTTP请求到OP,而是重定向到OP认证页面。由于这样使得OP能够从用户浏览器中读取cookie而没有将任何认证细节泄露给RP,因此这个过程是安全的。
以下是登录plaxo网站时向yahoo!请求时提交的参数以及参数值:
openid.assoc_handle | B4H.wgHfnvp_7RgSLiLh0yCFh6EZtkJqvamH1O3_SH7aZod5POcxx.jF XdEYYbvcOv.gfZG5YHgr4DSNCmFS25EvqmTH.YkZ7KlUakSifq2H6 zid99UffUVnJdXErUs- |
openid.ax.mode | fetch_request |
openid.ax.required | |
openid.ax.type.email | http://axschema.org/contact/email |
openid.claimed_id | http://specs.openid.net/auth/2.0/identifier_select |
openid.identity | http://specs.openid.net/auth/2.0/identifier_select |
openid.mode | checkid_setup |
openid.ns | http://specs.openid.net/auth/2.0 |
openid.ns.ax | http://openid.net/srv/ax/1.0 |
openid.ns.sreg | http://openid.net/extensions/sreg/1.1 |
openid.realm | http://*.plaxo.com |
openid.return_to | http://www.plaxo.com/openid?actionType=complete&r=%2Fevents |
openid.sreg.optional | nickname,email,fullname,dob,gender,postcode,country,language,timezone |
openid.sreg.policy_url | http://www.plaxo.com/about/privacy |
openid.sreg.required | |
openid.trust_root | http://*.plaxo.com |
6 回应认证请求
收到OpenID认证请求以后,OP需要决定允许还是拒绝用户的认证请求(当然如果用户提交的参数对了而且用户名密码也正确的话,估计也没有拒绝用户认证请求的,不过也有例外)。
注意:OP在接受用户认证请求时是有控制权的。他不但能异步的响应认证请求,而且能在响应认证请求之前先跟用户交互一阵子。最基本的表现在于:大多数的OP在相应请求之前都会询问用户是否拒绝RP的请求。
响应参数 | 参数值 |
openid.ns | http://specs.openid.net/auth/2.0 OpenID版本号 |
openid.mode | id_res 表示对认证请求的响应 |
openid.op_endpoint | OpenID的server URL |
openid.claimed_id | (可选) OpenID |
openid.identity | (可选) OpenID |
openid.return_to | 请求时发送的return_to参数 |
openid.response_nonce | 一个长度小于255的字符串,对于每次响应是唯一的 |
openid.invalidate_handle | (可选)如果RP发送了一个非法的句柄,应该设置为这个参数值 |
openid.assoc_handle | 用于数字签名的句柄 |
openid.signed | RP请求的,以逗号分隔的签名字段 |
openid.sig | Base64编码的签名 |
7 验证响应信息
RP接受OP的响应,并对一下信息进行验证
1 openid.return_to:是否匹配当前url,保证OP重定向到正确的URL。
2 The discovered information matches the information in the assertion.(不理解)
3 如果response_nonce具有相同的参数值,代表代表op受到了reply attack
4 签名是否有效,是否所有需要签名的参数都签名了,保证响应信息没有被篡改过
如果以上四条都满足的话,可以确定认证成功