Javaベースの構成でspring-security-oauth2.0
を使用しようとしています。私の設定は完了しましたが、アプリケーションをTomcatにデプロイし、アクセストークンの/oauth/token
urlにアクセスすると、Oauth
が次のエラーを生成します。
<oauth>
<error_description>Full authentication is required to access this resource</error_description>
<error>unauthorized</error>
</oauth>
私の設定はオンです Gitハブ、リンクをクリックしてください
コードが大きいため、gitを参照してください。送信要求にchrome postmanクライアントを使用しています。以下が私のリクエストです。
POST /dummy-project-web/oauth/token HTTP/1.1
Host: localhost:8081
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=abc%40gmail.com&client_secret=12345678
エラーは、URLがOauth
によって保護されているように見えますが、構成では、このURLにアクセスするためのすべての許可を与えます。この問題は実際には何ですか?
client_id
およびclient_secret
は、デフォルトでは、フォームエンコードされた本文ではなく、Authorizationヘッダーに配置する必要があります。
client_id
とclient_secret
を連結し、それらの間にコロンを入れます:[email protected]:12345678
。YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==
Authorization: Basic YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==
デフォルトでは、Spring OAuthは基本的なHTTP認証を必要とします。 Javaベースの構成でこれをオフにしたい場合は、次のようなクライアントのフォーム認証を許可する必要があります。
@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.allowFormAuthenticationForClients();
}
}
その理由は、デフォルトで/oauth/token
エンドポイントが Basic Access Authentication によって保護されているためです。
必要なことは、リクエストにAuthorization
ヘッダーを追加することだけです。
次のコマンドを発行して、curl
などのツールで簡単にテストできます。
curl.exe --user [email protected]:12345678 http://localhost:8081/dummy-project-web/oauth/token?grant_type=client_credentials
トークンAPI "/oauth/token"
を事前認証する必要があります
これを行うには、ResourceServerConfigurerAdapter
を拡張し、configure function
をオーバーライドします。
例えば:
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests().antMatchers("/oauth/token").permitAll().
anyRequest().authenticated();
Spring OAuth 2.0.7-RELEASEでは、次のコマンドが機能します
curl -v -u [email protected]:12345678 -d "grant_type=client_credentials" http://localhost:9999/uaa/oauth/token
Chrome POSTMANでも機能します。[基本認証]タブでクライアントとシークレットを確認し、メソッドを[POST]に設定し、[フォームデータ]タブで付与タイプを追加します。