Link Search Menu Expand Document

使用授权服务器限制用户的 Scope

  1. 使用授权服务器限制用户的 Scope
    1. 创建自定义 Scope
    2. 创建策略
    3. 添加规则
    4. 测试配置

访问策略通过对定义的授权类型用户Scope组合,对该组合定义特定的 Access token 和 Refresh token 的生命周期来帮助您保护您的 API 端点。可以制定是否允许应用程序访问您受保护 API 中的特定信息以及访问的时长。

我们拿金融行业的 API 举例,如果是访问一个交易的信息,我们可以发放一个包含transactios:read 的访问令牌,该令牌的生命周期可以设定为几个小时。但是,如果需要调用转移资金的 API,则访问令牌的生命周期应该配置为分钟级别。

您还可以在 ID Token 和 Access Token 中包含自定义的 Claims,以通过令牌来与应用共享的信息。自定义的 claims 可以减少应用对于 IDP 的信息的查询次数。

策略按照优先级顺序进行评估,策略中的规则也是如此。策略会执行第一个匹配到的策略和规则,一旦匹配之后,即开始执行,终止继续匹配的流程。如果客户端没有匹配到任何策略,则身份验证尝试失败并返回错误。

OneAuth 提供了多种灵活的策略,以下为其中一个例子:

使用以下步骤创建限制指定客户可以访问的范围的策略。

创建自定义 Scope

  1. 控制台 API>授权服务器
  2. 选择默认的授权服务器
  3. 切换到Scope 选项卡,添加 Scope
  4. image

创建策略

  1. 控制台 API>授权服务器
  2. 选择默认的授权服务器
  3. 切换到访问策略 选项卡,添加策略
  4. 为添加的策略输入名称描述
  5. 选择策略涵盖的应用:输入应用的名称。此字段会自动关联相匹配的应用程序列表。

image

添加规则

  1. 选择刚刚创建的策略,选择添加规则

  2. 输入规则名协议模式用户选择需要赋予该 Scope 的用户组

  3. 对于 请求 Scopes,选择指定的 Scope:然后单击 OIDC 默认范围,所有 OpenID Connect 保留范围都显示在框中。

  4. 应用程序可以请求的范围限制为 openid 和 transactios:read 范围。

  5. 其他地方保留默认。点击保存

    策略按照优先级顺序进行评估,策略中的规则也是如此。策略会执行第一个匹配到的策略和规则,一旦匹配之后,即开始执行,终止继续匹配的流程。如果客户端没有匹配到任何策略,则身份验证尝试失败并返回错误。

image

测试配置

让我们测试您的访问策略并取回访问令牌。

  1. 从指定的应用页面获取:
  • Client ID

  • 有效的 Redirect URI

    确认该应用下已经授权了一个有效的用户

  1. 从配置的授权服务器的 metadata 中获取授权的地址,参考如下:

    https://${yourOneAuthDomain}/oauth/default/v1/authorize
    
  2. 添加以下参数:

  • OpenID Connect 应用程序的 client_idredirect_uri

  • Scopes,在本示例中是 openidtransactios:read

  • response_mode,您可以将其设置为fragment

  • state值和nonce

    注意:如果 response_typecode,则需要 nonce 值。

    参考如下:

https://${yourOneAuthDomain}/oauth/v1/${authorizationServerId}/authorize?client_id=${client_id}&response_type=token&response_mode=fragment&scope=openid email&redirect_uri=http://yourRedirectURI.com&state=xxxx&nonce=xxxx
  1. 在浏览器中打开将 URL 粘贴到地址框中。您将被重定向到您的 OneAuth 组织的登录页面。
  2. 输入用户的登录凭据,您将被定向到您指定的 redirect_uri。在地址框中可以获取到 code
  3. 复制出 code,通过 token 请求可以的得到返回的解析得到相应的 JWT 令牌中的信息。
curl -v -X POST \
-H "Content-type:application/x-www-form-urlencoded" \
"https://${yourOneAuthDomain}/oauth/v1/default/token" \
-d "client_id=${clientId}&client_secret=${clientSecret}&grant_type=authorization_code&redirect_uri=${redirectUri}&code=${code}"
  1. 通过JWT Token 在线解析,查看 Token 中的内容