OAuth2:JWT授权授权和使用JWT客户端身份验证的客户端凭据授权之间有什么区别?

OAuth2:JWT授权授权和使用JWT客户端身份验证的客户端凭据授权之间有什么区别?,oauth,oauth-2.0,jwt,Oauth,Oauth 2.0,Jwt,OAuth2 JWT概要文件引入了将JWT用作授权授予和客户端身份验证的可能性 JWT客户端身份验证功能独立于特定的授权类型,并且可以用于任何授权类型,也可以用于客户端凭据授权 但是,使用JWT授权类型似乎与在JWT客户端身份验证中使用客户端凭据授权完全相同,只是语法略有不同 在这两种情况下,客户端都会联系令牌端点以获取访问令牌: POST /token.oauth2 HTTP/1.1 Host: as.example.com Content-Type: application/x-www-fo

OAuth2 JWT概要文件引入了将JWT用作授权授予和客户端身份验证的可能性

JWT客户端身份验证功能独立于特定的授权类型,并且可以用于任何授权类型,也可以用于客户端凭据授权

但是,使用JWT授权类型似乎与在JWT客户端身份验证中使用客户端凭据授权完全相同,只是语法略有不同

在这两种情况下,客户端都会联系令牌端点以获取访问令牌:

POST /token.oauth2 HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=[JWT]
vs


可能很少。在OAuth中,识别客户的方式和请求授权的方式是两个不同的概念,因此问题分别针对这些概念:

  • 客户端可以使用JWT向授权服务器进行身份验证吗?对
  • 客户能否使用JWT发出授权请求?对
该规范似乎暗示,分离只是一个设计决策,取决于决策者找出哪些场景对他们有价值:

用于客户端身份验证的安全令牌的使用与将安全令牌用作授权授权是正交的,并且是可分离的。它们可以组合使用,也可以单独使用。使用JWT的客户端身份验证只不过是客户端向令牌端点进行身份验证的一种替代方法,必须与某些授予类型结合使用,以形成完整且有意义的协议请求。JWT授权授权可与客户身份验证或标识一起使用,也可不与客户身份验证或标识一起使用。授权服务器自行决定是否需要与JWT授权授权一起使用客户端身份验证,以及支持的客户端身份验证类型

一种具体的可能性是:这种分离允许授权服务器根据客户端类型设置不同的策略。例如,对于公共客户端(如移动应用程序),服务器不应接受客户端信任授予类型。相反,服务器可以接受公共客户端的JWT授权类型,并发出一个较低权限的令牌


除此之外,,我认为,该设计只是为客户机和服务器提供了一定程度的自由度,以便在迁移这一部分的同时,根据需要,使现有握手的这一部分保持不变。

对于Josh C的伟大答案,有一点不同的看法:碰巧,客户机身份验证和授权凭据都可以可以表示为JWTs,但它们背后的语义不同

这是关于关注点的分离:客户使用识别他们的凭证进行身份验证,即他们是所谓的
主体
,而他们使用发给他们的补助金,即他们是所谓的
受众
。或者如规范草案第12版()所述:

  • JWT必须包含一个“子”(主题)索赔,以识别 作为JWT主题的委托人。需要处理两个案例 区分:

    A.对于授权授予,受试者通常 标识访问令牌所针对的授权访问者 正在被请求(即,资源所有者或 授权代表),但在某些情况下,可能是 假名标识符或其他表示匿名的值 用户

    B.对于客户端身份验证,主题必须是 OAuth客户端的“客户端id”

  • POST /token.oauth2 HTTP/1.1
    Host: as.example.com
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=client_credentials&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=[JWT]