资讯详情

你知道吗?OAuth2客户端有两种,认证方式有七种。

根据其与授权服务器的安全认证能力,客户端可分为机密类型()和公共类型()。

机密类型本身会有密码凭证,比如Web服务器后端程序;公共类型没有密码凭证,纯浏览器前端应用程序或移动客户端应用程序大多属于这种类型。无论哪种,它们都有客户端ID()。

OAuth2客户端认证

执行客户端在授权的敏感过程中()客户端身份验证必须使用授权服务器,以确保客户端不会在中转包。

客户端认证方法

目前,客户端认证方式如下:

959ad579761d3c40a8f1cd8b84f5bbe7.png

前面过时使用方式;微信DEMO使用的是非标准方法;目前相关的使用的是方法。剩下的方法这两种方法可以很好地保护客户端的认证信息,更安全。这两种方法已经得到了支持。

client_secret_jwt

client_secret_jwt方式是客户端将自己的密钥作为密钥HmacSHA256算法的生成SecretKey

byte[]pin=clientSecret.getBytes(StandardCharsets.UTF_8); SecretKeySpecsecretKey=newSecretKeySpec(pin,"HmacSHA256");

然后通过SecretKey生成携带客户端信息,请求授权码环节携带该为了授权服务器进行客户端认证,请求的报告为:

POST /oauth2/token HTTP/1.1      Host: oauth2_client.felord.cn      Content-Type: application/x-www-form-urlencoded       grant_type=authorization_code&      code=n0esc3NRze7LTCu7iYzS6a5acc3f0ogp4&      client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&      client_assertion=你的JWT

授权服务器收到请求后通过客户端的client_secret进行解码校验以认证客户端。这种方式能很好地保护client_secret在非传输环境。

?

这里OAuth客户端密钥(比特的长度必须大于或等于

private_key_jwt

private_key_jwtclient_secret_jwt唯一的区别是生成不同的方式。客户端已经不需要client_secret,只需配置一对RSA或者EC通过密钥生成密钥,此外,公钥通常需要提供给授权服务器。这种方式的细节已经在胖哥专栏了[1]中JOSE规范[2]这篇文章已经详细说明了,这里就不赘述了。这种方式使客户端的认证信息传输更安全,是我个人最喜欢的方式。

tls_client_auth

这个比较先进,嵌入了TLS安全层,在HTTP认证协议级别客户方面,涉及的证书来自可靠的证书。这种方法基本上脱离了应用层,是一种无侵入的方法。

self_signed_tls_client_auth

这也是在TLS安全层,但它使用自签名证书。

总结

市场上的大多数教程只会提到过时POST方式以及,很少涉及以下五种,小胖哥会详细实现,详细内容可订阅专栏:

https://blog.csdn.net/qq_35067322/category_11691173.html

这些OAuth客户端认证方法在不同的场景中有不同的优势。您可以根据不同的安全级别选择不同的OAuth2客户端认证方式。

推荐阅读

  • 秒杀德云社!今晚魔都朋友的朋友圈,快把我笑死了

  • 裁员这么猛?潮水要退了?

  • 如何卸载360浏览器的过程堪比拆弹

标签: ogp301光电传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台