2015-04-16 196 views
27

OAuth2 JWT配置文件引入了将JWT用作授权授权和客户端身份验证的可能性。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

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] 

回答

15

Josh C的一个很好的答案略有不同:在发生时,客户端身份验证和授予凭证都可以表示为JWT,但它们背后的语义是不同的。

这里所说的是关注点分离:客户与标识他们的凭证验证即他们所谓subject,而他们使用的是发行他们即补助他们是所谓的audience。或作为规范草案的12版(https://tools.ietf.org/html/draft-ietf-oauth-jwt-bearer-12)表示:

  • 的JWT必须包含一个“子”(主题)根据权利要求识别 主要是的主题智威汤逊。两种情况必须 分化:

    A.对于授权拨款,主题通常 标识授权的访问为其访问令牌 被请求(即资源所有者或 授权代表),但在一些情况下,可能是假名标识符或其他表示匿名用户的值。

    B.对于客户端认证,主题必须是OAuth客户端的“client_id” 。

  • 9

    大概很少。客户端被识别的方式,请AUTH赠款是OAuth的两个不同概念的方式,所以这些问题单独处理这些概念:

    • 能否在客户端通过智威汤逊的授权服务器进行身份验证?是。
    • 客户可以使用JWT发出授予请求吗?是。

    该规范似乎暗示分离是一个简单的设计决定,推迟到决策者查找的场景是有价值的对他们说:

    客户端验证使用的安全令牌的正交并且可以使用安全令牌作为授权许可。它们可以组合使用或单独使用。使用JWT的客户端身份验证只不过是客户端向令牌终端进行身份验证的替代方法,必须与某些授予类型一起使用才能形成完整且有意义的协议请求。 JWT授权许可可以在有或没有客户认证或身份识别的情况下使用。无论客户端身份验证是否需要与JWT授权授权一起使用,以及受支持的客户端身份验证类型,都是由授权服务器决定的策略决策。

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

    除此之外,我假设设计只是为客户端和服务器提供一定的自由度来实现转移 - 在需要的时候保持现有握手的这部分同时迁移该部分。