C# 资源服务器如何从令牌中识别用户?

C# 资源服务器如何从令牌中识别用户?,c#,oauth-2.0,C#,Oauth 2.0,我试图理解OAuth2是如何工作的。 我不明白这件事:如果授权服务器和资源服务器不是同一个系统,如下图所示: 资源服务器如何知道谁是用户及其权限? 我可以从访问令牌中检索这些信息,还是必须在授权服务器和资源服务器之间进行后端通信?取决于令牌的类型以及资源服务器如何使用令牌 自编码访问令牌令牌(例如JWT承载令牌)将包含令牌中的所有用户和范围信息。或者一些身份验证系统使用令牌内省,如Jan的回答中所述 到资源服务器和令牌的类型 一个非常常见的自编码标记是 以自编码访问令牌为例: 访问令牌将包含用

我试图理解OAuth2是如何工作的。 我不明白这件事:如果授权服务器和资源服务器不是同一个系统,如下图所示:

资源服务器如何知道谁是用户及其权限?
我可以从访问令牌中检索这些信息,还是必须在授权服务器和资源服务器之间进行后端通信?

取决于令牌的类型以及资源服务器如何使用令牌

自编码访问令牌令牌(例如JWT承载令牌)将包含令牌中的所有用户和范围信息。或者一些身份验证系统使用令牌内省,如Jan的回答中所述

到资源服务器和令牌的类型

一个非常常见的自编码标记是

以自编码访问令牌为例:

访问令牌将包含用户标识符和上面示例中颁发的令牌的作用域/权限,这是“隐式”授予类型

资源服务器不需要联系身份验证服务器。这可能是Oauth 2.0 for API的主要优点之一。但它必须相信它。它应该确认令牌已由身份验证服务器签名,如果由身份验证服务器加密,它可能还需要能够解密令牌


显然,资源服务器需要能够访问令牌中用户的数据。可能是身份验证服务器和资源服务器指向同一基础数据库。

访问令牌通常是随机生成的字符串,因此您无法从中读取任何信息(但可能有OAuth2实现使用了一些有意义的值)。资源服务器提供访问令牌及其作用域,而不是创建令牌之前经过身份验证的用户(资源所有者)的权限。这是一个重要的细节,因为OAuth2是一个协议,用于以访问令牌及其作用域的形式将权限从资源所有者委派给客户机。为此,资源服务器需要向身份验证服务器的端点发出HTTP请求。JSON包含

  • 布尔标志
    active
    ,表示访问令牌是否仍然有效(未撤销、未过期)
  • 参数
    scope
    保存资源所有者授予的范围
  • 资源所有者的用户名
  • 其他一些有用的领域
  • 资源服务器应检查访问令牌是否处于活动状态,以及它是否包含请求的资源或服务所需的作用域。它可能会执行一些其他验证(例如请求的资源由
    用户名
    字段标识的资源所有者拥有)

    资源服务器可以缓存给定访问令牌的内省响应(以提高性能)。有关详细信息,请参阅RFC


    接入令牌可以以可验证的方式(例如,签名JWT)自包含授权信息。在这种情况下,资源服务器应该能够在不调用身份验证服务器的情况下验证令牌的真实性(签名)和作用域,但是很难实现,因为即使令牌在身份验证服务器上被撤销,资源服务器也会接受令牌。

    这可能会很复杂。用户、应用程序和资源之间存在许多不同的实现和组合关系

    也许对您的体系结构和相关实体之间的关系进行更具描述性的解释会有所帮助

    如果您正在尝试识别用户,则。你应该调查一下

    通常,资源服务器只需要知道作用域就可以提供访问。不是用户的身份

    -吉姆