java - OAuth2 'mac' token 类型是否有任何已知的 Java 实现?

标签 java oauth-2.0 hmac

我查看了各种 OAuth2 java 库(spring-security-oauth、cxf、scribe、google-oauth-java-client),但找不到任何支持 Mac token 类型的内容,如下所述: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-http-mac-01

它们都默认支持 Bearer token 类型,仅此而已。完全不支持此 token 类型是否有任何特殊原因?

最佳答案

OAuth 2.0 的大多数 Java 库支持Bearer token 类型的原因是Bearer token 配置文件带来了简化的身份验证方案.任何拥有 bearer token 的用户都可以使用它来访问相关资源(无需证明拥有加密 key )。 OAuth 2.0 授权框架:Bearer token 使用规范描述了在 HTTP requests 中使用 bearer token 访问 OAuth 2.0 protected 资源。

Bearer 访问 token 的响应

HTTP/1.1 200 OK
     Content-Type: application/json;charset=UTF-8
     Cache-Control: no-store
     Pragma: no-cache

     {
       "access_token":"mF_9.B5f-4.1JqM",
       "token_type":"Bearer",
       "expires_in":3600,
       "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
      }

MAC Token Profile 定义了 HTTP MAC 访问身份验证方案,提供了一种通过对请求进行部分加密验证来发出经过身份验证的 HTTP 请求的方法,涵盖 HTTP 方法、请求 URI 和主机。每个访问 token 类型定义都指定了与 access_token 响应参数一起发送到客户端的附加属性(mac_keymac_algorithm)。

HTTP/1.1 200 OK
     Content-Type: application/json
     Cache-Control: no-store

     {
       "access_token":"SlAV32hkKG",
       "token_type":"mac",
       "expires_in":3600,
       "refresh_token":"8xLOxBtZp8",
       "mac_key":"adijq39jdlaska9asud",
       "mac_algorithm":"hmac-sha-256"
     }

access_tokenMAC key 标识符是一个字符串,用于标识用于计算请求 MACMAC key >。该字符串通常对客户端不透明。服务器通常会为每组 MAC 凭据分配特定的范围和生命周期。标识符可以表示用于检索授权信息(例如从数据库)的唯一值,或者以可验证的方式自包含授权信息(即由一些数据和签名组成的字符串)。

Scribe是用于 OAuth 2.0 的 Java 库,带有 MAC token 配置文件。

来源:OAuth 2.0 Bearer Token Profile Vs MAC Token Profile

关于java - OAuth2 'mac' token 类型是否有任何已知的 Java 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460608/

相关文章:

linux - JWT Signature HS256 - Linux 和网站上的不同结果

java - 带有表情符号的 firebase 存储引用不起作用

java - 使用注解的 Spring 3 的 AOP

java - 写入应用程序特定文件的位置

oauth-2.0 - ejabberd 中的 oauth2 身份验证支持

c# - 为什么在 oauth2 中缓存访问 token 被认为是不好的?

c++ - 如何使用 Crypto++ 库创建 HMAC 256?

java - 为 Java 中的多线程应用程序提供每日更新缓存的最佳实践

Python 3 的 OAuth 端口

elixir - HMAC、Elixir、Plug.Conn(尝试多次调用 read_body)