配置 OpenID Connect 提供者以启用两脚 OAuth 请求
典型 OAuth 流程由客户机与授权服务器之间的交互的三只“脚”或三个阶段构成。在两脚 OAuth 方案中,客户机使用预授权范围以便不需要与用户交互(不需要在典型流程中执行其中一只脚)。具体地说,用户不必向授权服务器认证或同意共享所请求范围指定的信息。反而全部所请求范围参数被视为预授权的,并自动添加至请求令牌,然后请求令牌被发送至授权服务器。
开始之前
关于此任务
在具有两只脚或两个阶段的方案中,Open ID Connect 客户机可发送 grant type 为 client_credential 或 resource owner password 的两脚 HTTP 请求。这些请求不会通过授权端点,所以不存在用户确认并批准所请求范围的范围同意表单;但是,OpenID Connect 提供者仍需要处理其 access_token 内容中的授权范围。
配置为 OpenID Connect 提供者(配备为处理两脚 OAuth 请求)的 Liberty 服务器通过使用以下条件来批准预授权范围:
- 如果请求的 grant_type 参数值为 client_credential 或 resource owner password 并且该请求为 OAuth 2.0 请求,那么在该请求中定义的所有范围被批准并复制到访问令牌的内容中。这是 OAuth 2.0 功能部件的现有行为。
- 如果该请求为 OpenID Connect 请求、JWT 令牌 OAuth 请求或 OpenID Connect 请求,那么使用以下条件:
- 如果未在请求中指定任何范围参数,那么 OpenID Connect 提供者不会接受该请求。
- 所请求范围必须出现在客户机配置的 scope 属性定义的范围列表中,并且必须同时在客户机配置的 preAuthorizedScope 列表中指定。
此任务演示如何配置将充当 OpenID Connect 提供者以启用两脚 OAuth 请求的 Liberty 服务器。
过程
要对客户机指定预授权范围列表,请将必需范围添加至 server.xml 文件的相应 <oauthProvider> 元素内的客户机配置的
scope 和 preAuthorizedScope 属性。在所显示的示例中,范围 profile 和 email
被限定为 OpenID Connect 提供者返回的访问令牌的范围列表中指定。phone
范围不会被视为预授权范围,因为它不在 preAuthorizedScope 列表中。
<oauthProvider id="OAuthConfigSample" ...>
....
<localStore>
<client name="client01" secret="{xor}..."
displayname="client01"
scope="profile email phone"
preAuthorizedScope="profile email"
enabled="true" />
....
</localStore>
</oauthProvider>
注: 如果所请求范围未列示在客户机配置的 scope
属性中,那么系统会在所返回访问令牌的范围列表中省略该范围。如果所请求范围列示在客户机配置的 scope 属性中但未包含在客户机配置的 preAuthorizedScope
列表中,那么它会在 OpenID Connect 提供者返回的响应中触发 invalid_grant 错误。