目次
質問内容
回避策
ホームページ Java OAuth 2.0 リソース サーバー JWT を使用したアクセス許可 (認可) の問題

OAuth 2.0 リソース サーバー JWT を使用したアクセス許可 (認可) の問題

Feb 13, 2024 pm 03:51 PM

OAuth 2.0 リソース サーバー JWT を使用すると、権限 (認可) の問題が発生することがあります。これは、多くの開発者が開発プロセス中に頻繁に遭遇する課題です。 OAuth 2.0 は、ユーザーがサードパーティのアプリケーションが保護されたリソースにアクセスすることを承認できるようにする承認のオープン標準です。 JWT (JSON Web Token) は、Web アプリケーション間でクレームを渡す方法です。ただし、実際には、認可の失敗、アクセス トークンの取得の失敗など、いくつかの権限の問題が発生する可能性があります。この記事では、これらの問題を分析し、開発者が OAuth 2.0 リソース サーバー JWT をより効果的に使用できるようにするためのいくつかの解決策を提供します。

質問内容

oauth 2.0 リソースサーバー jwt を使用して、簡単なアプリケーションで jwt を使用したアクセス認可を構成しようとしています。

認証部分全体は正常に動作していますが、認証で問題が発生しています。トークンに正しい権限が存在する場合でも、すべての保護されたエンドポイントで 403禁断エラーが発生します。

デフォルトのスコープ (scope_) 属性を使用し、構成をロール (role_) に変更しようとしましたが、問題は解決しません。

解決方法を知っている人はいますか?

完全なソースコード: https://github.com/gustavosc1/spring-security-jwt

トークンの生成例: eyjhbgcioijsuzi1nij9.eyjpc3mioijzchjpbmctc2vjdxjpdhktand0iiwic3viijoidxnlcm5hbwuilcjlehaioje3mdu0ndmyotqsimlhdci6mtcwntqwnzi5ncwicm9szxmi oijst0xfx0fetuloin0. peiv wrthx_7mr6eefqbid5dplhffzcvd7scmmt3f7rk7sk1i6kerpqi5ubdvaefnzsjq6vka5nadltsbqidfzogmoixjktfhsc5zrnyyrhikvnwcwb3wrgdd1ezgihaldfjxwxsyypau njwdxznirkl93e6mg1uao5piy9p- 9yp8jer7o31wkdr1coskzk3gqw42uecib9h1rrlkx9pdk7pf9rtfssfcwc-ntvismrycreco9rialqfydpdzeojimcbqveyboqfhn2woepgdm8mr5zsdhgdq e1ivsibfbcj_0486zuqiksxp2kniljhl2b5qnan0 7f jpvslk--ccsg

セキュリティ構成:

リーリー

ユーザー詳細サービスimpl:

リーリー

ユーザー認証済み:

リーリー

jwtサービス:

リーリー

プライベートコントローラー:

@configuration
@enablewebsecurity
//@enablemethodsecurity(prepostenabled = true)
public class securityconfig {
  @value("${jwt.public.key}")
  private rsapublickey key;
  @value("${jwt.private.key}")
  private rsaprivatekey priv;

  @bean
  securityfilterchain filterchain(httpsecurity http) throws exception {
    http.csrf(csrf -> csrf.disable())
        .authorizehttprequests(
            auth -> auth
                .requestmatchers("/authenticate").permitall()
                .requestmatchers("/register").permitall()
                .requestmatchers("/private").hasanyrole("admin"))
        .httpbasic(customizer.withdefaults())
        
        // https://docs-spring-io.translate.goog/spring-security/reference/servlet/oauth2/resource-server/jwt.html?_x_tr_sl=en&_x_tr_tl=pt&_x_tr_hl=pt-br&_x_tr_pto=sc
        .oauth2resourceserver(
                conf -> conf.jwt(
                    jwt -> jwt.decoder(jwtdecoder())
                    .jwtauthenticationconverter(jwtauthenticationconverter())));
                
    return http.build();
  }
  
  @bean
  public jwtauthenticationconverter jwtauthenticationconverter() {
      jwtgrantedauthoritiesconverter grantedauthoritiesconverter = new jwtgrantedauthoritiesconverter();
      grantedauthoritiesconverter.setauthoritiesclaimname("roles");
      grantedauthoritiesconverter.setauthorityprefix("role_");

      jwtauthenticationconverter jwtauthenticationconverter = new jwtauthenticationconverter();
      jwtauthenticationconverter.setjwtgrantedauthoritiesconverter(grantedauthoritiesconverter);
      return jwtauthenticationconverter;
  }

  @bean
  jwtdecoder jwtdecoder() {
    return nimbusjwtdecoder.withpublickey(this.key).build();
  }

  @bean
  jwtencoder jwtencoder() {
    jwk jwk = new rsakey.builder(this.key).privatekey(this.priv).build();
    jwksource<securitycontext> jwks = new immutablejwkset<>(new jwkset(jwk));
    return new nimbusjwtencoder(jwks);
  }
  
  @bean
  passwordencoder passwordencoder() {
    return new bcryptpasswordencoder();
  }
  
}
ログイン後にコピー

回避策

提供されたトークンが生成され、roles フィールドが ROLE_ADMIN に設定されました。 jwtAuthenticationConverter() で、setAuthorityPrefixROLE とともに使用しようとすると、結果は ROLE_ROLE_ADMIN になります。

この問題を修正するには、この行を grantedAuthoritiesConverter.setAuthorityPrefix(""); に変更します。

この調整を行った後、問題は解決されるはずです。他に問題が発生した場合は、お知らせください。

######知らせ:######

この手順を省略すると、デフォルトのプレフィックスは SCOPE になり、ロールは

SCOPE_ROLE_ADMIN

になります。

以上がOAuth 2.0 リソース サーバー JWT を使用したアクセス許可 (認可) の問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)