Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security OAuth 2.0授权服务器和访问令牌_Security_Authentication_Oauth 2.0_Openid Connect - Fatal编程技术网

Security OAuth 2.0授权服务器和访问令牌

Security OAuth 2.0授权服务器和访问令牌,security,authentication,oauth-2.0,openid-connect,Security,Authentication,Oauth 2.0,Openid Connect,我目前正在学习OAuth 2.0和OpenID Connect,我对授权服务器和访问令牌有疑问。规范将授权服务器定义为: 服务器在成功验证资源所有者并获得授权后向客户端颁发访问令牌 因此,据我所知,客户端将用户重定向到授权服务器,用户在授权服务器上进行身份验证,授权服务器向客户端发出访问令牌 现在有一件事我直到现在才明白。有两种可能的方法可以理解这一点,我正试图找到正确的方法: 授权服务器发出包含用户声明的访问令牌。带有用户声明的访问令牌随每个请求一起发送到资源服务器,资源服务器能够读取这些声明

我目前正在学习OAuth 2.0和OpenID Connect,我对授权服务器和访问令牌有疑问。规范将授权服务器定义为:

服务器在成功验证资源所有者并获得授权后向客户端颁发访问令牌

因此,据我所知,客户端将用户重定向到授权服务器,用户在授权服务器上进行身份验证,授权服务器向客户端发出访问令牌

现在有一件事我直到现在才明白。有两种可能的方法可以理解这一点,我正试图找到正确的方法:

授权服务器发出包含用户声明的访问令牌。带有用户声明的访问令牌随每个请求一起发送到资源服务器,资源服务器能够读取这些声明,然后根据这些声明允许或拒绝访问资源

授权服务器发出已包含明确指令的访问令牌,以允许或拒绝访问资源服务器上的资源。因此,资源服务器只是读取这些信息,以查看用户是否可以执行某些操作

第一种选择似乎是理解事情的正确方式。在这种情况下,授权服务器将管理用户的声明,并发布仅包含声明内容(如生日、年龄、角色等)的令牌。这反过来又给了资源服务器另一个责任:根据声明决定资源是否可用

第二种选择要有限得多。授权服务器需要为每个资源发出授权,而不是仅仅发出声明,令牌可能会变得相当沉重,管理这种复杂性似乎很困难


那么我的理解正确吗?因此,授权负责管理用户声明并发布仅包含声明的令牌?另一方面,资源服务器负责根据声明允许或不允许访问资源?

访问令牌不包含用户声明,但包含用户声明

授权服务器负责管理访问令牌,但不一定要管理用户的声明。应该有一个单独的服务器来管理用户的声明

第2条听起来很奇怪,因为访问令牌的存在意味着授权已经被授予


OAuth2.0是授权规范。是身份验证的规范。不要混淆。

访问令牌不包含用户的声明,但包含用户的声明

授权服务器负责管理访问令牌,但不一定要管理用户的声明。应该有一个单独的服务器来管理用户的声明

第2条听起来很奇怪,因为访问令牌的存在意味着授权已经被授予


OAuth2.0是授权规范。是身份验证的规范。不要困惑。

谢谢您的回答@TakahikoKawasaki。我只错过了一点。正如我所了解的,对资源的授权应该基于检查用户声明的业务规则来完成。如果访问令牌不包含用户的声明,那么它真正包含什么?我的意思是,我们必须向授权服务器请求每个单独的资源,并且访问令牌包含允许每个资源单独使用的信息?基于声明的检查和基于权限的检查是不同的事情。前者是基于角色=用户属性的访问控制。后者是基于访问令牌=用户授予的权限的访问控制。如果要基于角色保护Web API,则不需要访问令牌。通常,访问令牌与有关谁的用户已向谁的客户端应用程序授予了什么权限范围的信息相关联,而与用户声明无关。是获取访问令牌信息的规范。该规范显示了通常与访问令牌相关的信息。因此,当我们使用OAuth时,授权不是给用户,而是给客户端应用程序?因此,我们不应该使用OAuth授权某些用户访问某些资源,而应该仅授权某些客户端应用程序以用户的名义访问资源?您的理解是正确的。两者都称为授权。请注意,您可以同时使用基于角色和基于令牌的访问控制机制。仅供参考:很好阅读:Stormpath,谢谢您的回答@TakahikoKawasaki。我只错过了一点。正如我所了解的,对资源的授权应该基于检查用户声明的业务规则来完成。如果访问令牌不包含用户的声明,那么它真正包含什么?我的意思是,我们必须为每个单独的资源请求授权服务器,并且访问令牌包含允许每个资源的信息
m单独?基于声明的检查和基于权限的检查是不同的事情。前者是基于角色=用户属性的访问控制。后者是基于访问令牌=用户授予的权限的访问控制。如果要基于角色保护Web API,则不需要访问令牌。通常,访问令牌与有关谁的用户已向谁的客户端应用程序授予了什么权限范围的信息相关联,而与用户声明无关。是获取访问令牌信息的规范。该规范显示了通常与访问令牌相关的信息。因此,当我们使用OAuth时,授权不是给用户,而是给客户端应用程序?因此,我们不应该使用OAuth授权某些用户访问某些资源,而应该仅授权某些客户端应用程序以用户的名义访问资源?您的理解是正确的。两者都称为授权。请注意,您可以同时使用基于角色和基于令牌的访问控制机制。仅供参考:很好阅读:通过Stormpath,