首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OAuth2.0 response_type和grant_type

OAuth2.0 response_type和grant_type
EN

Stack Overflow用户
提问于 2022-11-23 08:45:00
回答 2查看 46关注 0票数 1

我正在尝试构建一个Oauth2.0授权服务器,我想了解更多关于response_type和grant_type参数的信息。

据我目前所读,response_type是/authorize端点上的查询参数,它的值可以是“令牌”,也可以是“代码”,这表示授权服务器将使用访问令牌或授权代码进行响应。

grant_type是/token端点上的查询参数,它指示授权服务器将使用哪种授予类型来生成令牌或授权代码。授予类型可以是“授权_代码”、“客户端_凭据”、“隐式”等。

我的问题是,如果我选择response_type作为“令牌”,而grant_type选择“authorization_code”,那么授权服务器将如何运行?由于授权代码授予应该返回一个代码,而不是一个令牌,因此服务器在这个场景中将做什么?

同样,如果我选择“代码”响应类型和“隐式”授予类型,行为将是什么?

EN

回答 2

Stack Overflow用户

发布于 2022-11-23 13:07:25

授权代码流

(1)向授权端点提出授权请求

(2)接收一个短暂的授权代码。

(3)使用授权代码向令牌端点发出令牌请求

(4)获取访问令牌

隐式流

(1)向授权端点提出授权请求

(2)直接从授权端点获取访问令牌。

因此,服务器将通过客户端的response_type在GET请求中决定哪个流。

隐式流很方便,但是由于黑客很容易获得访问令牌,所以它的rick很高。如果黑客更改了自己的重定向URL,他可以获得访问令牌。这叫中间攻击。

由于code_chanllenge和code_verifier的存在,使得PKCE的授权代码流更加安全,使客户端和服务器之间进行了双重检查。它调用代码交换的验证密钥,服务器存储code_chanlllengecode_challenge_mothod,然后当询问access_token时,服务器通过code_chanlllengecode_challenge_mothod验证code_verifier

另外两个流是存在密码凭据流和客户端凭据流。

参考文献

所有OAuth 2.0流的图表和电影

使用PKCE的隐式流与代码流

票数 0
EN

Stack Overflow用户

发布于 2022-11-23 14:54:11

我想在这里补充一点,因为我认为最初的海报是在询问一个特定的案例,而不是整个流程。我认为这是一个很好的问题,OAuth 2.0规范并没有明确针对这个特殊情况。

如果我选择response_type作为“令牌”,而选择grant_type作为“授权_代码”,那么授权服务器将如何运行?

这样的事情并没有什么好的理由。如果客户端在token中使用token,并且客户端遵循OAuth 2.0,这意味着客户机将向authorization端点发送请求。授权服务器重定向用户代理进行某种身份验证,并请求资源所有者的授权。如果一切都成功,客户端将获得一个访问令牌。然后不需要再调用需要grant_type的令牌端点。授权服务器应该将此视为一个完全不同的请求。如果客户端首先使用grant_type of authorization code (这不是遵循OAuth 2.0流)向令牌端点发出请求,那么授权服务器应该响应错误,因为客户端将没有一个authorization codecode参数一起使用。

需要grant_type。值必须设置为"authorization_code“。 需要密码。从授权服务器接收的授权代码。4.1.3

authz服务器没有客户端“以前做过什么”的内存。我的意思是,正如您所提到的,response_typegrant_type是在不同端点上使用的参数。因此,使用这些请求是分开的。发送到authz端点时使用response_type,向令牌端点发送请求时使用grant_type

如果authz服务器在其令牌端点接收到一个code参数,并将一个类似client_credentials的值作为其值的,则authz服务器确实需要处理一些事情,而且客户端很容易出错。我不认为这个部分在规范中得到了明确的解决,因为code更像是一个无关的参数,但我认为它属于无效的请求错误,因为您可以认为它是一个“不支持的参数”,因为请求中的grant_typeclient_credentials,而客户端凭据授予类型不支持该参数:

invalid_request:请求缺少一个必需的参数,包括一个不受支持的参数值(授予类型除外),重复一个参数,包含多个凭据,使用多个机制对客户端进行身份验证,或者格式错误。5.2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74543919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档