我正在开发一个基于rfc6749的oauth2提供程序,我想知道,为什么访问令牌请求上需要redirect_uri?/token端点没有重定向,并且状态被假设为已经验证过(即针对CSRF),所以redirect URI的副本对我来说没有多大意义。
hivapdat1#
在auth代码流中,它用于验证第一个auth请求中的redirect_uri。https://www.oauth.com/oauth2-servers/redirect-uris/redirect-uri-validation/
授予访问令牌
令牌终结点将收到一个请求,请求将授权代码交换为访问令牌。此请求将包含重定向URL和授权代码。作为一种附加的安全措施,服务器应验证此请求中的重定向URL是否与此授权代码的初始授权请求中包含的重定向URL完全匹配。如果重定向URL不匹配,服务器以错误拒绝该请求。
ql3eal8s2#
同样的问题也在这里讨论:https://security.stackexchange.com/questions/44214/what-is-the-purpose-of-oauth-2-0-redirect-uri-checking。The best response imho is vinod one,即使用灵活的redirect_uri(使用通配符)时减少表面攻击
aoyhnmkz3#
在以下情况下需要重定向URI:1.授权代码流,其中服务器使用代码重定向到重定向URI,例如对授权请求的示例响应是:
HTTP/1.1 302 Found Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA &state=xyz
字符串Authz代码流的错误响应也是如此:
HTTP/1.1 302 Found Location: https://client.example.com/cb?error=access_denied&state=xyz
型在隐式授权的情况下,服务器也会将hash“#”片段中的访问令牌返回到请求中提供的重定向URI
3条答案
按热度按时间hivapdat1#
在auth代码流中,它用于验证第一个auth请求中的redirect_uri。https://www.oauth.com/oauth2-servers/redirect-uris/redirect-uri-validation/
授予访问令牌
令牌终结点将收到一个请求,请求将授权代码交换为访问令牌。此请求将包含重定向URL和授权代码。作为一种附加的安全措施,服务器应验证此请求中的重定向URL是否与此授权代码的初始授权请求中包含的重定向URL完全匹配。如果重定向URL不匹配,服务器以错误拒绝该请求。
ql3eal8s2#
同样的问题也在这里讨论:https://security.stackexchange.com/questions/44214/what-is-the-purpose-of-oauth-2-0-redirect-uri-checking。
The best response imho is vinod one,即使用灵活的redirect_uri(使用通配符)时减少表面攻击
aoyhnmkz3#
在以下情况下需要重定向URI:1.授权代码流,其中服务器使用代码重定向到重定向URI,例如对授权请求的示例响应是:
字符串
Authz代码流的错误响应也是如此:
型
在隐式授权的情况下,服务器也会将hash“#”片段中的访问令牌返回到请求中提供的重定向URI