Update openid.md

This commit is contained in:
shimingxy
2020-03-07 22:00:52 +08:00
parent 2422946258
commit 48b50f4d5d

View File

@@ -94,7 +94,7 @@ GET /authorize?
&state=af0ifjsldkj
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb HTTP/1.1
Host: server.example.com
</pre>
</code></pre>
<h4>4.2.2 基于Authorization Code的认证请求的响应</h4>
在OP接收到认证请求之后需要对请求参数做严格的验证具体的规则参见http://openid.net/specs/openid-connect-core-1_0.html#AuthRequestValidation验证通过后引导EU进行身份认证并且同意授权。在这一切都完成后会重定向到RP指定的回调地址(redirect_uri)并且把code和state参数传递过去。比如
<pre><code class="http hljs">
@@ -102,7 +102,7 @@ GET /authorize?
Location: https://client.example.org/cb?
code=SplxlOBeZQQYbYS6WxSbIA
&state=af0ifjsldkj
</pre>
</code></pre>
<h4>4.2.3 获取ID Token</h4>
RP使用上一步获得的code来请求Token EndPoint这一步桶OAuth2就不再展开细说了。然后Token EndPoint会返回响应的Token其中除了OAuth2规定的部分数据外还会附加一个id_token的字段。id_token字段就是上面提到的ID Token。例如
<pre><code class="json hljs">
@@ -127,7 +127,7 @@ RP使用上一步获得的code来请求Token EndPoint这一步桶OAuth2
K5hoDalrcvRYLSrQAZZKflyuVCyixEoV9GfNQC3_osjzw2PAithfubEEBLuVVk4
XUVrWOLrLl0nx7RkKU8NXNHq-rvKMzqg"
}
</pre>
</code></pre>
其中看起来一堆乱码的部分就是JWT格式的ID-Token。在RP拿到这些信息之后需要对id_token以及access_token进行验证具体的规则参见http://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation和http://openid.net/specs/openid-connect-core-1_0.html#ImplicitTokenValidation。至此可以说用户身份认证就可以完成了后续可以根据UserInfo EndPoint获取更完整的信息。
<h4>4.2.4 安全令牌 ID-Token</h4>
@@ -164,7 +164,7 @@ azp = Authorized party可选。结合aud使用。只有在被认证的一方
"auth_time": 1311280969,
"acr": "urn:mace:incommon:iap:silver"
}
</pre>
</code></pre>
另外ID Token必须使用JWT(JSON Web Token)进行签名和JWE(JSON Web Encryption)加密从而提供认证的完整性、不可否认性以及可选的保密性。关于JWT的更多内容请参看JSON Web Token - 在Web应用间安全地传递信息
<h3>4.3 默认模式流程</h3>
@@ -190,7 +190,7 @@ UserInfo Endpoint
GET /userinfo HTTP/1.1
Host: server.example.com
Authorization: Bearer SlAV32hkKG
</pre>
</code></pre>
成功之后响应如下:
<pre><code class="json hljs">
HTTP/1.1 200 OK
@@ -205,5 +205,5 @@ UserInfo Endpoint
"email": "janedoe@example.com",
"picture": "http://example.com/janedoe/me.jpg"
}
</pre>
</code></pre>
其中sub代表EU的唯一标识这个claim是必须的其他的都是可选的。