OpenID Connect 持久化 ID 令牌到服务器端回调函数
OpenID Connect Persist ID Token to Server-side Callback Function
假设我调用以下 HTTP 请求:
https://accounts.example.com/oauth2/auth?
scope=openid+email&
nonce=53f2495d7b435ac571&
redirect_uri=https%3A%2F%2Foauth2demo.appspot.com%2Foauthcallback&
response_type=id_token+token&
client_id=753560681145-2ik2j3snsvbs80ijdi8.apps.googleusercontent.com
这会产生以下重定向响应:
https://oauth2demo.appspot.com/oauthcallback#
access_token=ya29.AHES6ZSzX
token_type=Bearer&
expires_in=3600&
id_token=eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiY...
考虑到返回的元数据(包含 id_token 等)位于 URI 中的哈希片段之后,因此回调参数的意义何在,因此不会作为回调的参数保留功能?服务器端回调如何接收各种令牌?
此处使用的响应类型是所谓的 "Implicit" 响应类型,主要用于浏览器内(例如 Javascript)客户端,在这种情况下 Javascript 在回调 URL 上提供的代码可以访问片段中的参数。 Web 应用程序应执行以下任一操作:
- 坚持适用于 Web 应用程序客户端的
code
流程
- 如果 OP
支持,请使用表单 Post 响应模式 (http://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html)
- 在回调 URL 上服务 Javascript,该回调 URL 从片段中解析出参数并将它们 POST 到服务器
底线是,如果您需要令牌服务器端,您最有可能使用 code
响应类型。
假设我调用以下 HTTP 请求:
https://accounts.example.com/oauth2/auth?
scope=openid+email&
nonce=53f2495d7b435ac571&
redirect_uri=https%3A%2F%2Foauth2demo.appspot.com%2Foauthcallback&
response_type=id_token+token&
client_id=753560681145-2ik2j3snsvbs80ijdi8.apps.googleusercontent.com
这会产生以下重定向响应:
https://oauth2demo.appspot.com/oauthcallback#
access_token=ya29.AHES6ZSzX
token_type=Bearer&
expires_in=3600&
id_token=eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiY...
考虑到返回的元数据(包含 id_token 等)位于 URI 中的哈希片段之后,因此回调参数的意义何在,因此不会作为回调的参数保留功能?服务器端回调如何接收各种令牌?
此处使用的响应类型是所谓的 "Implicit" 响应类型,主要用于浏览器内(例如 Javascript)客户端,在这种情况下 Javascript 在回调 URL 上提供的代码可以访问片段中的参数。 Web 应用程序应执行以下任一操作:
- 坚持适用于 Web 应用程序客户端的
code
流程 - 如果 OP 支持,请使用表单 Post 响应模式 (http://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html)
- 在回调 URL 上服务 Javascript,该回调 URL 从片段中解析出参数并将它们 POST 到服务器
底线是,如果您需要令牌服务器端,您最有可能使用 code
响应类型。