对 OpenID Connect 调用授权端点
在 OpenID Connect 中,授权端点处理用户的认证和授权。
开始之前
关于此任务
授权端点接受包含 OAuth 2.0 和 OpenID Connect 1.0 规范定义的参数的认证请求。
在授权代码流程中,授权端点用于认证和授权,并返回针对客户机的授权。此授权可由客户机在针对标识令牌、访问令牌和刷新令牌的请求中通过交换传递至令牌端点。在隐式流程中,授权端点仍执行认证和授权,但还会直接在其响应中对客户机返回标识令牌和访问令牌;不会执行与令牌端点的交互。
已启用 OpenID Connect 的 Liberty 服务器可访问位于以下 URL 的 OpenID Connect 授权端点:
https://server.example.com:443/oidc/endpoint/<provider_name>/authorize
注: 在此示例中,OP 的 SSL 端口应该为 443。
过程
结果
接收到来自客户机的请求后,OpenID Connect 提供程序尝试对用户进行认证和授权。
在授权代码流程中,如果认证和授权成功,那么 OpenID Connect 提供程序会发出授权代码并将其作为参数包含在客户机的 OAuth 2.0 授权响应中。如果初始请求包含 state,那么授权响应还将包含初始请求中包含的确切 state 值。通过使用 application/x-www-form-urlencoded 格式,code 和 state 参数作为查询参数添加至授权请求中指定的 redirect_uri 值。
在隐式流程中,如果认证和授权成功,那么系统从授权端点返回以下参数。
- access_token:访问令牌。除非初始请求中的 [response_type] 值为 [id_token],否则返回此项。
- token_type:OAuth 2.0 令牌类型。对于 OpenID Connect,此值为 Bearer。
- id_token:标识令牌。
- state:包含在授权请求中时为必需项。
- expires_in:(可选)从生成响应开始算起访问令牌的到期时间(以秒计)。
这些参数会添加至授权请求中指定的 redirect_uri 值的片段部分中,而不是作为查询参数(例如,在授权代码流程中)。
示例
以下显示授权代码流程的请求示例:
GET /authorize?
response_type=code
&scope=openid profile email
&client_id=client01
&state=af0ifjsldkj
&redirect_uri=https://server.example.com:8020/oidcclient/redirect/client01 HTTP/1.1
以下显示隐式流程的请求示例:
GET /authorize?
response_type=id_token token
&scope=openid profile
&client_id=client01
&state=af0ifjsldkj
&redirect_uri=https://server.example.com:8020/oidcclient/redirect/client01
&nonce=n-0S6_WzA2Mj HTTP/1.1
以下显示授权代码流程中的授权端点返回的响应示例:
HTTP/1.1 302 Found
Location: https://server.example.com:8020/oidcclient/redirect/client01
code=SplxlOBeZQQYbYS6WxSbIA
&state=af0ifjsldkj
以下显示隐式流程中的授权端点返回的响应示例:
HTTP/1.1 302 Found
Location: https://server.example.com:8020/oidcclient/redirect/client01
access_token=SlAV32hkKG
&token_type=Bearer
&id_token=eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso
&expires_in=3600
&state=af0ifjsldkj