1

私はSpring OAuth2から始めています。これまでのところ、私は設定を使ってアプリケーションを保護しました。しかし、問題があります。クライアントはHTTP基本認証をサポートしていません。春OAuth2トークンエンドポイントのHTTP基本認証を無効にする

/oauth/tokenエンドポイントでHTTP Basic Authを無効にする方法はありますか? JSON本体またはリクエストヘッダーにclient_idとclient_secretを送信したいと思います。私は働きたい

カール例:

curl -X POST -H "Content-Type: application/json" -d '{ 
"username": "user", 
"password": "pass", 
"grant_type": "password", 
"client_id": "test-client-id", 
"client_secret": "test-client-secret" 
}' "http://localhost:9999/api/oauth/token" 

OR

curl -X POST -H "Content-Type: application/json" -H "X-Client-ID: test-client-id" -H "X-Client-Secret: test-client-secret" -d '{ 
"username": "user", 
"password": "pass", 
"grant_type": "password" 
}' "http://localhost:9999/api/oauth/token" 

答えて

10

私は最終的にそれを把握します。 HTTP Basich Authを無効にする方法は、クライアントのフォーム認証を有効にすることです。これらの行を設定に追加するだけです。

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'username=user_username&password=user_password&grant_type=password&client_id=your_trusted_client_id&client_secret=your_trusted_client_secret' "http://localhost:8080/oauth/token" 

をしかし、まだ残っているContentTypeをアプリケーション/ JSONの問題が残っている:

@Configuration 
@EnableAuthorizationServer 
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter { 
    @Override 
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception { 
    oauthServer.allowFormAuthenticationForClients(); 
    } 
} 

今、あなたは、このようにTokenEndpointすることに成功し、要求を送信することができます。誰にでもこれに対する解決策がありますか?

+0

JSONを入力フォーマットとして使用する場合の問題は、RFC標準で要求がフォームのURLエンコード形式で送信されなければならないため、これを変更するとサーバーはOAuth2に準拠しなくなるということです。https: //tools.ietf.org/html/rfc6749#appendix-B – Mrdev

+0

リクエストでContent-Typeに対して1つのオプションしか指定できないとRFCが指定しているとは思いません。提供されたソリューションは、アプリケーション/ jsonとURLエンコードされた両方を並べて使用することを可能にします。もちろん、クライアントごとにJSONを有効/無効にするオプションが必要です。 –

+0

私はたくさんの注意を払って読んだことはありませんでしたが、読んだ部分は 'x-www-form-urlencoded'リクエストでかなり緊密に見えました。 https://tools.ietf.org/html/rfc6749#section-4.3.2を参照してください。 – demaniak

関連する問題