Client Credential授权模式下,如何在访问令牌请求中指定目标资源服务器?
Client Credentials模式下的令牌与资源服务关联问题
令牌是否针对特定资源服务?
是的,默认情况下,用Client Credentials模式获取的访问令牌并不绑定特定资源服务。这个模式是客户端以自身身份直接向授权服务器申请令牌,不需要代表用户,所以标准请求流程里确实不用指定目标资源的URI。
令牌与资源URL的关联方式
令牌和资源服务的关联主要分两种情况:
- 显式绑定:请求时指定
resource参数
不少授权服务器允许在令牌请求中添加resource参数(比如调用POST /token接口时带上resource=https://api.example.com),这时返回的令牌会包含aud(受众)声明,值就是你指定的资源服务URL。这种令牌只能被对应的资源服务接受,其他资源服务会因为aud不匹配直接拒绝请求。 - 隐式关联:通过权限范围或授权配置
如果请求时没指定资源,令牌的aud通常是授权服务器自身的标识,或者是该客户端被允许访问的所有资源的集合(具体看授权服务器的配置)。此时资源服务需要做两步验证:- 先验证令牌本身的合法性,比如签名是否有效、是否过期;
- 再检查该客户端是否被授权访问当前资源——一般是通过令牌里的
scope声明(比如scope=api:read),或者直接查询授权服务器的权限配置来确认。
需要注意的是:不管令牌有没有显式绑定资源,资源服务都必须验证令牌的aud声明是否包含自身的标识,这是OAuth 2.0的安全规范要求。如果令牌的受众不包含当前资源服务,就应该拒绝请求。
内容的提问来源于stack exchange,提问作者Mehdi
相关产品推荐
相关产品推荐

