これらのOAuth2クライアントの認証方法がわからない場合があります

OAuth2クライアントは、承認サーバーで安全に認証する能力に応じて、機密と公開に分類できます

シークレットタイプ自体には、Webサーバーバックエンドプログラムなどのパスワードクレデンシャルがあります。パブリックタイプにはパスワードクレデンシャルがありませんが、純粋なブラウザフロントエンドアプリケーションまたはモバイルクライアントアプリケーションは、ほとんどがこのタイプに属します。いずれにせよ、それらはすべてクライアントID(client_id)を持っています。

OAuth2クライアント認証

クライアントは、 OAuth2承認を実行する機密性の高いプロセス(関連するプロセスには、トークンリクエスト、トークンイントロスペクションリクエスト、トークン失効リクエストが含まれます)でクライアント認証に認証サーバーを使用して、クライアントが途中で転送されないようにする必要があります。

クライアント認証方式

現在のクライアント認証方法は次のとおりです。

ClientAuthenticationMethod.pngGiteeの以前のデモでは古いPOSTメソッドを使用しています。WeChatDEMOは非OAuth2標準メソッドを使用しています。現在、 SpringAuthorizationServerの関連するDEMOはclient_secret_basicメソッドを使用しています残りのメソッドの中で、client_secret_jwtprivate_key_jwtがより頻繁に使用されます。これらの2つのメソッドは、クライアントの認証情報を十分に保護し、セキュリティを強化できます。現在、両方の方法がSpringSecurityとSpringAuthorizationServerでサポートされてます

client_secret_jwt

client_secret_jwtその方法は、OAuth2クライアントがHmacSHA256アルゴリズムのキーとして独自のキーを生成することSecretKeyです。

byte[] pin = clientSecret.getBytes(StandardCharsets.UTF_8);
SecretKeySpec  secretKey = new SecretKeySpec(pin,"HmacSHA256");
复制代码

次に、OAuth2クライアント情報SecretKeyを運ぶJWTを生成することにより、 JWTは認証コード要求トークンリンクで運ばれ、認証サーバーがクライアント認証を実行できるようになります。要求されたメッセージは次のとおりです。

     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
复制代码

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

这里OAuth2客户端的密钥(client_secret)比特长度必须大于等于256

private_key_jwt

private_key_jwtclient_secret_jwt唯一的区别就是生成JWT的方式不同。通过这种方式,OAuth2客户端已经不需要client_secret,只需要配置一对RSA或者EC密钥,通过密钥来生成JWT,另外还需要向授权服务器提供公钥,通常是一个jwkSetUrl。该方式的细节已经在我JOSE规范相关的文章中进行过详细说明,这里不再赘述。这种方式让客户端的认证信息更加安全的传输,是我个人比较喜欢的方式。

tls_client_auth

这个比较高级,嵌入了TLS安全层,在HTTP协议级别来认证OAuth2客户端,它涉及的证书来自可信任的CA。这种方式基本脱离了应用层,是一种无侵入的方式。

self_signed_tls_client_auth

这个同样也是在TLS安全层,不过它使用了自签名的X.509证书。

总结

市場に出回っているチュートリアルのほとんどは、古いものだけに言及しています役職メソッドとclient_secret_basicおよびclient_secret_postメソッドが後者の5つに含まれることはめったにありません。BrotherFatはprivate_key_jwtclient_secret_jwtを実装しています。詳細については、SpringSecurityOAuth2列をサブスクライブしてください。これらのOAuth2クライアント認証方法には、さまざまなシナリオでさまざまな利点があります。さまざまなセキュリティレベルに応じて、さまざまなOAuth2クライアント認証方法を選択できます。

关注公众号:Felordcn获取更多资讯

個人ブログ:https://felord.cn

おすすめ

転載: juejin.im/post/7080037390370226184