Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
Oauth 2.0 为什么在OAuth2.0中授权码授权和隐式授权不强制客户端身份验证_Oauth 2.0 - Fatal编程技术网

Oauth 2.0 为什么在OAuth2.0中授权码授权和隐式授权不强制客户端身份验证

Oauth 2.0 为什么在OAuth2.0中授权码授权和隐式授权不强制客户端身份验证,oauth-2.0,Oauth 2.0,根据RFC6749第4.1.1章: 在授权代码授予的授权请求规范中, 身份验证只需要客户端id。因为客户端类型可以是公共的,所以这意味着任何人都可以获得授权代码,然后在访问令牌请求中使用它。在这里,您只需要提供客户机_id(公共)、授权码(无需验证即可获得)、重定向_uri和授予_类型(不用于验证/授权目的),就可以获得访问令牌 我的问题是,为什么这类授权没有任何强制性授权/认证程序,那么,拥有这种类型的授权的目的是什么?隐式授权也是一样的。客户端身份验证不仅对注册为公共客户端(如移动本机应用程

根据RFC6749第4.1.1章: 在授权代码授予的授权请求规范中, 身份验证只需要客户端id。因为客户端类型可以是公共的,所以这意味着任何人都可以获得授权代码,然后在访问令牌请求中使用它。在这里,您只需要提供客户机_id(公共)、授权码(无需验证即可获得)、重定向_uri和授予_类型(不用于验证/授权目的),就可以获得访问令牌


我的问题是,为什么这类授权没有任何强制性授权/认证程序,那么,拥有这种类型的授权的目的是什么?隐式授权也是一样的。

客户端身份验证不仅对注册为公共客户端(如移动本机应用程序)的客户端是强制性的。移动应用程序不能安全地保存客户端机密,因此在授权码授予和隐式授予中它不是强制性的。客户端应用程序(如web应用程序)可以在服务器中安全地保存客户端机密,此类客户端应注册为机密客户端。注册为机密客户机的客户机应提供客户机id和机密,以进行客户机身份验证。

OAuth2服务器在用户身份验证和用户批准向客户机授予权限的同意后(由
客户机id
标识)发出授权码。然后,身份验证代码作为参数发送到客户端注册的重定向URI。所以我不知道你说的“任何人都可以获得授权码”是什么意思

公共客户端应与OAuth2扩展一起使用。作为一次性密码。因此,即使身份验证代码被盗,在不知道令牌端点的
code\u验证器
参数的情况下,也无法将其交换为令牌


如果攻击者使用其他人的客户端id(假装是客户端)创建恶意应用程序,则身份验证代码仍将发送到客户端的重定向URL。如果攻击者掌握了此URL处理程序,那么这可能是超出OAuth2协议范围的问题。

那么对于公共客户端,客户端id是否安全?好的,在我看来,授权码授权不是为了保护资源而设计的?否则,对于公共客户端,假设应用程序已注册并设置重定向uri。一旦应用程序B获得id,甚至它仍然重定向到预注册的uri,应用程序B仍然可以充当应用程序A并执行AppA可以执行的任何操作?AppB可以启动与AppA相同的
/auth
请求,但生成的验证代码将发送到AppA控制的重定向URL(例如
https://appA.com/auth?code=abc123
)因此,AppB不会得到代码。如果它没有回答你的问题,请考虑用一个具体的例子来更新它。在OAuS2失败的情况下,即使是Appb也没有直接获得代码,请求重定向到,从那一点上,AppB仍然可以获得访问令牌。因为没有其他的认证程序?它是这样的:AppA和AppB都运行并通过所有的过程,最后,AppA可以得到的任何东西,AppB也可以。有什么不同?我可能不明白你的意思。如果AppB没有得到代码,它也不能将其交换为访问令牌。AppB不能从AppA的URL读取代码。我想我最好理解一下问:应用程序在哪里运行以获取重定向uri?资源服务器还是客户端?问:如果应用程序在客户端计算机上运行,这意味着AppA和AppB可以在同一台计算机上运行,无论授权过程是什么,如果它们都知道公共客户端id,那么从服务器获取资源的区别是什么?