使用授权服务器限制用户的 Scope
访问策略通过对定义的授权类型、用户和Scope组合,对该组合定义特定的 Access token 和 Refresh token 的生命周期来帮助您保护您的 API 端点。可以制定是否允许应用程序访问您受保护 API 中的特定信息以及访问的时长。
我们拿金融行业的 API 举例,如果是访问一个交易的信息,我们可以发放一个包含transactios:read
的访问令牌,该令牌的生命周期可以设定为几个小时。但是,如果需要调用转移资金的 API,则访问令牌的生命周期应该配置为分钟级别。
您还可以在 ID Token 和 Access Token 中包含自定义的 Claims,以通过令牌来与应用共享的信息。自定义的 claims 可以减少应用对于 IDP 的信息的查询次数。
策略按照优先级顺序进行评估,策略中的规则也是如此。策略会执行第一个匹配到的策略和规则,一旦匹配之后,即开始执行,终止继续匹配的流程。如果客户端没有匹配到任何策略,则身份验证尝试失败并返回错误。
XAuth 提供了多种灵活的策略,以下为其中一个例子:
使用以下步骤创建限制指定客户可以访问的范围的策略。
创建自定义 Scope
- 控制台 API>授权服务器
- 选择默认的授权服务器
- 切换到Scope 选项卡,添加 Scope
创建策略
- 控制台 API>授权服务器
- 选择默认的授权服务器
- 切换到访问策略 选项卡,添加策略
- 为添加的策略输入名称和描述
- 选择策略涵盖的应用:输入应用的名称。此字段会自动关联相匹配的应用程序列表。
添加规则
-
选择刚刚创建的策略,选择添加规则
-
输入规则名,协议模式和用户选择需要赋予该 Scope 的用户组
-
对于 请求 Scopes,选择指定的 Scope:然后单击 OIDC 默认范围,所有 OpenID Connect 保留范围都显示在框中。
-
应用程序可以请求的范围限制为 openid 和 transactios:read 范围。
-
其他地方保留默认。点击保存。
策略按照优先级顺序进行评估,策略中的规则也是如此。策略会执行第一个匹配到的策略和规则,一旦匹配之后,即开始执行,终止继续匹配的流程。如果客户端没有匹配到任何策略,则身份验证尝试失败并返回错误。
测试配置
让我们测试您的访问策略并取回访问令牌。
- 从指定的应用页面获取:
-
Client ID
-
有效的 Redirect URI
确认该应用下已经授权了一个有效的用户
-
从配置的授权服务器的 metadata 中获取授权的地址,参考如下:
https://${yourXAuthDomain}/oauth2/default/v1/authorize
-
添加以下参数:
-
OpenID Connect 应用程序的
client_id
和redirect_uri
-
Scopes,在本示例中是
openid
和transactios:read
-
response_mode,您可以将其设置为
fragment
-
state
值和nonce
值注意:如果
response_type
是code
,则需要nonce
值。参考如下:
https://${yourXAuthDomain}/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
- 在浏览器中打开将 URL 粘贴到地址框中。您将被重定向到您的 XAuth 组织的登录页面。
- 输入用户的登录凭据,您将被定向到您指定的 redirect_uri。在地址框中可以获取到 code
- 复制出 code,通过 token 请求可以的得到返回的解析得到相应的 JWT 令牌中的信息。
curl -v -X POST \
-H "Content-type:application/x-www-form-urlencoded" \
"https://${yourXAuthDomain}/oauth/v1/default/token" \
-d "client_id=${clientId}&client_secret=${clientSecret}&grant_type=authorization_code&redirect_uri=${redirectUri}&code=${code}"
- 通过JWT Token 在线解析,查看 Token 中的内容