web-dev-qa-db-ja.com

Spring-Security-Oauth2:このリソースにアクセスするには完全な認証が必要です

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にアクセスするためのすべての許可を与えます。この問題は実際には何ですか?

29

client_idおよびclient_secretは、デフォルトでは、フォームエンコードされた本文ではなく、Authorizationヘッダーに配置する必要があります。

  1. client_idclient_secretを連結し、それらの間にコロンを入れます:[email protected]:12345678
  2. Base 64は結果をエンコードします:YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==
  3. Authorizationヘッダーを設定します:Authorization: Basic YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==
22
GaryF

デフォルトでは、Spring OAuthは基本的なHTTP認証を必要とします。 Javaベースの構成でこれをオフにしたい場合は、次のようなクライアントのフォーム認証を許可する必要があります。

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

その理由は、デフォルトで/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

5
Marco Lenzo

トークンAPI "/oauth/token"を事前認証する必要があります

これを行うには、ResourceServerConfigurerAdapterを拡張し、configure functionをオーバーライドします。

例えば:

http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests().antMatchers("/oauth/token").permitAll().
anyRequest().authenticated();
1
compiler123

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]に設定し、[フォームデータ]タブで付与タイプを追加します。

1
Stackee007