首页 > 解决方案 > 使用 OpenID Connect 和 OAuth 管理应用程序访问

问题描述

纵观 OpenID Connect 和 OAuth 规范,OpenID Connect 似乎都是关于身份的,而 OAuth 是关于委托访问的(尽管它似乎是专门的API访问)。

如果 OAuth 用于 API 访问,管理客户端访问的推荐方法是什么?OpenID Connect 可以说明您是谁,但说明您可以访问哪些客户端(应用程序)。

这是应用程序本身的工作还是我们可以放在访问令牌上的东西?

标签: oauth-2.0openididentityopenid-connect

解决方案


我不确定你到底想知道什么,所以我会尝试更广泛地回答。

假设您有一个身份验证 (OAuth2) 提供者、多个使用它的应用程序(客户端)和多个用户。

如果客户端获得 ID 令牌,则该令牌应该仅用于请求它的客户端验证用户身份 - ID 令牌包含aud(audience) 字段和客户端的client_id.

如果客户端获得资源所有者授权的访问令牌,则客户端可以使用访问令牌访问任何接受授权提供者颁发的令牌的资源(API 服务)。但 API 服务会检查访问令牌是否包含服务所需的范围。如果客户端请求资源所有者无法委托的范围(没有足够的权限),则身份验证提供程序可以返回错误 invalid_scope或只是从访问令牌中省略范围。客户端是否可以委派范围的决定取决于身份验证提供程序的实现(OAuth2 RFC没有涵盖它)。

如果您想限制某些用户/客户端组合,因此用户无法授权客户端获取令牌,那么再次,它是您的身份验证提供程序的实现细节。

如果您的问题更多是关于允许经过身份验证的用户在具有其 ID 令牌(或访问令牌)的应用程序中执行的操作,那么由您决定如何执行此操作。应用程序通常需要限制对服务和数据的访问。服务通常是静态的,访问可以基于访问令牌范围。但应用程序数据是动态的,访问通常基于数据所有权或访问控制列表(ACL - 类似于文件系统)。


推荐阅读