OAuth2.0 中使用 access_Token 精细控制 API 访问权限
OAuth2.0 广泛应用于现代应用开发,尤其在跨应用共享用户数据场景中。例如,A 公司的 App 嵌套了 B 公司的 H5 页面,该页面需要访问 A 公司的用户信息。B 公司通过 OAuth2.0 获取了 A 公司的 Access_token,如何确保此 token 仅能访问特定接口,而非 A 公司所有接口呢?
问题在于如何利用 OAuth2.0 限制 access_token 的访问范围,使其仅能调用 A 公司的特定接口(例如:获取手机号、用户真实姓名、用户身份证),而不能访问其他接口。
OAuth2.0 的 scope 机制完美解决了这个问题。scope 用于定义 access_token 的访问权限。在授权过程中,我们可以通过 scope 参数明确规定 access_token 的权限范围,从而限制其访问的接口。
当 B 公司的 H5 页面请求 A 公司用户信息时,A 公司的授权端点 (authorization endpoint) 会向用户请求授权。请求中包含的 scope 参数指定所需的权限:
GET /authorize? response_type=code& client_id=s6BhdRkqt3& redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb& scope=phone+name+idcard& state=xyz
scope=phone+name+idcard 表示仅请求获取手机号、用户真实姓名和身份证的权限。
用户授权后,A 公司颁发包含特定权限的 access_token。B 公司的 H5 页面使用此 token 请求 A 公司的资源服务器时,服务器会根据 token 中的权限决定是否允许访问。如果请求的接口不在权限范围内,服务器将拒绝访问。
因此,scope 机制可以限制 access_token 的使用范围,实现精细的接口访问权限控制。这不仅限制了 access_token 的访问范围,还通过用户授权确保了接口访问的合法性,实现了双重保护。
这种方法清晰地区分了 access_token 的访问范围和用户的授权,是实现精细权限控制的有效手段。