调用 OpenID Connect 的授权端点

在 OpenID Connect 中,授权端点处理用户的认证和授权。

开始之前

例如,从浏览器内的客户机应用程序或脚本语言(例如,JavaScript)中实现的客户机应用程序启动授权端点时,不需要将 Liberty 服务器配置为 OpenID Connect 客户机。

关于此任务

授权端点接受包含 OAuth 2.0OpenID Connect 1.0 规范定义的参数的认证请求。

在授权代码流程中,授权端点用于认证和授权,并返回针对客户机的授权。此授权可由客户机在针对标识令牌、访问令牌和刷新令牌的请求中通过交换传递至令牌端点。在隐式流程中,授权端点仍执行认证和授权,但还会直接在其响应中对客户机返回标识令牌和访问令牌;不会执行与令牌端点的交互。

已启用 OpenID Connect 的 Liberty 服务器可访问位于以下 URL 的 OpenID Connect 授权端点:

 https://server.example.com:443/oidc/endpoint/<provider_name>/authorize
避免故障: 如果要使用出站代理,请注意 OpenID Connect RP 未提供通过代理主机自动路由请求的方法。

如果必须使用代理来访问 OpenID Connect 提供者 (OP),那么您对与任何 OP 相关的 URL 属性输入的值必须包含代理主机和端口,而不是外部 OP 主机和端口。

在大部分情况下,可将 OP 主机和端口替换为代理主机和端口。您输入的 URL 必须对 RP 和客户端(浏览器或应用程序)可视。有关如何确定要使用的正确 URL 的进一步指南,请联系代理管理员。

在此示例中,客户机期望 SSL 端口设置为 443。

过程

  1. 准备包含以下必需参数和建议参数的 HTTP GET 或 POST 请求。
    • scope:(必需)OpenID Connect 请求必须包含 openid 范围值。也可存在其他范围
    • response_type:(必需)确定要使用的授权处理流程。使用授权代码流程时,此值为 code。使用隐式流程时,此值为 id_token tokenid_token。此值为 id_token 时,不返回任何访问令牌
    • client_id:(必需)在 OpenID Connect 提供者上有效的客户机标识。
    • redirect_uri:(必需)响应将发送至的重定向 URI。此值必须与 OP 上已注册客户机的某个重定向 URI 值完全匹配。
    • state:(建议)不透明值,用于在请求与回调之间维护状态。
    • nonce:(对于隐式流程是必需的)字符串值,用于将客户机会话与标识令牌相关联并减少重放攻击。

    可在请求中包含更多参数。有关其他受支持参数的描述,请参阅 OpenID Connect Core 1.0 规范。

    我们只是不支持 id_token 响应类型。使用隐式流程时,必须始终使用 id_token token 并将返回访问令牌。

  2. 将 GET 或 POST 请求发送至授权端点 URL。

结果

完成这些步骤后,您将获得有效 HTTP 请求,此请求将发送至授权端点。授权端点按“示例”一节中描述的方式返回响应。

接收到来自客户机的请求后,OpenID Connect 提供者尝试对用户进行认证和授权。

在授权代码流程中,如果认证和授权成功,那么 OpenID Connect 提供者会发出授权代码并将其作为参数包含在客户机的 OAuth 2.0 授权响应中。如果初始请求包含 state,那么授权响应还将包含初始请求中包含的确切 state 值。通过使用 application/x-www-form-urlencoded 格式,codestate 参数作为查询参数添加至授权请求中指定的 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

用于指示主题类型的图标 任务主题

文件名:twlp_oidc_auth_endpoint.html