范围用于界定哪些应用程序可以代表资源所有者进行操作。
如果您有应用程序,比如说投票服务,请访问voting.example.com。您有两个角色:选民,可以查看民意调查和投票;管理员,可以查看完整结果。投票应用程序根据这些角色强制执行权限。为本地用户分配了本地角色。该应用程序使用 OAuth 进行保护,因此可以通过令牌识别用户。
您还有一个社交网络应用 social.example.com。这个应用程序提供了一个页面,用户可以在其中对投票服务进行投票。它还连接到同一个 OAuth 授权服务器。
最后,别人有一个报告应用,reports.example.com。此应用程序希望允许用户通过向投票服务请求投票结果来查看投票结果。它连接到同一个授权服务器。
授权服务器,例如 iam.example.com。授权服务器具有三个客户端,一个用于上述每个应用程序。授权服务器中定义了两个作用域voting和reporting。
报告应用程序在您登录时将请求reporting 范围。实际登录发生在 iam.example.com 上,这会将令牌授予 reports.example.com。登录表单将询问您(用户)是否授予客户 (reports.example.com) 代表您行事并从投票服务获取报告的权利(由reports 范围提供)。范围将被记录并与它发送到 reports.example.com 的令牌相关联。
现在报告应用程序可以向voting.example.com 发出请求,上面写着“我想查看投票记录”voting.example.com 应用程序将检查令牌,并提供reports范围,它会发回计数。
如果它试图向投票服务发出投票请求,它应该被voting.example.com 拒绝,因为不记名令牌没有允许您投票的范围。这必须由投票应用程序强制执行。授权服务器管理哪个客户端被授予哪个范围。只看报道。这与您在投票应用程序中的角色无关。
OAuth 本身不提供身份验证机制,因此您没有通过令牌验证您是谁以及您拥有什么角色的机制。 OpendID connect (OIDC) 通过提供受授权端点保护的基于范围的身份端点来为此提供额外的功能,允许它向应用程序显示您的身份。因此,如果我们假设您也有 OIDC,那么它将从令牌中检查您是谁。然后它可以检查它的数据库,看看你是否有正确的角色,以及在发送之前是否允许你查看计数。
范围强制执行的是,报告应用程序可以使用其客户端获取令牌以代表您执行操作并询问信息。当您授予客户端范围时,您允许它与投票服务进行通信以获取信息。
角色由您的应用程序管理,并通过权限系统确定谁可以投票,谁可以阅读选票。
使用 OIDC 之类的东西,您可以扩展 OAuth,以便令牌识别您的身份。 Voting.example.com 然后可以检查您是否 a) 被授权投票(通过本地逻辑),b) 代表您执行此操作的应用程序是否被允许代表您执行操作(通过附加到令牌的范围)。